历史上的今天
今天是:2025年07月26日(星期六)
2021年07月26日 | MC9S12XS128 MAL BootLoader(2)
2021-07-26 来源:eefocus
用户程序就按照正常程序写即可,需要注意以下几点
程序写入固定的位置,不能和BootLoader程序的位置重合,否则有可能程序无法经过BootLoader下载后运行,同样也是在prm中进行相应的操作;
需要用到中断的,要对中断向量进行偏移;
对起始向量进行偏移;
写入地址对齐。
1.BootLoader程序写入固定位置:
ROM_C000 = READ_ONLY DATA_NEAR IBCC_NEAR 0xC000 TO 0xEFDF;
确保不会和BootLoader的F000开始的地址重合;
INTO ROM_C000/*, ROM_4000*/;
2.对中断向量进行偏移,中断发生时,将当前PC位置压入堆栈中,然后通过中断向量找到当前中断函数,一个中断向量不能对应两个中断函数地址;
中断向量的偏移,首先要定义如下的中断向量表,其中对于不用的中断用Unimplemented_ISR表示,再在main函数中令中断偏移寄存器IVBR=0x7F。
3.起始向量的偏移,起始向量即程序最开始PC指针要指向的地址,默认为FFFE,如果偏移,那么该程序是没法直接运行的,只有在BootLoader中运行,所以我们是在使用上位机发送该程序S19文件时,需要将FFFE这一行中的FFFE改为我们需要的地址。
4.在使用上位机传输S19文件时,有部分地址是与FLASH写操作地址不对齐的,比如FFFE,那么需要我们补齐FFF0~FFFD地址的数据为FF;
#pragma CODE_SEG NON_BANKED
interrupt void Unimplemented_ISR(void)
{
asm BGND; //software breakpoint
}
#pragma CODE_SEG DEFAULT
typedef void (*near tIsrFunc)(void);
const tIsrFunc VectorTable[] @0xEF10 =
{
Unimplemented_ISR, // Vector base + 0x10 Spurious interrupt
Unimplemented_ISR, // Vector base + 0x12 System Call Interrupt (SYS)
Unimplemented_ISR, // Vector base + 0x14 Reserved
Unimplemented_ISR, // Vector base + 0x16 Reserved
Unimplemented_ISR, // Vector base + 0x18 Reserved
Unimplemented_ISR, // Vector base + 0x1A Reserved
Unimplemented_ISR, // Vector base + 0x1C Reserved
Unimplemented_ISR, // Vector base + 0x1E Reserved
Unimplemented_ISR, // Vector base + 0x20 Reserved
Unimplemented_ISR, // Vector base + 0x22 Reserved
Unimplemented_ISR, // Vector base + 0x24 Reserved
Unimplemented_ISR, // Vector base + 0x26 Reserved
Unimplemented_ISR, // Vector base + 0x28 Reserved
Unimplemented_ISR, // Vector base + 0x2A Reserved
Unimplemented_ISR, // Vector base + 0x2C Reserved
Unimplemented_ISR, // Vector base + 0x2E Reserved
Unimplemented_ISR, // Vector base + 0x30 Reserved
Unimplemented_ISR, // Vector base + 0x32 Reserved
Unimplemented_ISR, // Vector base + 0x34 Reserved
Unimplemented_ISR, // Vector base + 0x36 Reserved
Unimplemented_ISR, // Vector base + 0x38 Reserved
Unimplemented_ISR, // Vector base + 0x3A Reserved
Unimplemented_ISR, // Vector base + 0x3C Reserved
Unimplemented_ISR, // Vector base + 0x3E ATD0 Compare Interrupt
Unimplemented_ISR, // Vector base + 0x40 Reserved
Unimplemented_ISR, // Vector base + 0x42 Reserved
Unimplemented_ISR, // Vector base + 0x44 Reserved
Unimplemented_ISR, // Vector base + 0x46 Reserved
Unimplemented_ISR, // Vector base + 0x48 Reserved
Unimplemented_ISR, // Vector base + 0x4A Reserved
Unimplemented_ISR, // Vector base + 0x4C Reserved
Unimplemented_ISR, // Vector base + 0x4E Reserved
Unimplemented_ISR, // Vector base + 0x50 Reserved
Unimplemented_ISR, // Vector base + 0x52 Reserved
Unimplemented_ISR, // Vector base + 0x54 Reserved
Unimplemented_ISR, // Vector base + 0x56 Reserved
Unimplemented_ISR, // Vector base + 0x58 Reserved
Unimplemented_ISR, // Vector base + 0x5A Reserved
Unimplemented_ISR, // Vector base + 0x5C Reserved
Unimplemented_ISR, // Vector base + 0x5E Reserved
Unimplemented_ISR, // Vector base + 0x60 Reserved
Unimplemented_ISR, // Vector base + 0x62 Reserved
Unimplemented_ISR, // Vector base + 0x64 Reserved
Unimplemented_ISR, // Vector base + 0x66 Reserved
Unimplemented_ISR, // Vector base + 0x68 Reserved
Unimplemented_ISR, // Vector base + 0x6A Reserved
Unimplemented_ISR, // Vector base + 0x6C Reserved
Unimplemented_ISR, // Vector base + 0x6E Reserved
Unimplemented_ISR, // Vector base + 0x70 Reserved
Unimplemented_ISR, // Vector base + 0x72 Reserved
Unimplemented_ISR, // Vector base + 0x74 Periodic interrupt timer channel 3
Unimplemented_ISR, // Vector base + 0x76 Periodic interrupt timer channel 2
Unimplemented_ISR, // Vector base + 0x78 Periodic interrupt timer channel 1
PIT0_ISR, // Vector base + 0x7A Periodic interrupt timer channel 0
Unimplemented_ISR, // Vector base + 0x7C High Temperature Interrupt (HTI)
Unimplemented_ISR, // Vector base + 0x7E Autonomous periodical interrupt (API)
Unimplemented_ISR, // Vector base + 0x80 Low-voltage interrupt (LVI)
Unimplemented_ISR, // Vector base + 0x82 Reserved
Unimplemented_ISR, // Vector base + 0x84 Reserved
Unimplemented_ISR, // Vector base + 0x86 Reserved
Unimplemented_ISR, // Vector base + 0x88 Reserved
Unimplemented_ISR, // Vector base + 0x8A Reserved
Unimplemented_ISR, // Vector base + 0x8C PWM emergency shutdown
Unimplemented_ISR, // Vector base + 0x8E Port P Interrupt
Unimplemented_ISR, // Vector base + 0x90 Reserved
Unimplemented_ISR, // Vector base + 0x92 Reserved
Unimplemented_ISR, // Vector base + 0x94 Reserved
Unimplemented_ISR, // Vector base + 0x96 Reserved
Unimplemented_ISR, // Vector base + 0x98 Reserved
Unimplemented_ISR, // Vector base + 0x9A Reserved
Unimplemented_ISR, // Vector base + 0x9C Reserved
Unimplemented_ISR, // Vector base + 0x9E Reserved
Unimplemented_ISR, // Vector base + 0xA0 Reserved
Unimplemented_ISR, // Vector base + 0xA2 Reserved
Unimplemented_ISR, // Vector base + 0xA4 Reserved
Unimplemented_ISR, // Vector base + 0xA6 Reserved
Unimplemented_ISR, // Vector base + 0xA8 Reserved
Unimplemented_ISR, // Vector base + 0xAA Reserved
Unimplemented_ISR, // Vector base + 0xAC Reserved
Unimplemented_ISR, // Vector base + 0xAE Reserved
Unimplemented_ISR, // Vector base + 0xB0 CAN0 transmit
Unimplemented_ISR, // Vector base + 0xB2 CAN0 receive
Unimplemented_ISR, // Vector base + 0xB4 CAN0 errors
Unimplemented_ISR, // Vector base + 0xB6 CAN0 wake-up
Unimplemented_ISR, // Vector base + 0xB8 FLASH
Unimplemented_ISR, // Vector base + 0xBA FLASH Fault Detect
Unimplemented_ISR, // Vector base + 0xBC Reserved
Unimplemented_ISR, // Vector base + 0xBE Reserved
Unimplemented_ISR, // Vector base + 0xC0 Reserved
Unimplemented_ISR, // Vector base + 0xC2 Reserved
Unimplemented_ISR, // Vector base + 0xC4 CRG self-clock mode
Unimplemented_ISR, // Vector base + 0xC6 CRG PLL lock
Unimplemented_ISR, // Vector base + 0xC8 Reserved
Unimplemented_ISR, // Vector base + 0xCA Reserved
Unimplemented_ISR, // Vector base + 0xCC Port H
Unimplemented_ISR, // Vector base + 0xCE Port J
Unimplemented_ISR, // Vector base + 0xD0 Reserved
Unimplemented_ISR, // Vector base + 0xD2 ATD0
Unimplemented_ISR, // Vector base + 0xD4 SCI1
Unimplemented_ISR, // Vector base + 0xD6 SCI0
Unimplemented_ISR, // Vector base + 0xD8 SPI0
Unimplemented_ISR, // Vector base + 0xDA TIM Pulse accumulator input edge
Unimplemented_ISR, // Vector base + 0xDC TIM Pulse accumulator A overflow
Unimplemented_ISR, // Vector base + 0xDE TIM timer overflow
Unimplemented_ISR, // Vector base + 0xE0 TIM timer channel 7
Unimplemented_ISR, // Vector base + 0xE2 TIM timer channel 6
Unimplemented_ISR, // Vector base + 0xE4 TIM timer channel 5
史海拾趣
|
不能用那种什么都集成好的直接输出驱动数码管的,因为我需要拿到数字信号有其它用途,DS18B20 满足技术上的要求,不过我想要精度更高一点的,能做到0.3以内最好 谢谢!… 查看全部问答> |
|
我的程序跑在ARM机上、WINCE4.0,对方程序跑在POWER PC的VxWorks下,ARM机为数据接收方,POWER PC为数据发送方。双方COM口设置相同。进行数据传输时,有时正确,有时错误。具体情况是,根据双方定好的通信协议,先交换简单的指令,每次二十几个字节 ...… 查看全部问答> |
|
刚接触32位的单片机,实习公司里面用的瑞萨的单片机,看宣传资料上说瑞萨现在是世界上生产单片机最多的企业,已经超过摩托罗拉。不知瑞萨的单片机市场上应用得多不多,学了这个单片机有没有用?瑞萨的32位supperH是不是用ARM的内核呢?请达人指点! ...… 查看全部问答> |
|
书上有这么一段话: 众所周知,处理器只能执行存放在主存中的软件,而操作系统作为一种比较大的软件,在通常情况下,它只能存放在磁盘里。因此,就必须想办法在系统上电之后把它自磁盘提取出来并装入主存。 现在有块S3C ...… 查看全部问答> |
|
我使用RLINK烧录STM8S207MB: 第一次烧录(STVP)时,程序运行正常; 然后修改一个程序参数(绝对不会影响烧录), 再次烧录: 在烧程序代码部分(PROGRAM MEMORY)时正常, 而在烧录选项字节时,出现" ERROR ON OPTION BYTES(COMPLEMENTARY BYTES, R ...… 查看全部问答> |
|
近日在网上看到用户对鼎阳SDS1102DL的拆机图,给大家分享下,以后如考虑鼎阳示波器这也是个参考资料。 1,包装箱 2,型号,序列号标贴 3,软件版本 4,打开包装箱 内部摆设 5,配件大全 6,裸机观察 背部 CE标贴,接口,电源参数 QC、QA ...… 查看全部问答> |
|
基于UC3842的DC_DC升压电路,输入12V,输出20~24V可调,当不接负载电阻时电压可调范围较大,一接入负载电阻(20Ω)电源电压被拉低至2.2V,并且不在可调,当移除负载又恢复原来的情况,这是怎么回事?… 查看全部问答> |
|
用的是DRV10983开发板,用DRV10983EVM写入程系(写程系时给24供电)后马达能转动,插掉写程系的USC接口马达还能转动,断电24V再接24V转动就隔很久转一圈。是什么原因!! … 查看全部问答> |




