S3C6410裸机进不了中断(异常)处理函数、MMU、lds链接地址相关问题

来源:互联网 发布:上海预算软件 编辑:程序博客网 时间:2024/06/06 09:42

第一部分:异常、中断原理知识:http://blog.csdn.net/u013476840/article/category/1914325/1

第二部分:异常、中断代码:http://blog.csdn.net/u013476840/article/category/1914325/1

第三部分:MMU

http://www.jianshu.com/p/faebd7feb218

http://comm.chinaaet.com/adi/blogdetail/40052.html

         所谓MMU(虚拟内存管理单元),无非就是把物理地址转换为虚拟地址。所谓物理地址,用的STM32的都知道,它的RAM是从0x20000000开始的,ROM是从0x8000000开始的,这就是物理地址,也就是说在0x20000000这个地址里面放的就是一个值(当然你放的是几,里面存放的就是几),你给RAM一个地址0x20000000并给了读信号,数据线上就会出现你放进去的值,这就是实实在在的物理地址。而虚拟地址,就和它的位段有些相似,你访问的地址,并不是真正的物理介质里面的地址。你访问一个地址,比如0x20,可能会被MMU映射到0x80里面去了,在开启MMU之后,你写了一条指令,往0x20这个地址里面写了一个数,比如8,然后MMU就会向存储器发出命令,向0x80这个物理地址写入数据8。当然,这些你都不知道,这是MMU私下干的。当你要求读这个值的时候,写了从0x20读指令,然后MMU就会从物理地址0x80把这个数(8)读出来,并送给你,然后你并不知道他私下已经干了那么多事,你表面看来就是往0x20这个地址写了一个数8,然后读出来也是8,这就对了。

第四部分:程序用jlink+eclipse仿真进不了中断

       最近调试按键触发中断的裸机程序时,.bin下载到SDRAM中就是进不了中断。在jlink下调试.elf文件,也一样进不了中断。其实,仿真的时候,你的程序也是运行在SDRAM里面的,也就是0x5000_0000处开始运行。所以上述问题本质上是同一个问题。

后来想了一下,其实在jlink中调试中断这个方法论都是错误的,利用minitoolsdownload&run功能到SDRAM也是错误的。因为两种情况下内部SDRAM6410的起始地址是0x5000_0000,这个地方不存在你要调试的程序的中断向量表(向量表在6410的地址是0x00x40x8……0x180x1c),因此将代码直接放到内部SRAM上,肯定不能正确将中断引导到你编写的中断服务程序中来。

解决办法:

1直接烧写到nand flash的第0块,并从nand启动。因为我们6410上电后,系统会自动将nand中的前8k复制到setppingstone中,而这个setppingstone就是上文提到的6410里面从0地址开始的SRAM。复制的结果就是,我们编写的中断向量表,就到了64100地址处,从而让6410能正常进入中断(如果代码大于8K,我们编写的代码中必须要有拷贝到SDRAM功能,但是前8k系统仍然会拷到0地址处的setppingstone中)

2、除了将代码拷贝到0x5000_0000开始的SDRAM外,再改写自己的程序,在初始化中断之前将中断向量表拷贝到0地址开始的SRAM。这样6410也能找得到中断向量表。这个方法貌似有点难度,小弟不才,没敢尝试。

3、利用上文讲的MMU的重定向功能。这就是网上有人说要包含MMU.C然后主程序里面调用init_mmu的原因了。比如,仿真的时候,你的程序是运行在sdram里面的,也就是0x5000_0000处开始运行,你的中断向量表通过仿真器已经放在了0,5000_0000处,打开mmu是为了把0x5000_0000地址处的值映射到0x0的地方,因为你的中断向量表是保存在0x0开始的地方,当中断发生时的第一时间CPU会去0x0地方查中断向量表看是发生了什么中断,是reset还是IRQ还是FIQ还是取数据终止或取指令终止按键外部中断是IRQ中断,然后CPU会去IRQ开始的地方找到你的中断服务函数,这个时候轮到了你的中断服务函数运行的时间了。所以打开MMU后,系统去0x0地址处找中断向量表,而该地址又通过MMU映射到0x5000_00000x5000_0000处有向量表),从而系统就能找到向量表(虽然该表放在SDRAM中,但是只要系统能访问到向量表即可),最终就能成功进入中断服务程序。

4、既然nand 0地址处的程序,在系统上电后会自动拷贝到系统的0x0开始的8k SRAM里面,那我岂不是可以提前烧写一个简单的小程序到nand 0,并让开关从nand启动,这个小程序要包含我的向量表。这样我正式的代码里面即使不开MMU,也能将代码下载到SDRAM里面,或者使用jlink调试了。

参考文章:

http://www.arm9home.net/read.php?tid-6331-fpage-20.html

http://www.arm9home.net/read.php?tid-5148.html

http://www.arm9home.net/simple/index.php?t5717.html

http://www.eeworld.com.cn/mcu/2015/0825/article_21920.html


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 骨折后骨密度低怎么办 食品经营许可证过期了怎么办 40年的产权满后怎么办 五证合一后税务怎么办 互联业务登录页怎么办 vivo音量键坏了怎么办 琴岛通学生卡怎么办 云卡会员删除了怎么办 办健康证没空腹怎么办 办健康证吃饭了怎么办 发票盖了财务章怎么办 发票盖成公章了怎么办 发票上盖了公章怎么办 进京证怎么办在哪里办 去北京没进京证怎么办 单位的车怎么办进京证 房贷合同丢了怎么办 农合医疗卡丢失怎么办 手指断了怎么办能好吗? 被劳务派遣公司骗了怎么办 餐饮服务许可证过期了怎么办 中行u盾证书过期怎么办 84消毒液吸多了怎么办 八四消毒液烧手怎么办 怀孕了下身痒怎么办啊 4s店态度差怎么办 小区的卡丢了怎么办 开老板的车撞了怎么办 车后保险杠撞裂怎么办 车到期了忘了审怎么办 改过气的车费油怎么办 车内容易进灰尘怎么办 东风天龙油耗高怎么办 国六出来了国五怎么办 手动挡有7个档位怎么办 东风天锦160没劲怎么办 奇骏2.0动力不足怎么办 修汽车被师傅骂怎么办 转院证明不给开怎么办 被强制退市散户怎么办 股票卖没有人买怎么办