您的位置 首页 新品

2440开发板发动代码学习

2440init.s是启动代码的主文件,包括3个头文件,option.inc,memcfg.inc,2440addr.inc。option.inc定义了3个堆栈起始地址,总线宽度,时钟相关参数

  2440init.s是发动代码的主文件,包含3个头文件,option.inc,memcfg.inc,2440addr.inc。

  option.inc界说了3个仓库开端地址,总线宽度,时钟相关参数的界说等。其间这个总线宽度将作为一个IF判别量,决议了各Bank的位宽设置,拜见memcfg.inc文件及datasheet。

  memcfg.inc是存储器Bank的装备文件,界说了存储器相关寄存器位的值。各bank的位宽的设置界说也是在这个文件中,留意bank0的位宽没有相关的界说,由于它的位宽取决于OM[1:0]引脚,即发动方法。

  2440addr.inc界说了相关寄存器地址,包含存储器操控寄存器,时钟电源办理寄存器,中止,看门狗,IO,NAND,杂项等相关用到的寄存器。

  2440init.s是首要的发动代码文件,它装备了存储器,中止服务程序,仓库等重要内容,而且最终开端跳到C代码。

  Init段是开端点,跳转到ResetHandler。然后履行以下过程:

  制止看门狗,制止中止,制止子中止,然后调理确定时刻,接着设定FCLK与HCLK与PCLK的份额1:2:4,然后设置UPLL为48M,延时7个时钟周期后设置MPLL为400M。

  这时经过读取复位状况寄存器判别此刻的复位到底是上电复位,唤醒复位仍是看门狗复位等,假如是唤醒复位则跳转到相应方位然后开释SCLK,设置SDRAM,回来等。

  假如不是唤醒复位则持续向下装备SDRAM,它实际上是把一个名为SMRDATA的数据缓冲池一个一个的送入相关的操控寄存器,相关的初始化装备的界说在memcfg.inc文件中。

  然后跳转到初始化仓库,具体今后再看。

  接着读取BWSCON寄存器的相关位判别是从NOR仍是NAND引导的,假如是NOR引导,则跳转到copy_proc_beg。

  这部分首要是把RW区在ROM中的地址开端处搬移到RAM区,然后接着在这后边ZI区清0。

  假如是NAND引导,则跳转到nand_boot_beg。

  先装备NAND的时序参数和相关操控功用,然后跳转到ReadNandID等等,最终仍是相似上面的完结RAM的仿制,相关内容今后再学。

  接着将IsrIRQ的地址放到HandleIRQ地址中。这样当中止产生后便能找到中止服务程序。

  最终跳转到MAIN函数中,汇编部分的发动代码完毕。

  中止的内容具体说明如下:

  首要,界说了一个宏,宏名为“$HandlerLabel HANDLER $HandleLabel”,这个宏打开后是一个以$HandlerLabel为进口名的代码段,例如“比方“HandlerIRQ HANDLER HandleIRQ”,宏履行今后将履行$HandleLabel地址中的内容,例如上则履行HandleIRQ地址中的内容。

  当中止产生今后,ARM将从地址0x18处履行指令,便是一条跳转指令“b HandlerIRQ”,然后便是履行上面的宏,宏履行完今后则履行 HandleIRQ地址中的内容,而这正是进口名为IsrIRQ的代码部分。而IsrIRQ代码段的履行作用是首要读取INTOFFSET寄存器判别中止 源是哪个,记载其间断服务子程序的地址偏移量,然后将这个偏移量加上基地址,即EINT0中止服务子程序的进口地址地点的地址,最终从这个地址开端履行。

  而一切的各个中止源触发的中止的中止服务子程序的进口地址都是固定的,所以在发动代码的后边有一个以_ISR_STARTADDRESS为开端的数据段,一切的地址名都是以Handle为最初的界说,如HandleTIMER0等。

  当IsrIRQ履行后即从固定的中止服务子程序地址地点的地址处找到真实的中止服务子程序的地址,并履行之。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/115010.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部