【AT91SAM3S】英蓓特EM-SAM3S开发板例子工程中的启动文件分析

2019-12-05来源: elecfans关键字:AT91SAM3S  英蓓特  EM-SAM3S  启动文件

手上一块英倍特的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的起始地址:

clip_image002

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文件的好处吧。


关键字:AT91SAM3S  英蓓特  EM-SAM3S  启动文件 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic482125.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:【AT91SAM3S】建立基于SAM3S库的工程并点亮LED
下一篇:Azure ARM (1) UI初探

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

【AT91SAM3S】建立基于SAM3S库的工程并点亮LED
习惯了ST的库,猛然间看到ATMEL的库,有点无从下手。这几天参考这示例工程,终于建立了一个使用ATMEl库的工程。软件库版本:软件平台:MDK470A硬件平台:英蓓特 EB-SAM3SMCU:AT91SAM3S4C1、库的来源库来自atmel的网站:http://www.atmel.com/tools/SAM3SSOFTWAREPACKAGE.aspx我使用的工具链是MDK,下载的是:AT91SAM3S-EK MDK® Software Package for Keil uVision4http://www.atmel.com/images/SAM3S_softpack_2.1_for_uVision_4.12.zip(需要
发表于 2019-12-05
【AT91SAM3S】建立基于SAM3S库的工程并点亮LED
【AT91SAM3S】英倍特串口示例工程05-UART中,串口初始化
在这个示例工程的main.c文件中,进入main之后,没有发现串口功能的任何配置。直接使用了printf这个东西进行输出。将软件下载到开发板上之后,在电脑端使用串口软件,可以看板子有数据发来。说明这个虽然没有显式初始化的串口,确实已经被初始化好了。跟踪可发现,uart的功能函数都在uart_console.c文件中实现。但是这些功能到底是在那里加入到主程序里边的,在什么时候执行的,我却没找到。这个问题困扰了我好久。知道今天,再次看这个程序的时候才发现点眉目。首先,要理解一个东西就是:printf的功能,是通过对函数fputc的重定义来实现的。在这个工程中,fputc函数的实现是在retarget.c文件中实现的。具体代码是这样的:i
发表于 2019-12-05
【AT91SAM3S】串口UART初始化及收发数据
SAM3S中的UART串口是一个两线异步收发器。这个串口能用来通信或者跟踪。有两个DMA通道与UART串口关联,可通过使用DMA处理串口传输以节省CPU时间。SAM3S4C中有两个UART。与外设引脚的对应关系如下:板子上使用的是UART0,及PA9和PA10引脚。SAM3S的UART结构框图串口初始化,收发数据 的步骤如下:1、配置相应IO口的引脚(设置IO时钟及引脚工作模式)2、打开UART时钟3、复位并停止UART4、设置UART功能(奇偶校验UART_MR、波特率UART_BRGR、DMA UART_PTCR、收发使能UART_CR 等)5、收发数据 UART_THR  UART_RHR串口的初始化程序
发表于 2019-12-05
【AT91SAM3S】串口UART初始化及收发数据
【AT91SAM3S】SAM3S-EK Demo工程中,LCD驱动程序的加载
为了调试LCD,在英倍特的板子上烧Atmel的sam3s-ek_demo_1.4_source示例代码.LCD显示正常了,却找不到LCD的驱动究竟在哪。花了好久,追踪到了这个执行过程。进入main函数--_SetupHardware()----DISP_Initialize() ----_aDISP_Backends[DISP_BACKEND_ILI9325]=&sDISP_Backend_ILI9325 ;static __no_init SDISPBackend* _aDISP_Backends[DISP_BACKEND_MAX] ;_aDISP_Backends[DISP_BACKEND_ILI9325]=&
发表于 2019-12-05
【AT91SAM3S】ADC中断方式采集数据
板子依旧是英倍特的EK-SAM3S。ADC部分的原理图如下:PB1是一个复用引脚,在这里被用作AD功能,对应芯片上的AD5。即,使用片内ADC的5通道测VR1上2号引脚的电压。 实验采用了SysTick定时器产生中断方式来采集ADC数据。SysTick中断发生时,开启ADC转换。ADC转换结束时,产生中断,在ADC中断处理函数中读取ADC采集到的数据。转换后,通过UART输出,到PC端显示。SysTick和ADC的中断处理函数如下:uint32_t time_stamp = 0;WEAK void SysTick_Handler( void ){      
发表于 2016-12-19
【AT91SAM3S】ADC中断方式采集数据
英蓓特加码嵌入式设计+生产服务,加速中国工业自动化落地
,2017年中国的自动化及工业控制市场规模将达1,593亿元。目前,中国工业自动化产业在发展过程中遇到如下困境:1. 劳动力成本逐年上升,人口红利渐失,以工业机器人为代表,象征智能化、网络化和集成化的工业控制自动化技术日渐成为主流;2. 下游企业自动化设备的定制化需求较高。英蓓特核心板PH8700/PH8800立足 “定制+智能”优势英蓓特基于TI AM335x的SOM-PH8700(以下简称“PH8700”)以及基于TI AM437x的SOM-PH8800(以下简称“PH8800”)两块核心板,正是为了解决上述难题。PH8700/PH8800性能优良、通用性强,易于扩展,在70mm*50mm尺寸的主板上,PH8700/PH8800提供了
发表于 2017-04-12
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved