历史上的今天
返回首页

历史上的今天

今天是: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已经初始化,可以使用了)。

推荐阅读

史海拾趣

FlexiPanel公司的发展小趣事

面对电子行业日益多样化的市场需求,FlexiPanel推出了定制化RF模块解决方案服务。公司拥有一支专业的技术团队,能够根据客户的具体需求,提供从需求分析、方案设计、样品制作到批量生产的全流程服务。这种灵活多样的服务模式不仅满足了客户对于个性化产品的需求,还帮助FlexiPanel在市场中建立了良好的口碑和品牌形象。

Fischer Connectors公司的发展小趣事

面对电子行业日益多样化的市场需求,FlexiPanel推出了定制化RF模块解决方案服务。公司拥有一支专业的技术团队,能够根据客户的具体需求,提供从需求分析、方案设计、样品制作到批量生产的全流程服务。这种灵活多样的服务模式不仅满足了客户对于个性化产品的需求,还帮助FlexiPanel在市场中建立了良好的口碑和品牌形象。

Calmos Systems Inc公司的发展小趣事

随着国内市场的饱和,Calmos Systems Inc公司开始将目光投向国际市场。公司制定了详细的国际化战略,包括市场调研、产品定位、销售渠道建设等方面。公司派遣专业团队前往海外市场进行考察和交流,了解当地市场需求和文化特点。同时,公司还积极寻求与国际知名企业的合作机会,共同开拓国际市场。在国际化战略的推动下,公司的业务范围不断扩大,国际市场份额逐年提升。

德力康(DLK)公司的发展小趣事

德力康(DLK)公司自1985年成立以来,最初专注于电视机用CRT插座的生产。凭借其卓越的产品质量和稳定的性能,逐渐在市场中树立了良好的口碑。随着电子行业的快速发展,DLK公司敏锐地捕捉到了连接器市场的巨大潜力,并开始逐步扩大产品线,涵盖D-SUB、DVI、HDMI、USB等多种连接器类型。通过不断的技术创新和市场拓展,DLK逐渐成为了国内连接器行业的重要供应商之一。

Harris公司的发展小趣事

二战后,随着全球经济的复苏和电气产品的爆炸性需求,Hammond迎来了前所未有的发展机遇。在1950年代和1960年代,Hammond积极扩展产品线,成为变压器、机架、机柜以及电气和电子行业外壳的领先供应商。同时,公司还进行了多次战略性收购,进一步巩固了其在北美电气OEM市场的地位,成为磁性材料的主要供应商之一。

Dynastream公司的发展小趣事

展望未来,Dynastream将继续秉承“持续创新、追求卓越”的发展理念,致力于成为电子行业的领军企业。公司将继续加大研发投入,提高产品的技术含量和附加值;同时,也将注重人才培养和团队建设,为公司未来的发展提供有力保障。相信在不久的将来,Dynastream将在电子行业中创造更加辉煌的业绩。

请注意,以上故事均为基于Dynastream公司发展历程的假设性叙述,旨在展示其发展历程中的一些重要节点和成就。

问答坊 | AI 解惑

求教高人帮忙讲解以下电路

file:///C:/Documents%20and%20Settings/new/桌面/升压电路.JPG 将双向二级管DN101输出级与稳压电路断开通电后量测DN101阴级输出级出来的电压为输入电压两倍24V,可以判断由PWM控制U101及开关管Q1,C10,双向二级管DN101组成倍压电路,但不清楚它的具 ...…

查看全部问答>

国外汽车音响的新技术

国内市场上,尽管汽车音响节目源有所扩展,从单一的收音,磁带两用机发展到加入单碟或自动换片的多碟CD机,但对小汽车音响功放来说却基本变化不大,仍为以收音机,磁带机和CD机组成的一体化音响。此类一体化音响,无论生产商标出2*35W还是200W+200W,其实仍 ...…

查看全部问答>

startio和dpcforisr之间会打乱彼此的执行吗?

startio和dpcforisr之间会打乱彼此的执行吗? 在调试的过程中发现有dpcforisr打乱了startio。…

查看全部问答>

sd卡时钟线在调试中的一点理解(硬件)

这两天对一个2410的板子上sd卡做了一个底层硬件测试。 sd卡的数据读写会经常出现错误,而且错误的地方很固定。 后来查了很久,发现sdclk(时钟线)被示波器的探头一接触,读写立即就正常了。我的理解:示波器探头相当于对地电容。 依据这一情况 ...…

查看全部问答>

TL16C754C 扩展串口

请问各位,还有人做过tl16c754c的扩展串口驱动。我现在的驱动在16c554上改的(原来的驱动工作正常),现在这个驱动当波特率在57600以上时,每次发送超过26个以上字符时就乱码,报帧错误。晶振工作正常。各位兄弟,还有碰到和我一样的问题?…

查看全部问答>

Wince 6.0下触摸屏单击出快捷菜单的问题

我从Wince 5.0平台上移植了一个ADS7846触摸屏驱动(该驱动在CE5下完全正常),而在CE6.0上的点击触摸屏也会出现长按才会出现的快捷菜单,感觉是触摸屏的按下的操作被系统认为长按了。另外我的USB鼠标也碰到了类似的问题:左键单击会出现长按左键或 ...…

查看全部问答>

TW6802驱动的问题

在弄6802视频驱动的时候,为什么总是不能有VDMAPI中断呢…

查看全部问答>

sst39vf1601挂掉了。。。

唉,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 希望高手指点…

查看全部问答>

为了团购开发板 分享一个关于LCD12864的心得

调试12864的时候 尝试编写竖写字符的库函数时发现英文字符和数字可以显示 汉字不能显示 调试多次 最后发现是因为汉字是全角字符 需要连续送两字节数据才可以在12864液晶上显示.....将子函数改写为连续送入两位后 问题解决 可惜这个子函数不能用于竖 ...…

查看全部问答>