主题 : 关于下载程序到nand flash运行有问题!! 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 42124
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2011-04-05
最后登录: 2011-07-04
楼主  发表于: 2011-05-02 12:33

 关于下载程序到nand flash运行有问题!!

我用ads 下编译程序,然后axd调试运行时成功的,就是4个led轮流亮,然后全亮全灭
但是通过supervivi下载到nand flash后,程序运行竟然和调试运行时不一样!

级别: 新手上路
UID: 42124
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
综合积分: 8 分
注册时间: 2011-04-05
最后登录: 2011-07-04
1楼  发表于: 2011-05-02 12:35
;******************************************************************************
; File:init.S
; 功能:通过它转入C程序
;******************************************************************************      
    AREA Init, CODE, READONLY
    IMPORT LedMain
start
            ldr     r0, =0x56000010     ; WATCHDOG寄存器地址
      mov     r1, #0x0                    
            str     r1, [r0]            ; 写入0,禁止WATCHDOG,否则CPU会不断重启      
      ldr     sp, =3*1024         ; 设置堆栈
            bl      LedMain             ; 调用C程序中的main函数
halt_loop
            b       halt_loop
            END

;**************************
;main.c
;******************************
/*端口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);
}