历史上的今天
返回首页

历史上的今天

今天是: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     

推荐阅读

史海拾趣

问答坊 | AI 解惑

求低成本电子体温计方案

不能用那种什么都集成好的直接输出驱动数码管的,因为我需要拿到数字信号有其它用途,DS18B20 满足技术上的要求,不过我想要精度更高一点的,能做到0.3以内最好 谢谢!…

查看全部问答>

求助:初学WINCE,串口编程遇到奇怪问题,请教各位

我的程序跑在ARM机上、WINCE4.0,对方程序跑在POWER PC的VxWorks下,ARM机为数据接收方,POWER PC为数据发送方。双方COM口设置相同。进行数据传输时,有时正确,有时错误。具体情况是,根据双方定好的通信协议,先交换简单的指令,每次二十几个字节 ...…

查看全部问答>

关于瑞萨的32位芯片D的一个问题

刚接触32位的单片机,实习公司里面用的瑞萨的单片机,看宣传资料上说瑞萨现在是世界上生产单片机最多的企业,已经超过摩托罗拉。不知瑞萨的单片机市场上应用得多不多,学了这个单片机有没有用?瑞萨的32位supperH是不是用ARM的内核呢?请达人指点! ...…

查看全部问答>

有关LINUX移植的理解问题

书上有这么一段话: 众所周知,处理器只能执行存放在主存中的软件,而操作系统作为一种比较大的软件,在通常情况下,它只能存放在磁盘里。因此,就必须想办法在系统上电之后把它自磁盘提取出来并装入主存。       现在有块S3C ...…

查看全部问答>

RLINK与STM8S烧录问题

我使用RLINK烧录STM8S207MB: 第一次烧录(STVP)时,程序运行正常; 然后修改一个程序参数(绝对不会影响烧录), 再次烧录: 在烧程序代码部分(PROGRAM MEMORY)时正常, 而在烧录选项字节时,出现" ERROR ON OPTION BYTES(COMPLEMENTARY BYTES, R ...…

查看全部问答>

鼎阳SDS1102DL拆机图

近日在网上看到用户对鼎阳SDS1102DL的拆机图,给大家分享下,以后如考虑鼎阳示波器这也是个参考资料。 1,包装箱 2,型号,序列号标贴 3,软件版本 4,打开包装箱 内部摆设 5,配件大全 6,裸机观察 背部 CE标贴,接口,电源参数 QC、QA ...…

查看全部问答>

陕西省电赛获奖名单

本帖最后由 paulhyde 于 2014-9-15 03:11 编辑    …

查看全部问答>

关于DC2DC接电阻负载下电源电压被拉低,电流微弱问题?

基于UC3842的DC_DC升压电路,输入12V,输出20~24V可调,当不接负载电阻时电压可调范围较大,一接入负载电阻(20Ω)电源电压被拉低至2.2V,并且不在可调,当移除负载又恢复原来的情况,这是怎么回事?…

查看全部问答>

DRV10983问题

用的是DRV10983开发板,用DRV10983EVM写入程系(写程系时给24供电)后马达能转动,插掉写程系的USC接口马达还能转动,断电24V再接24V转动就隔很久转一圈。是什么原因!! …

查看全部问答>