历史上的今天
今天是:2025年07月22日(星期二)
2021年07月22日 | MC9S12XS128MAL Bootloader(1)
2021-07-22 来源:eefocus
首先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; //
史海拾趣
|
FPGA应用于很多场合。比如通信,验证,接口控制。 接口比较多,相对多个PLD来说,成本和速度节省。 CH451资料比较多,上网可以下载。 具体分析下怎么用FPGA写这些控制。 :D :D 第一个阅读器件,了解器件初始化过程,以及显示数据具体过程。也 ...… 查看全部问答> |
|
◆选购安防监控录像系统的误区 目前民用级安防监控主要是来源一些小规模的商业需求,相比一些大规模的安防工程,对于监控的线路基本维持在8路以内,自己购买设备便可以进行调试安装。 目前这类民用级监控系统的选 ...… 查看全部问答> |
|
有谁知道哪里能定制电机呢??需要BLDC,24V,3A电流,功率72W,额定转速8000~1WRPM,最大转矩0.07Nm。电机伸出轴长需要80mm。轴直径不小于5mm。带霍尔,1.5m导线。… 查看全部问答> |
|
相信有高手已经在做wince6.0了,想请问下,它比5.0有啥明显的好处? 增加了啥功能?有没有增加D3DM驱动? 开发效率驱动调试方面有啥提高?… 查看全部问答> |
|
比如 data_led equ 60h .... loop: mov data_led,a inc a jmp loop ... 如何看data_led的变化?在那个窗口可以观察到? 是用那个memeny window吗 那个好像是看rom的窗口 不知道是不是 因为我用那个窗口试过,在0x60h单元中的值总是不会变 ...… 查看全部问答> |
|
如题。 正在学习ARM的开发,采用的是ARM920T的内核。为了进一步熟悉其架构,现想先进行一些简单的开发,比如用汇编调试一下MOV等指令,看看内部寄存器的变化情况,选用JTAG仿真器和AXD进行调试。这个应该算是最简单的入门吧? 现在的问题是,我用 ...… 查看全部问答> |
|
具体情况为: 1、我的ICF文件如下: define symbol __ICFEDIT_intvec_start__ = 0x08000000; define symbol __ICFEDIT_region_ROM_start__ = 0x08000000 ; define symbol __ICFEDIT_region_ROM_end__ = 0x0807FFFF; def ...… 查看全部问答> |




