这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 44B0点灯问题

共2条 1/1 1 跳转至

44B0点灯问题

菜鸟
2007-01-02 21:35:26     打赏
这个程序怎么有这样的运行效果 ????

环境是ADS1.2 PE口接了几个LED;
我是初学者,想从最基本的开始,
44B0板我就写一个短短的程序就让一个LED闪烁,就遇到这么多问题.我不用外部RAM,用内部8K的RAM.在编译之前是不是得改一下RO BASE 中的内容?改在内部RAM的地址 ?这个内容对MAKE有什么影响?烧FLASH时也要添RAM的起使地址,又有什么用 ?我把下面的程序烧进去之后灯就闪烁了,但是复位之后闪烁的就慢了,不象刚烧进去闪烁那么快.是由于从FLASH中读程序再执行引起的吗 ?

还有一个问题就是把主函数中的延时程序用delay()代替之后,灯就不闪了,这是怎么了 ?

init.s

IMPORT Main
AREA Init,CODE,READONLY
ENTRY
LDR R0, =0x01c00000
LDR R1, =0x01 ;
STR R1, [R0]
LDR SP, =0x10000000 ;

LDR R0, =0x01c00000
STMFD R13!,{R0}
LDR R0, =0x01c00156 ;刚开始没有初始化SP,怀疑是堆栈的问题,这里测试堆栈.
LDMFD R13!,{R0}
CMP R0,#0x01c00000

BLEQ Main
B .
END


下面是led.c

#define rPCONE (*(volatile unsigned *)0x1d20028)
#define rPDATE (*(volatile unsigned *)0x1d2002c)
#define rPUPE (*(volatile unsigned *)0x1d20030)
void Delay(void);
int Main()
{
unsigned long LED,j,i,k;
rPCONE=0x00005555; //将IO口置为输出模式

for(;;){
rPDATE=0xfe;
for(i=0;i<=5;i++)
for(j=0;j<0x0ff;j++)
for(k=0;k<0x0ff;k++);

rPDATE=0xff;

for(i=0;i<=5;i++)
for(j=0;j<0x0ff;j++)
for(k=0;k<0x0ff;k++);
}
return(0);
}
void Delay()
{
unsigned int i,j,k;
for(i=0;i<=5;i++)
for(j=0;j<0x0ff;j++)
for(k=0;k<0x0ff;k++);
}






关键词: 点灯     问题    

菜鸟
2007-01-03 02:52:00     打赏
2楼

1 - 你调试的时候,可能是在RAM里面,程序在RAM里执行的速度会比在FLASH里面执行快。这应该是为什么程序烧写到RAM里面后,闪烁变慢了。

2 - 关于RO_BASE,你下载:http://www.hjtag.com/download/BootLoader.rar 看看里面的文档,应该会有帮助。如果你想了解更多的细节的话,可以看看ADS的LINKER GUIDE。

3 - 为什么用DELAY()替换后程序有问题,看看是不是STACK设置不正确。另外,可以用仿真器单步调试一下,看看问题在那里。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]