首先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; //
上一篇:飞思卡尔MC9S12XS TIME输入捕获
下一篇:mc9s12 c语言,飞思卡尔mc9s12的prm文件详解之二
推荐阅读最新更新时间:2024-11-02 15:14
设计资源 培训 开发板 精华推荐
- NCP57152DSADGEVB、1.5A 可调 VLDO 稳压器演示评估板
- STM32+ESP8266
- LTC3622EMSE 5V/3.3V Vout、突发模式操作、同相开关同步降压稳压器的典型应用电路
- TS4962 2W免滤波器D类音频功率放大器典型应用
- LTC3638IMSE 5V 至 140V 输入至 5V/250mA 输出和 20kHz 最小突发频率的典型应用电路
- AD8625ARUZ单极输出精密放大器典型应用电路
- 客制pc小键盘,CH552单片机HID键盘,电脑多媒体小键盘
- 使用 Diodes Incorporated 的 AP1116 的参考设计
- 使用 LTC2367IDE-16、16 位、500ksps SAR ADC 的典型应用
- 电动螺丝刀
- 免费试用Atmel MCU开发板,抢“鲜”体验优越性能,更有大奖等你拿!
- 有奖直播:Microchip适用于CryptoAuthentication™系列的可信任平台
- 2021 Digikey KOL系列——亲手教你转起一台无刷电机
- 兆易GD32450I-EVAL免费测评试用
- 《美光2022台北国际电脑展主题演讲精选:数据中心专辑》,关注、评论赢固态硬盘等好礼!
- jameswangsynnex带你进入智能电网世界
- 【抢楼有礼】聊聊vishay照明应用在我们身边哪些地方!
- 下载有礼|是德科技:测试设备如何影响产品质量调研报告
- 有奖直播预报名|与英飞凌一同探寻网络摄像机的黑科技
- TI电机驱动课程重磅来袭,评论赢奖!