5678|20

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

五一快到了!发段汇编程序的问题给大家爽爽! [复制链接]

哈哈!我骗大家进来的,没什么爽的
问题是这样的:在PXA270上我跑这段程序:入口地址选为0X0(即NORFLASH的地址)
xlli_GPIOREGS_PA_BASE EQU 0x40e00000
xlli_GAFR0_L_offset   EQU 0x00000054
xlli_GPDR0_offset     EQU 0x0000000c
xlli_GPSR0_offset     EQU 0x00000018
xlli_GPCR0_offset     EQU 0x00000024

EXPORT LEDTEST
AREA LEDTESTASM,CODE,READONLY
LEDTEST
     ldr r0, =xlli_GPIOREGS_PA_BASE   ;

     ldr r1, =0x0   ;
     str r1, [r0, #xlli_GAFR0_L_offset] ;
     
     ldr r1, =0xFFFFFFFF   
     str r1, [r0, #xlli_GPDR0_offset]   ;
     
     ldr r2, = 0xFFFFFFFF
     str r2, [r0,#xlli_GPCR0_offset]   ;亮灯
delay
     ldr r3, =0x1FFFF

delay1
     subs r3,r3,#1
     cmp r3,#0x0
     bne delay1
    ldr r2, = 0xFFFFFFFF
     str r2, [r0,#xlli_GPSR0_offset]   ;灭灯
     END

不知道这段代码是否有问题,现在的现象是,如果只有亮灯或者灭灯那条代码,程序在板子上都能正常显示,
但是这两个亮灯灭灯的代码都加上就不能看到我想要的现象,
不知道是那段延时程序的问题还是什么其他问题??
请大家帮忙看下

最新回复

你的主要是没有像C里while(1)一样的死循环。  详情 回复 发表于 2009-5-4 21:39
点赞 关注

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
忘了说
我用的GPIO9和GPIO10
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
是不是延时太短,你没看出来效果
把亮灯和灭灯的代码换个位置看一下
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
爽不了~~
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 2 楼 Reallyu 的回复:
是不是延时太短,你没看出来效果
把亮灯和灭灯的代码换个位置看一下

应该不是
把亮灯和灭灯都加上就只运行前面那个

比如
先亮灯再灭灯
那最后在板子上的特征就是一直亮灯

先灭灯再亮灯
最后在板子上的特征就是一直灭灯
 
 
 

回复

2

帖子

0

TA的资源

禁止访问

6
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
270的GPIO输出高/低,是由两个寄存器控制的:Set/Clear,某个寄存器置1,那另一个寄存器对应的位必须清0,不然两个都置1就无法用了。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
我把程序改为:
    ldr r2, = 0xFFFFFFFF
    str r2, [r0,#xlli_GPCR0_offset]  ;亮灯
delay
    ldr r3, =0x1FFFF

delay1
    subs r3,r3,#1
    cmp r3,#0x0
    bne delay1
    ldr r2, = 0xFFFFFFFF
    str r2, [r0,#xlli_GPSR0_offset]  ;灭灯
    B .
    END
就正常显示了,即;灯亮一下,又灭掉了

但是如果不加 B . 灯就一直亮这,好象跟本走不到灭灯这个指令一样

请问大家:何解??
是程序跑飞了????那最后的状态也应该是灭灯啊
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
你在灭灯之后再加一段延时看看。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 6 楼 shuiyan 的回复:
270的GPIO输出高/低,是由两个寄存器控制的:Set/Clear,某个寄存器置1,那另一个寄存器对应的位必须清0,不然两个都置1就无法用了。



我试试
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 6 楼 shuiyan 的回复:
270的GPIO输出高/低,是由两个寄存器控制的:Set/Clear,某个寄存器置1,那另一个寄存器对应的位必须清0,不然两个都置1就无法用了。

还是不行,就必须得加 B .
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
你们几个大佬,空了多开点博客专题,gooogleman干的相当不错,把经验与大家分享,你快乐我也快乐。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

13
 
引用 8 楼 jinlking 的回复:
你在灭灯之后再加一段延时看看。


加了也不行
必须 B .
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 
你MMU是如何配置的?你还没有开MMU?没有道理啊。没有开很好办的。
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

15
 
ldr r2 0x0 ;加
str r2 [r0,#xlli_GPCR0_offset]; 加
str r2, [r0,#xlli_GPSR0_offset]  ;灭灯
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

16
 
被骗进来了
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 14 楼 shuiyan 的回复:


?
shuiyan 大哥:
没看懂这段的含义:
向GPSR寄存器赋“1”才会“灭灯”,即低电平亮灯,高电平灭灯


ldr r2 0x0 ;加
str r2 [r0,#xlli_GPCR0_offset]; 加
str r2, [r0,#xlli_GPSR0_offset]  ;灭灯
这样在理论上是没让GPIO输出高电平啊,只是让当前GPIO即不输出“低”也不输出“高”

而我试了
ldr r2 0x0 ;加
str r2 [r0,#xlli_GPCR0_offset]; 加
ldr r2 0xfffffff
str r2, [r0,#xlli_GPSR0_offset]  ;灭灯
这样还是跟以前效果一样!!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

18
 
UPING
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

19
 
我也贴一段也是点LED的(S3C6410)。
GPNCON  EQU                0x7F008830
GPNDAT  EQU     0x7F008834
GPNPUD  EQU     0x7F008838

        AREA  Init,CODE,READONLY
        ENTRY

;When Power on, it start at here               
reset
        ;config GPN14 as output
        ldr  r0,=GPNCON
        ldr  r1,=0x10000000
        str  r1,[r0]
   
        ;disable pull down/up
        ldr  r0,=GPNPUD
        ldr  r1,=0x00000000
        str  r1,[r0]
   
        ldr  r2,=GPNDAT
     
led_loop
        ;LED OFF
        ldr  r1,=0x0
        str  r1,[r2]
        bl   delay
       
        ;LED ON
        ldr r1,=0x4000
        str r1,[r2]
        bl  delay
   
        b  led_loop;LED function loop

delay
        ldr r0,=0x3ffffff
delay_loop
        sub r0,r0,#1         
        cmp r0,#0x0
        bne delay_loop
        mov pc,lr
   
        END
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

20
 
怎么都靠到边上去了,晕
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表