调试准备
编译工具:MDK470a
开发板:s3c2410
调试方式:经mdk编译后得到 hex文件,用hex2bin工具转换成bin文件,通过usb下载,在DNW上观察
#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按等时间间隙顺序循环亮灭 #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的前面加了一个函数,但是并没有调用 #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现象一样 #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致使板子直接重启,原因是什么呢? 这两个个问题好像现在还搞不定,先放一放吧,下次问老师,或者大手帮忙解决下
上一篇:【ARM】s3c2410中断处理实例
下一篇:【ARM】arm·ad转换器
推荐阅读最新更新时间:2024-11-17 10:21
设计资源 培训 开发板 精华推荐
- L9777B 低功率稳压器的典型框图(选项 B)
- 24W、4-LED 通用手电筒 LED 驱动器
- ESP8266挖矿机 bbMiner
- 使用 ON Semiconductor 的 NCP300LSN31T1 的参考设计
- MC34074ADR2G 二阶低通有源滤波器的典型应用
- E6240,基于 QT60160/QT60240 电容式触摸屏的评估板
- EVLHVLED007W35F,具有极低 THD 的 35W LED 驱动器评估套件,基于 HVLED007 转换模式反激控制器
- LT8641IUDC 5V、3.5A 降压转换器的典型应用电路
- DC814B-A,使用 LTC6905 17MHz 至 170MHz 固定频率硅振荡器的演示板
- esp32 TFT彩屏投屏