google吧,耗费了半天时间,一点线索都没有,无奈之下,还是对比源程序仔细读手册吧,不过这时换成读arm1176jzf-s的文档了。 终于,在inticpu.s中看到这个指令:
ldr r0, =(Peripheral_base+0x13)
mcr p15,0,r0,c15,c2,4
这两条指令是把外设寄存器的地址告诉cpu的,难道是这里出了问题?于是把闪灯程序挪到这两条指令后面,再试,OK,令人激动的蓝色LED,终于像我的脉搏一样,欢快地跳动起来了。 原来,arm1176jzf-s把memory和Peripheral接口分开了,你需要在初始化时告诉cpu,哪些地址范围是属于Peripheral的,否则它就当memory访问,当然就访问不到属于Peripheral 区间的IO口寄存器了,所以灯也就不闪了。 这个问题,看似短短几句话就说完了,却着实为难了我好几天。
Google到上面的一段话后下载arm1176jzfs_r0p7_trm.pdf打开一看就明白了
本文详细阐述了在使用ARM1176JZF-S处理器时,由于内存与外围设备接口的分离导致的LED无法正常闪烁的问题,并通过在初始化时明确告知CPU哪些地址属于外围设备,成功解决了该问题。通过阅读少量关键信息,作者花费大量时间最终找到了解决方案。
2014

被折叠的 条评论
为什么被折叠?



