历史上的今天
今天是:2025年03月30日(星期日)
2020年03月30日 | ARM9中LDR SP , = 4*1024 / LDR SP , = 0x34000000 的分析
2020-03-30 来源:eefocus
reset:
ldr sp, = 4*1024 @ SP=4096,设置栈指针,后面会调用C函数,调用C前需要设好栈
bl disable_watch_dog @ 关闭WATCHDOG,否则CPU会不断复位
bl clock_init @ 设置MPLL,改变FCLK、HCLK、PCLK
bl memsetup @ 设置存储控制器以使用SDRAM
bl copy_steppingstone_to_sdram @ 复制代码到SDRAM中
ldr pc, =on_sdram @ 跳到SDRAM中继续执行
on_sdram:
msr cpsr_c, #0xd2 @ 进入中断模式
ldr sp, =4*1024 @ 设置中断模式栈指针
msr cpsr_c, #0xdf @ 进入系统模式
ldr sp, =0x34000000 @ 设置系统模式栈指针,
bl init_led @ 初始化LED的GPIO管脚
bl timer0_init @ 初始化定时器0
bl init_irq @ 调用中断初始化函数,在init.c中
msr cpsr_c, #0x5f @ 设置I-bit=0,开IRQ中断
ldr lr, =halt_loop @ 设置返回地址
ldr pc, =main @ 调用main函数
如上程序中,由于ARM在各种执行模式下都需要设置各自的栈指针,所以"ldr sp,=xxxx"操作较多。根据ARM的ATPCS规则,对栈的操作属于FD(满递减),即栈指针一直指向栈顶元素,是按地址减小的方向增长的,所以一般将SP设置在地址的最高处。
ldr sp, =4*1024, ldr sp, =4*1024, ldr sp, =0x34000000 ,这几个值的确定与硬件关系很大:
1.在reset中:
ldr sp, =4*1024:在ARM9(S3C2440)中,SRAM有效地址范围为0~4K,所以可以把栈初始指针设置在SRAM的有效地址的最高地址处,当然,如果空间够用,也可以设置小点儿,比如:ldr sp , = 2*1024 。
2.在on_sdram中:
ldr sp, =4096 @ 设置中断模式栈指针
ldr sp, =0x34000000 @ 设置系统模式栈指针,
这是分别设定中断模式和系统模式下的堆栈指针到4096(SRAM的有效地址的最高地址)和0x34000000(从0x30000000开始的64M的SDRAM的最高地址处,此时SDRAM已经初始化,可以使用了)。
下一篇:ARM的堆栈学习笔记
史海拾趣
|
file:///C:/Documents%20and%20Settings/new/桌面/升压电路.JPG 将双向二级管DN101输出级与稳压电路断开通电后量测DN101阴级输出级出来的电压为输入电压两倍24V,可以判断由PWM控制U101及开关管Q1,C10,双向二级管DN101组成倍压电路,但不清楚它的具 ...… 查看全部问答> |
|
国内市场上,尽管汽车音响节目源有所扩展,从单一的收音,磁带两用机发展到加入单碟或自动换片的多碟CD机,但对小汽车音响功放来说却基本变化不大,仍为以收音机,磁带机和CD机组成的一体化音响。此类一体化音响,无论生产商标出2*35W还是200W+200W,其实仍 ...… 查看全部问答> |
|
这两天对一个2410的板子上sd卡做了一个底层硬件测试。 sd卡的数据读写会经常出现错误,而且错误的地方很固定。 后来查了很久,发现sdclk(时钟线)被示波器的探头一接触,读写立即就正常了。我的理解:示波器探头相当于对地电容。 依据这一情况 ...… 查看全部问答> |
|
请问各位,还有人做过tl16c754c的扩展串口驱动。我现在的驱动在16c554上改的(原来的驱动工作正常),现在这个驱动当波特率在57600以上时,每次发送超过26个以上字符时就乱码,报帧错误。晶振工作正常。各位兄弟,还有碰到和我一样的问题?… 查看全部问答> |
|
我从Wince 5.0平台上移植了一个ADS7846触摸屏驱动(该驱动在CE5下完全正常),而在CE6.0上的点击触摸屏也会出现长按才会出现的快捷菜单,感觉是触摸屏的按下的操作被系统认为长按了。另外我的USB鼠标也碰到了类似的问题:左键单击会出现长按左键或 ...… 查看全部问答> |
|
唉,sst39vf1601芯片坏了 ------------------------------------------------------------ jflash-s3c44b0x v1.0 (2003-8-26) origin made by J.D&T Co.,Ltd ( You Young-chang ) origin made by ATMEL Co.,Ltd modified by Yun Duck Bea === ...… 查看全部问答> |
|
求教:platform builder 4.2安装之后,build时出错can't find cebuild.bat 错误如下: Generating platform header files... VcSpawn: could not find \'cebuild.bat\' Error PB2504: Error spawning cebuild.bat 希望高手指点… 查看全部问答> |
|
调试12864的时候 尝试编写竖写字符的库函数时发现英文字符和数字可以显示 汉字不能显示 调试多次 最后发现是因为汉字是全角字符 需要连续送两字节数据才可以在12864液晶上显示.....将子函数改写为连续送入两位后 问题解决 可惜这个子函数不能用于竖 ...… 查看全部问答> |




