免费注册 查看新帖 |

Chinaunix

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

at91sam9261 inituart debug problem [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-25 15:55 |只看该作者 |倒序浏览
At91sam9261 inituart 问题:
在调试At91sam9261 UART时遇到把初始化程序烧录到板子后,打开keimit显示RomBOOT,reset之后也是显示RomBOOT,贴出inituart的代码:

@uart
    ldr   r1,=0xfffff404
    ldr   r2,=(1<<9)|(1<<10)
    str   r2,[r1]

@peripheral a
    ldr   r1,=0xfffff470
    ldr   r2,=(1<<9)|(1<<10)
    str   r2,[r1]

@interrupt disable
    ldr   r1,=0xfffff20c
    mvn   r2,#0
    str   r2,[r1]

@Debug Unit Control Register
    ldr   r1,=0xfffff200
    ldr   r2,=0x15c
    str   r2,[r1]

@Baud rate
    ldr   r1,=0xfffff220
    ldr   r2,=55
    str   r2,[r1]

    ldr   r1,=0xfffff204
    mov   r2,#0x800
    str   r2,[r1]

L3:
    ldr   r1,=0xfffff214
    ldr   r0,[r1]
    tst   r0,#0x2
    beq   L3

L4:
ldr   r1,=0xffff21c
mov   r2,#97
str   r2,[r1]
b   L4
问代码逻辑上是不是错了。

论坛徽章:
0
2 [报告]
发表于 2009-09-25 16:09 |只看该作者
L3:
    ldr   r1,=0xfffff214
    ldr   r0,[r1]
    tst   r0,#0x2
    beq   L3

L4:
ldr   r1,=0xffff21c
mov   r2,#97
str   r2,[r1]
b   L4


你是不是想循环打引‘a’啊?
这个逻辑好像有点问题,你改成下面的代码看看可行?
L3:
    ldr   r1,=0xfffff214
    ldr   r0,[r1]
    tst   r0,#0x2
    beq   L3

ldr   r1,=0xffff21c
mov   r2,#97
str   r2,[r1]
b   L3

论坛徽章:
0
3 [报告]
发表于 2009-09-25 16:17 |只看该作者
@Baud rate
    ldr   r1,=0xfffff220
    ldr   r2,=55
    str   r2,[r1]


你的Baud rate是怎么计算得到55的? 时钟MCK初始化之后是多少?

论坛徽章:
0
4 [报告]
发表于 2009-09-25 16:56 |只看该作者

回复 #1 longxinhui 的帖子

不错,但有几个地方需要改进

@uart
    ldr   r1,=0xfffff404
    ldr   r2,=(1<<9)|(1<<10)
    str   r2,[r1]

@peripheral a
    ldr   r1,=0xfffff470
    ldr   r2,=(1<<9)|(1<<10)
    str   r2,[r1]


1、注释好像写反了——先是配置成non-PIO模式,然后选择Peripheral A,即串口DBGU

2、少用magic number,可改用宏

3、ldr/str同组register时可用[base, #offset]寻址方式,而不是多次使用ldr=伪指令:
    ldr   r1,=0xfffff404
    ldr   r1,=0xfffff470

4、尽量少用ldr=伪指令,“ldr   r2,=(1<<9)|(1<<10)”或改成“mov r2, #0x600”

5、r2没变动,无需重复赋值

综上,代码可改进如下:
#define PBASE_PIOA  0xFFFFF400
#define PBASE_PDR   0x04
#define PBASE_ASR   0x70

@ PIO for DBGU
ldr  r0, =PBASE_PIOA
mov  r1, #0x600
str  r1, [r0, #PIO_PDR]
str  r1, [r0, #PIO_ASR]

论坛徽章:
0
5 [报告]
发表于 2009-09-25 16:58 |只看该作者
后面的代码有类似的问题,外加fleyahjj的建议,一并改进后再贴出来看看

论坛徽章:
0
6 [报告]
发表于 2009-09-25 17:05 |只看该作者
按楼主的代码改了,还是那种现象,我加了点led灯调试程序,一直执行到了Baud rate,Baudrate要是没设对,也应该会打印出信息即使乱码,reset之后不应该只是RomBoot.
Led灯能亮,但是打印不出信息
@Baud rate
    ldr   r1,=0xfffff220
    ldr   r2,=55
    str   r2,[r1]

    ldr   r1,=0xfffff204
    mov   r2,#0x800
    str   r2,[r1]

@LED
    mov   r1, #0x13
    mov   r2, #0x1
    orr   r1, r2, lsl #7
    msr   cpsr, r1
    ldr   r1,=0xfffff400
    mov   r1,#0x1
    mov   r2,r1,lsl #14
    mov   r3,r1,lsl #23
    orr   r2,r3
    str   r2,[r1]
    ldr   r1,=0xfffff410
    str   r2,[r1]
    ldr   r1,=0xfffff434
    str   r2,[r1]
    mov   r2,#0x1
    mov   r2,r2,lsl #15
    ldr   r1,=0xfffffd40
    str   r2,[r1]
L3:
    ldr   r1,=0xfffff214
    ldr   r0,[r1]
    tst   r0,#0x2
    beq   L3  
    ldr   r1,=0xffff21c
    mov   r2,#97
    str   r2,[r1]
    b   L3

论坛徽章:
0
7 [报告]
发表于 2009-09-25 17:19 |只看该作者
我找到问题之一了,把led点灯程序移到beq  L3之后灯不亮说明一直没准备好发送数据

论坛徽章:
0
8 [报告]
发表于 2009-09-25 17:32 |只看该作者

关于PIO control选择问题

问:
enable PIO to control pin ,disables peripheral control of the pin(LED是这种方法)
disable PIO to contro pin, enable peripheral control of the pin(串口用这种方法)

LED和串口都是外设 他们能选下面那种方法行吗?
什么时候选PIO to control 什么时候选peripheral control ?

论坛徽章:
0
9 [报告]
发表于 2009-09-25 17:32 |只看该作者
还遇见一个问题,就是汇编源文件如果使用了宏,当文件以小s做为后缀时,编译会报如下错误:
internal_relocation (type: OFFSET_IMM) not fixed up
而以大S做为文件后缀,编译则不会报错。

论坛徽章:
0
10 [报告]
发表于 2009-09-25 17:43 |只看该作者

回复 #8 whamse 的帖子

我的理解是这样的,虽然led和uart都是外设,但是当我们操作led时,向pio端口写数据是我们编写的汇编程序直接去写的,而当该pio端口作为uart的数据接口使用时,数据实际是由DBGU发给pio端口的,此时pio只是被动接受者。所以我总结的规律如下:如果pio需要直接编程控制的,则应该设置其为enable PIO,其余情况设置为disable。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP