天嵌 ARM开发社区

 找回密码
 注册
查看: 1588|回复: 3

问题求解……急……谢谢

[复制链接]
wxc5678 发表于 2010-12-2 15:27:28 | 显示全部楼层 |阅读模式
我写了一段关于串口的小程序,通过JTAG用AXD调试的时候,运行一切正常。但是下载到NAND Flash中运行的时候不能正常的运行,有遇到这种情况的兄弟没啊? 麻烦解答一下  谢谢
 楼主| wxc5678 发表于 2010-12-2 20:05:15 | 显示全部楼层
代码如下:
//Startup.s
; 起动文件。初始化C程序的运行环境,然后进入C程序代码。


                IMPORT        Main                ; 声明C程序中的Main()函数

                AREA        Start,CODE,READONLY        ; 声明代码段Start
                ENTRY                                ; 标识程序入口
                CODE32                                ; 声明32位ARM指令       
                       
Reset        LDR                SP,=0x40003F00

     
           
            B                Main                ; 跳转到C程序代码Main()函数
           
            END

//Main.c

#include "stdio.h"

#define GPHCON (*(volatile unsigned long *)0x56000070)
#define GPHDAT  (*(volatile unsigned long *)0x56000074)
#define GPHUP  (*(volatile unsigned long *)0x56000078)
#define ULCON0  (*(volatile unsigned long *)0x50000000)
#define UCON0  (*(volatile unsigned long *)0x50000004)
#define UFCON0  (*(volatile unsigned long *)0x50000008)
#define UMCON0  (*(volatile unsigned long *)0x5000000c)
#define UTRSTAT0  (*(volatile unsigned long *)0x50000010)
#define UTXH0   (*(volatile unsigned long *)0x50000020)
#define URXH0   (*(volatile unsigned long *)0x50000024)
#define UBRDIV0   (*(volatile unsigned long *)0x50000028)



//LED设置
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)

//设置LED接口为输出
#define GPB5_out (1<<(5*2))
#define GPB6_out (1<<(6*2))
#define GPB7_out (1<<(7*2))
#define GPB8_out (1<<(8*2))

#define PCLK 50000000
#define UART_CLK PCLK
#define UART_BAUD_RATE 115200
#define UART_BRD ((UART_CLK / (UART_BAUD_RATE*16))-1)

void uart0_init(void)
{
        GPHCON |=0Xa0;
        GPHUP =0X0c;
        ULCON0=0x03;
        UCON0 =0x05;
        UFCON0=0x00;
        UMCON0=0x00;
        UBRDIV0=UART_BRD;
}

void putc12(unsigned char c)
{
        while(!(UTRSTAT0 & 0x04));
       
        UTXH0=c;
}


unsigned char getc12(void)
{
        while(!(UTRSTAT0 & 0x01));
       
        return URXH0;
}
void sleep(int i)
{
        int j;
        for(j=0;j<=i;j++);
}

int Main(void)
{
        unsigned char c;
        GPBCON=GPB5_out | GPB6_out | GPB7_out | GPB8_out;
       
         uart0_init();
        GPBDAT ^= (15<<5);
        while(1)
        {
                c=getc12();
                sleep(10000);
                if(c=='1')
                {       
                        GPBDAT ^= (1<<5);
                        putc12(c);
                }
                if(c=='2')
                {
                        GPBDAT ^= (2<<5);
                        putc12(c);
                }
                if(c=='3')
                {
                        GPBDAT ^= (4<<5);
                        putc12(c);
                }
                if(c=='4')
                {
                        GPBDAT ^= (8<<5);
                        putc12(c);
                }
        }
        return 0;
}

用AXD调试的时候一切如程序设计一样正常运行,但是烧入NAND Flash中 就无反应或者不能按照程序设计流程运行。
1。请问这是什么原因啊?
2.当在AXD中调试的时候程序的运行环境和烧入NAND Flash中,代码的运行环境有什么区别吗?

菜鸟问题,麻烦高手指教  呵呵……
吕氏春秋8266 发表于 2010-12-2 22:19:08 | 显示全部楼层
本帖最后由 吕氏春秋8266 于 2010-12-2 22:27 编辑

LDR                SP,=0x40003F00
你可以考虑一下,当调用C语言程序时,会进行堆栈操作,个人感觉你的指针设置不正确,好象不在SDRAM中,也不在CPU内部4KRAM中,因为没测试,不敢下肯定结论,从NAND启动,它在CPU内部4KRAM中运行,你的启动代码也没有启动SDRAM,不要把堆栈放在SDRAM中!你可以把堆栈指针改在4K范围内试试看,个人看法,仅供参考!
WTW11897 发表于 2011-4-24 22:17:26 | 显示全部楼层
感觉有点道理
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-5-21 00:23 , Processed in 1.031250 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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