|
这个程序怎么有这样的运行效果 ????
环境是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++); }
|
|