因为考试周开始了,板子又没动大概1周时间,哎。。
今天连跑马灯一并复习了吧。。
LED的电路原理图在2440开发板底板的原理图能够找得着,如下
灯是低电平亮,接上限流电阻后是与ENT4—ENT7相连,但EINT4—ENT7指得又是哪几个引脚呢?
打开2440核心板的原理图
看到EINT4—EINT7其实对应的就是I/O口的F端口中的GPF4—GPF7,而在2440中F口有三个寄存器,分别是控制寄存器GPFCON,数据寄存器GPFDAT,以及上拉电阻寄存器GPFUP,这里用到的是前两个。
然后既然是I/O实验,除了LED灯输出外就还得有输入控制。在板子上,一共有K1—K6六个开关,按手边的书(写的是2410的)里头的意思是,K1-K4对应的是G口,因此需要对G口进行配置。书上的配置如下(程序片段)
- #define KEY1 (1<<3)
- #define KEY2 (1<<7)
- #define KEY3 (1<<8)
- #define KEY4 (1<<11)
- rGPGCON=rGPGCON&(~((03<<6)|(3<<14)|(3<<16)|(3<<22)))
- if(rGPGDAT&KEY1)
- {
- rGPFDAT|=LED1;
- }
- else
- {
- rGPFDAT&=~LED1;
- }
- if (rGPGDAT&KEY2)
- {
- rGPFDAT|=LED2;
- }
- else
- {
- rGPFDAT&=~LED2;
- }
- if (rGPGDAT&KEY3)
- {
- rGPFDAT|=LED3;
- }
- else
- {
- rGPFDAT&=~LED3;
- }
- if (rGPGDAT&KEY4)
- {
- rGPFDAT|=LED4;
- }
- else
- {
- rGPFDAT&=~LED4;
- }
- }
- }
我按书上的程序照敲进去,结果调试时发现灯并没有按预想的亮灭。觉得不对头,于是打开底板原理图找到开关的电路原理图如下
可以看到4个开关分别与EINT0—EINT3相连,而EINT0—EINT3对应的就是之前图里出现过的F端口,原来是这样!
修改程序如下,灯随开关切换亮灭,成功。
总结:这次实验,虽然很简单,但让我获益不少,至少让我觉得某件事之所以没有达到理论的值,肯定有某些错误的因素在干扰,绝对不是偶然的,不能随便就忽略。其实因为接触没多久,看到PC机上的程序能使开发板有反应(尽管不是预期的反应)就已经很是兴奋了,这样是不行的!
今天的探索,让我学到了碰到这样的问题就应该继续探索,直到达到预期目的或者可以用理论解释。这个实验使得我懂得遇到问题应该看看以及怎么看数据手册,自己进行一些分析。哈哈!!加油加油!!
以下是改后的程序:
- #include "2410addr.h"
- #define KEY1 (1<<0)
- #define KEY2 (1<<1)
- #define KEY3 (1<<2)
- #define KEY4 (1<<3)
- #define LED1 (1<<4)
- #define LED2 (1<<5)
- #define LED3 (1<<6)
- #define LED4 (1<<7)
- void Main(void)
- {
- rGPFCON=(rGPFCON&0x0000)|0x5500;
-
- while(1)
- {
- if(rGPFDAT&KEY1)
- {
- rGPFDAT|=LED1;
- }
- else
- {
- rGPFDAT&=~LED1;
- }
- if (rGPFDAT&KEY2)
- {
- rGPFDAT|=LED2;
- }
- else
- {
- rGPFDAT&=~LED2;
- }
- if (rGPFDAT&KEY3)
- {
- rGPFDAT|=LED3;
- }
- else
- {
- rGPFDAT&=~LED3;
- }
- if (rGPFDAT&KEY4)
- {
- rGPFDAT|=LED4;
- }
- else
- {
- rGPFDAT&=~LED4;
- }
- }
- }