调试准备
编译工具:MDK470a
开发板:s3c2410
调试方式:经mdk编译后得到 hex文件,用hex2bin工具转换成bin文件,通过usb下载,在DNW上观察
<Code-1>
#define GPFCON (*(volatile unsigned long*)0x56000050)
#define GPFDAT (*(volatile unsigned long*)0x56000054)
//===PORT F GROUP
//端口: GPF7 GPF6 GPF5 GPF4 GPF3 GPF2 GPF1 GPF0
//信号: LED_1 LED_2 LED_3 LED_4 FS2_INT GPLD_INT1 KEY_INT BUT_INT1
//设置属性: output output output output EINT3 EINT2 EINT1 EINT0
//二进制值: 01 01 01 01 00 00 00 00
int i,nout;
int Main()
{
GPFCON = 0x00005500;
// GPFDAT = 0x00000050;
nout=0x000000F0;
while(1)
{
GPFDAT=nout & 0x00000070;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000030;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000010;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000000;
for(i=0; i<1000000; i++);
//led();
}
//return(0);
}
现象:LED1~4按等时间间隙顺序循环亮灭
<Code-2>
#define GPFCON (*(volatile unsigned long*)0x56000050)
#define GPFDAT (*(volatile unsigned long*)0x56000054)
int i,nout;
void led(void)
{
GPFDAT=nout & 0x00000070;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000030;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000010;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000000;
}
int Main()
{
GPFCON = 0x00005500;
// GPFDAT = 0x00000050;
nout=0x000000F0;
while(1)
{
GPFDAT=nout & 0x00000070; //μãááLED1
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000030; //μãááLED1/LED2
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000010; //μãááLED1/LED2/LED3
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000000; //μãááLED1/LED2/LED3/LED4
for(i=0; i<1000000; i++);
//led();
}
//return(0);
}
现象:LED1与LED3几乎同时亮,一小段时间后LED2亮,一段时间后LED4亮,然后不再循环
注意:Code-2只是在Code-1的前面加了一个函数,但是并没有调用
<Code-3>
#define GPFCON (*(volatile unsigned long*)0x56000050)
#define GPFDAT (*(volatile unsigned long*)0x56000054)
int i,nout;
void led(void)
{
GPFDAT=nout & 0x00000070;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000030;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000010;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000000;
}
int Main()
{
GPFCON = 0x00005500;
// GPFDAT = 0x00000050;
nout=0x000000F0;
while(1)
{
/*
GPFDAT=nout & 0x00000070; //μãááLED1
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000030; //μãááLED1/LED2
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000010; //μãááLED1/LED2/LED3
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000000; //μãááLED1/LED2/LED3/LED4
for(i=0; i<1000000; i++);
*/
led();
}
//return(0);
}
现象:和Code-2现象一样
<Code-4>
#define rGPFCON (*(volatile unsigned *)0x56000050)
#define rGPFDAT (*(volatile unsigned *)0x56000054)
//#define rGPFUP (*(volatile unsigned *)0x56000058)
void port_init(void)
{
rGPFCON=0x00005500;
// rGPFUP=0x0000ff;
}
void led_on(void)
{
int i,nout;
nout=0x000000F0;
rGPFDAT=nout & 0x00000070;
for(i=0; i<100000; i++);
rGPFDAT=nout & 0x00000030;
for(i=0; i<100000; i++);
rGPFDAT=nout & 0x00000010;
for(i=0; i<100000; i++);
rGPFDAT=nout & 0x00000000;
for(i=0; i<100000; i++);
}
/*
void led_off(void)
{
int i,nout;
nout=0;
rGPFDAT=0;
for(i=0; i<100000; i++);
rGPFDAT=nout | 0x00000080;
for(i=0; i<100000; i++);
rGPFDAT=nout | 0x00000040;
for(i=0; i<100000; i++);
rGPFDAT=nout | 0x00000020;
for(i=0; i<100000; i++);
rGPFDAT=nout | 0x00000000;
for(i=0; i<100000; i++);
}
void led_on_off(void)
{
int i;
rGPFDAT=0;
for(i=0; i<100000; i++);
rGPFDAT=0x000000F0;
for(i=0; i<100000; i++);
}
*/
int main(void)
{
// port_init();
rGPFCON=0x00005500;
while(1)
{
led_on();
// led_off();
// led_on_off();
}
return(0);
}
/*
int i,nout;
void led(void)
{
GPFDAT=nout & 0x00000070;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000030;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000010;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000000;
}
int Main()
{
GPFCON = 0x00005500;
// GPFDAT = 0x00000050;
nout=0x000000F0;
while(1)
{
GPFDAT=nout & 0x00000070;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000030;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000010;
for(i=0; i<1000000; i++);
GPFDAT=nout & 0x00000000;
for(i=0; i<1000000; i++);
//led();
}
//return(0);
}
*/
现象:下载完成后,先y运行时开发板直接重启
分析
目前看来达到效果的就只有Code-1,我在源码中是有很多注释的,因为粘贴过来都是乱码,所以就全部删掉了。
Code-1与Code-2在PC平台上看应该是一样的,但是运行结果大相径庭,应该不是开发板缓存引起的,估计是编译器动了手脚
<1>可能MDK对代码作了优化,应该不是链接器,可能是编译的时候
<2>Code-4致使板子直接重启,原因是什么呢?
这两个个问题好像现在还搞不定,先放一放吧,下次问老师,或者大手帮忙解决下啊……