免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8313 | 回复: 15
打印 上一主题 下一主题

Power-on init code常见错误集 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-16 23:33 |只看该作者 |倒序浏览
大家把开发上电初始化代码过程中的出错的情况贴出来share一下

论坛徽章:
0
2 [报告]
发表于 2010-01-17 00:00 |只看该作者
设置PMC_MCKR寄存器后,应该等待PMC_SR寄存器的MCKRDY位是否置位.(我错把PMC_SCSR寄存器当成PMC_SR寄存器)

论坛徽章:
0
3 [报告]
发表于 2010-01-17 00:33 |只看该作者
偶写代码时,将PMC的基址错写成偏移量,而且基址是非法立即数,应用ldr指令,而不该用mov指令,以及宏定义PMC_MCKR的地址写错了。标号最好用小写,而且最好标号尽可能清晰些,这两点我也没做到

论坛徽章:
0
4 [报告]
发表于 2010-01-17 00:38 |只看该作者

回复 #1 conke 的帖子

我在操作PMC_MCKR寄存器犯了另外一个错误,结果调试时,卡了好久 。操作如下
mov r1, #0x2           @MCKR的CSS域 = 2
ldr   r1,[r0, #MCKR]
....
mov r1, #0x100         @原以为执行后CSS域保持2,但是实际执行后MCKR的CSS域会被清零,程序出错
ldr   r1,[r0, #MCKR]

at91sam9261的许多寄存器是写使能、写清除 分开并支持写‘0’无效的,但是PMC_MCKR却是普通的读写,所以对该寄存器操作时应该根据寄存器的特性设置,切不可凭偶尔经验。

[ 本帖最后由 lasting007 于 2010-1-17 00:40 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2010-01-17 01:33 |只看该作者

回复 #1 conke 的帖子

偶犯的其中一个错误和lasting相同,操作PMC_MCKR寄存器出错,在写PMC_MCKR的PRES位将CSS位覆盖而没有重新设置。
还有就是对立即数的操作方面,比如将16进制的立即数写成了10进制。

小结:在写代码时一定得细心,不要急躁,出了错误不要手忙脚乱,理清自己的思路,有条理的调试才对。在
调试的时候,自己的心态没摆好,调试过程中一点逻辑都没有,简直是个大白痴一样,囧

[ 本帖最后由 HELLO_MAX 于 2010-1-17 01:41 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2010-01-17 01:37 |只看该作者
在初始化dbug时我不小心把PIO_PDR写成PIO_PER,导致串口无输出

论坛徽章:
0
7 [报告]
发表于 2010-01-17 02:41 |只看该作者
在这次的代码中。我的代码里出现在三个问题:
1。DEBG_CR中BIT4,和BIT6都要至1,但看错了,所以写成了0x30,应该改为0x50。
2。PMC_MCKR的CSS域,选择的plla,应该是写2的,但却写成了1。
3。最主要的指令错误,ldr,str指令出错.

eg:
       ldr r0, str
       ldr r1, [r0]     @1  这里涉及到时问题是对齐。 每次取一个字(四字节)
       .....
       str r1, ......
      add r0, r0, #1  @2  而这里地址每次加一. 这样一来,先不说结果正确与否,从逻辑上来说都是错的。
      .....
      str:
          .word hello
      hello:
          .asciz "hello,abcd!\n"

分析错误:1。逻辑/指令上的错误 @1处每次取一个字(四字节),而@2处每次加一个字节地址,导致,ldr/str指令不对齐。
           2. 结果错误..        @1处的原意是要每次取一个字节,然后通过串口写出,显示,再执得地址加一.取字节指令:ldrb。存储字节指令:strb。

[ 本帖最后由 taoxie17 于 2010-1-17 10:11 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2010-01-17 08:32 |只看该作者
我在写PMC_IER时候把0x701写成了0x001
最后写的死循环写成了sub pc, pc, #-8导致串口不断输出

论坛徽章:
0
9 [报告]
发表于 2010-01-17 09:48 |只看该作者
我是贾亮暂时还没自己ID借用下lasting的。
我的问题:
一开始由于设置宏的时候没有按照标准,把R0设置成了BASE+OFSET,给之后的调试增加了很多的难度.又由于在几个参数设置后没有等待导致串口无法输出.最后输出是有了,但是我输入的是'H',输出的是l.

论坛徽章:
0
10 [报告]
发表于 2010-01-17 10:12 |只看该作者
1.上电初始化时最重要也最容易犯的错误就是初始化各个寄存器的流程以及中间的等待过程, 我就是在编写代码时就是对MCKR这个寄存器的初始顺序不对而调了好久, 后来仔细读了手册后才得以纠正。 关于MCKR寄存器的初始化时这样的, 它分为三个域:CSS[1:0], PRES[4:2],MDIV[9:8], 流程是这样的: 如果使用PLL提供时钟的话, 要先对PRES域赋值,然后等待MCKR enable, 然后在对CSS域赋值, 再等待MCKR enbale, 才可以使用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP