首先BootLoader和用户程序是两个工程,两个工程代码通过修改PRM文件存储在不同的flash中,在通过PC指针的跳转实现两个工程的切换;
BootLoader程序
关中断
初始化时钟;
初始化CAN
初始化flash读写;
开中断,开CAN中断;
计时判断CAN是否收到bootloader开始报文;
时间到后没收到跳转到原用户程序启动向量;
收到后,开始读写flash,读写完后,PC指针跳转到用户程序地址(EEFE);
其中flash程序在读写flash时,要把代码copy到RAM中,因读写时不能再读flash中的代码
extern char __SEG_START_RAM_CODE[] ;
extern char __SEG_END_RAM_CODE[];
extern char __SEG_SIZE_RAM_CODE ;
void CopyCodeToRAM(void)
{
memcpy((unsigned char *)0x3E00, (unsigned char *) __SEG_START_RAM_CODE,(unsigned int) __SEG_SIZE_RAM_CODE);
} //要写入的RAM地址0x3E00; RAM_CODE是在prm中定义的需要复制到ram中的地址区域;
写完后再使用下代码跳转到EEFE;
_asm ldx $eefe;
_asm jmp 0,x;
Prm文件中修改如下,是代码压入指定位置:
ROM_F000 = READ_ONLY DATA_NEAR IBCC_NEAR 0XF000 TO 0xF5FF;
ROM_FB00 = READ_ONLY DATA_NEAR IBCC_NEAR 0XF600 TO 0xFDFF;
PLACEMENT
_PRESTART,
STARTUP, /* startup data structures */
ROM_VAR, /* constant variables */
STRINGS, /* string literals */
VIRTUAL_TABLE_SEGMENT, /* C++ virtual table segment */
NON_BANKED, /* runtime routines which must not be banked */
COPY
INTO ROM_F000/*, ROM_4000*/;
DEFAULT_ROM INTO ROM_FB00; //
上一篇:MC9S12XS128 MAL BootLoader(2)
下一篇:MC9S12XEP100 IIC模块 驱动程序
推荐阅读最新更新时间:2024-10-28 11:29
设计资源 培训 开发板 精华推荐
- ws2812灯带
- exp_motor_pwm
- EVAL-ADP1829,用于具有跟踪功能的双路交错式降压 DC 至 DC 控制器的评估板
- 使用 Analog Devices 的 LTC1775CGN 的参考设计
- TB67S249FTG 时钟输入控制、2 相双极型步进电机驱动器评估板
- G304侧键板 V2.0
- EVAL-ADE7169EBZ-2,带有 8052 MCU、RTC 和 LCD 驱动器的 ADE7166 单相电能计量 IC 评估套件
- 具有 ON/OFF 拨动开关的 LF33CV 3.3V 多路低压降稳压器电源的典型应用
- DC1282A-A,LTC2209IUP 演示板,高中频,LVDS 输出,160 Msps,16 位 ADC,Ain >160MHz
- LT1021CCN8-5 电压基准作为超线性铂金温度传感器的典型应用