控制GPIO, 点亮led,实现跑马灯

硬件环境:mini2440

编译器:ads1.2   suptervivi

ads下编译调试运行成功,然后烧写到nand flash,从nand flash启动

但是烧写的到nand flash运行时,led4一直都不亮,问题还没解决,我想是不是堆栈指针设置有问题(问题发现了,是看门狗的地址写错了,所以不断reset)

 

;******************************************************************************
; File:init.S
; 功能:通过它转入C程序
;******************************************************************************      
 AREA Init, CODE, READONLY
 IMPORT LedMain
start
            ldr     r0, =0x53000010     ; WATCHDOG寄存器地址
            mov     r1, #0x0                    
            str     r1, [r0]                     ; 写入0,禁止WATCHDOG,否则CPU会不断重启
           
            ldr     sp, =4*1024            ; 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
                                                     ; nand flash中的代码在复位后会移到内部ram中,此ram只有4K
            bl      LedMain                   ; 调用C程序中的main函数
halt_loop
            b       halt_loop
            END

 

;******************************************************************************
; File:led_on.c

; 功能:控制led点亮

;******************************************************************************   

/*端口F寄存器预定义 用PORTB  GPB5,6,7,8对应LED1,2,3,4*/
#define rGPFCON         (*(volatile unsigned *)0x56000010)
#define rGPFDAT         (*(volatile unsigned *)0x56000014)
#define rGPFUP           (*(volatile unsigned *)0x56000018)    
 
#define    LED1_ON()   (rGPFDAT &= ~0x20)
#define    LED2_ON()   (rGPFDAT &= ~0x40)
#define    LED3_ON()   (rGPFDAT &= ~0x80)
#define    LED4_ON()   (rGPFDAT &= ~0x100)
#define    LED1_OFF()  (rGPFDAT |= 0x20)
#define    LED2_OFF()  (rGPFDAT |= 0x40)
#define    LED3_OFF()  (rGPFDAT |= 0x80)
#define    LED4_OFF()  (rGPFDAT |= 0x100)
#define time 10
 
void Delay(unsigned int );
void Ledtest(void);
/***************************************************************************
Function name: LedMain
Parameter    : void
Description  : 初始化系统,端口,并调用跑马灯显示实验函数
Return          : void
Date      :13/2/09
Autor & date :wethty
****************************************************************************/
int LedMain()
{
                                 /*初始化*/
       rGPFCON=0x15400;          /*设置I/O口GPB5~8为输出属性*/
       rGPFUP=0xfff;             /*禁止GPB端口的上拉*/
       rGPFDAT=0xffff;           //输出全置1
      
       while(1)
       {
              Ledtest();
       }
             
}
 
void Delay(unsigned int x)
{
       unsigned int i,j;
       while(x--)
       for(i=0;i<0xff;i++)
              for(j=0;j<0xff;j++);
             
}
void Ledtest()
{    
              LED1_ON();         //LED点亮/熄灭状态设置
              Delay(time);
              LED2_ON();         //LED点亮/熄灭状态设置
              Delay(time);
              LED3_ON();         //LED点亮/熄灭状态设置
              Delay(time);
              LED4_ON();         //LED点亮/熄灭状态设置
              Delay(time);
              LED1_OFF();        //LED点亮/熄灭状态设置
              Delay(time);
              LED2_OFF();        //LED点亮/熄灭状态设置
              Delay(time);
              LED3_OFF();        //LED点亮/熄灭状态设置
              Delay(time);
              LED4_OFF();
              Delay(time);
              rGPFDAT = 0x00;//全亮
              Delay(time);
              rGPFDAT = 0xfff;// 全灭
              Delay(time);
}

你可能感兴趣的:(ARM开发,嵌入式)