历史上的今天
今天是:2024年12月05日(星期四)
2019年12月05日 | 【AT91SAM3S】英蓓特EM-SAM3S开发板例子工程中的启动文件分析
2019-12-05 来源:elecfans
手上一块英倍特的EM-SAM3S开发板,拿到已经有一个月了。本来是做uLoong活动使用的板子,可当初由于不熟悉这个芯片,使用了STM32F4当作了替代。最近准备抽点时间折腾下这个板子。
这个板子的资源如下:
MCU:ATMEL Cortex M3 AT91SAM3S4C (主频 64MHz )
FLASH:片内256KB,片外2Gb NandFlash
SDRAM :片内48KB
接口:MicroSD I/F、LCD I/F、RS232 I/F 、USB I/F、JTAG I/F、 Audio I/F 、RS485 I/F
其他功能:RTC、LED×2、USE Button、Zigbee、QTOUCH接口、Free IO、AD
电源:USB供电或者外接5V电源
今天从启动开始看看。以下内容是我分析英倍特提供的例程时的产物。
【预备知识】
Cortex-M3内核规定,起始地址必须存放堆顶指针,而第二个地址则必须存放复位中断入口向量地址,这样在Cortex-M3内核复位后,会自动从起始地址的下一个32位空间取出复位中断入口向量,跳转执行复位中断服务程序。对比ARM7/ARM9内核,Cortex-M3内核则是固定了中断向量表的位置而起始地址是可变化的。
【启动分析】
在例子程序中,MCU启动时,会将vector中定义的第二个地址作为程序的入口地址。即Reset_Handler。
至于为什么会从vector加载,可以查看分散加载文件(.sct)。这里有这么一段:
Vector_region 0x400000
{
board_cstartup_keil.o (vectors, +FIRST)
}
这个声明就是让链接器将board_cstartup_keil.o加载到0x400000。
而0x400000就是内部flash的起始地址:

board_cstartup_keil.o由board_cstartup_keil..c生成。这个文件中,定义了两个东西:__vector_table[]和static void _Reset_Handler( void )
__vector_table就是中断向量表,__vector_table的第二个地址就是_Reset_Handler。因此,MCU启动时将向量表加载完成后,就开始执行_Reset_Handler这个函数。
在这个函数中跳转到main函数。好了,花花丽丽的C开始了。
(至于为什么加载到了0x400000是__vector_table而不是_Reset_Handler,那是因为那个+FIRST这个属性)
【总结一下】
1、在分散加载文件中,设置程序加载到的位置。加载到0x400000这个地址的,就会在启动时候执行。
2、这里的启动文件有很简单的两个东西,中断向量表和函数_Reset_Handler。中断向量表的第二个地址就是复位中断程序入口地址。
3、汇编文件workaround.s没用了。删掉里边的内容都没关系。于是一行汇编代码都没有了,这也算是自己写sct文件的好处吧。
史海拾趣
|
大多数嵌入式产品的显示终端都选择LCD,但在某些需要大屏幕显示的应用中,工业级LCD的价格比较昂贵,且现有的大屏幕显示器(包括CRT显示器和LCD显示器)一般都采用统一的15针VGA显示接口.三星公司ARM9芯片S3C2410以其强大的功能和高性价比在目前嵌入式产 ...… 查看全部问答> |
|
我用的单片机是F149,在程序中发现有只用一次的屏幕显示函数被调用多次,请大家给分析一下,我自己认为是TimerA引起的。 我的这段程序是单片机C语言,在运行时发现屏幕显示函数被多次调用,实际我只用了一次。大家给点意思看看是哪里的问题。我自 ...… 查看全部问答> |
|
各位ggjj求助:IAR中修改程序,可是可执行文件没有变化! 我在IAR编译器中,直接修改程序代码,进行编译以后,生成的可执行文件,跟修改之前的一模一样,没有变化。 我整整调试了一晚上了,出现这种问题,好郁闷!!! 这是怎么回事,我该怎么解决???… 查看全部问答> |
|
MCBSP2 外接ALC5621 codec IC,在播放音乐时,不能发声,输出仅变成了高电平。 MCBSP2_CLKX 1.536M,MCBSP2_FSX 48K,以下是相关寄存器 配置。 MCBSPLP_PCR_REG配置成下降沿发送数据, CLKXP Transmit Clock Polarity RW 0x0 0x0: Transmit dat ...… 查看全部问答> |
|
本设计要求作出一种多路模拟信号采集模块,从多个通道轮流采集数据一次,并将数据保存于记录。本系统采用AT89C52作为控制系统,核心器件采用TI公司的高精度12BIT ,11通道一步采样AD芯片TLC2543。分别从11路采样模拟信号,实现11路数据采集。为了做 ...… 查看全部问答> |
|
实现功能 将音频频谱显示在BBB 的液晶屏上 硬件设计电路 音频采集电路,以及一些信号放大电路 软件设计 使用BBB的AD 将信号前端处理后的信号进行AD 转换,然后使用fftw进行傅里叶变换,根据需要决定是否使用neon指令集和posix线程库 预 ...… 查看全部问答> |
|
【瑞萨R7F0C80212试用】一步一步玩R7F0C80212之第二弹 上电初实验 根据第一弹的描述,相信大家对于板子的所有套件以及板子的布局已经了如指掌了,既然已经开始拿到板子了,我们就开始来上电试试有什么效果吧。。 开发板 ...… 查看全部问答> |
|
这是在国赛前做的,为准备国赛练练手,没做全题 动力用的是57步进;步进电机驱动器是 TB-6560;1000线编码器;F103主控。 使用编码器需要注意的问题:虽然使用编码器能够得到准确的角度信息,基本用不上滤波,可以直接使用,但是对角速度信 ...… 查看全部问答> |




