天嵌 ARM开发社区

 找回密码
 注册
查看: 2556|回复: 5

[新手问问题]为什么我的led可以点亮,但是流水的就不亮呢?

[复制链接]
AdolfHitler 发表于 2013-6-12 13:51:35 | 显示全部楼层 |阅读模式
情况:
单独点亮任何一个led都可以点亮, 但是用程序控制点亮就不可以,代码如下:
代码是 韦东山的《嵌入式linux应用开发手册》上的代码
我只是稍作修改 把点亮一个led 改成了流水灯

crt0.S中的代码
.text         @是不是这里出的问题呢??
.global _start
_start:
            ldr        r0, =0x56000010     @ WATCHDOG寄存器地址
            mov     r1, #0x0                     
            str         r1, [r0]                    @ 写入0,禁止WATCHDOG,否则CPU会不断重启
            
            ldr         sp, =1024*4           @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
                                                        @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
            bl      main                            @ 调用C程序中的main函数
halt_loop:
            b       halt_loop

led.c里的代码
#define GPBCON      (*(volatile unsigned long *)0x56000010)
#define GPBDAT      (*(volatile unsigned long *)0x56000014)
void delay()
{
      int i,j;
      for(i=0;i<2;i++);
}
int main()
{
    GPBCON  = 0x00015400;    // 设置GPB5为输出口, 位[11:10]=0b01
    GPBDAT |= (1<<5 | 1<<6 | 1<<7 | 1<<8);    // GPB5输出0,LED1点亮
while(1)
{

  GPBDAT &= ~(1<<5);
  delay();
  GPBDAT |= (1<<5);
  delay();
  GPBDAT &= ~(1<<6);
  delay();
  GPBDAT |= (1<<6);
  delay();
  GPBDAT &= ~(1<<7);
  delay();
  GPBDAT |= (1<<7);
  delay();
  GPBDAT &= ~(1<<8);
  delay();
  GPBDAT |= (1<<8);
  delay();
}
    return 0;
}

通过jlink将文件烧写到 Nor Flash中,上电后只有  GPBDAT &= ~(1<<5); 被点亮
经过测试发现程序运行到 delay(); 就停住了

所以我怀疑是不是 .text的问题,导致  i 这个变量不能被改动

我主要问题的问题是,怎么解决他呢?
 楼主| AdolfHitler 发表于 2013-6-12 14:18:10 | 显示全部楼层
回复

使用道具 举报

bdyz1016 发表于 2013-6-12 18:08:11 | 显示全部楼层
驱动程序是什么样的啊
回复

使用道具 举报

 楼主| AdolfHitler 发表于 2013-6-13 00:15:16 | 显示全部楼层
bdyz1016 发表于 2013-6-12 18:08
驱动程序是什么样的啊

你指的是什么驱动程序呢?启动代码吗?  没有启动代码,所有程序内容我都粘上来了啊
回复

使用道具 举报

bdyz1016 发表于 2013-6-13 16:10:48 | 显示全部楼层
AdolfHitler 发表于 2013-6-13 00:15
你指的是什么驱动程序呢?启动代码吗?  没有启动代码,所有程序内容我都粘上来了啊

你这是不带操作系统的程序,我前面没仔细看。你改下delay()里i的范围,2太小了,改成100000试试。我是新手,智能帮到这了
回复

使用道具 举报

 楼主| AdolfHitler 发表于 2013-6-14 16:13:23 | 显示全部楼层
bdyz1016 发表于 2013-6-13 16:10
你这是不带操作系统的程序,我前面没仔细看。你改下delay()里i的范围,2太小了,改成100000试试。我是新手 ...

谢谢你啊,我找到问题的原因了
我把程序下载到Nor Flash中直接运行,这样 变量 i 的值永远不会变
只要在开始加一段 把程序复制到 sdram中的代码就ok了
回复

使用道具 举报

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

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-5-1 03:44 , Processed in 2.033385 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表