自己胡乱写了个LED程序,能调试成功。但是对I/O寄存器不得其解。请版主帮解释一下<br />rGPBCON = 0x015550; //这里是设置B port是输出端口吧。<br />0X015550 = 1 01010101 01010000<br />这里是不是说让GPB2~GPB7 设置为Output呢?因为我从别的资料上看<br />每个管脚占两位。 00-代表输入 01-代表输出 10-代表中断 11-保留<br />我的板子LED是接在B port上的GPB5~GPB8管脚上的。所以这样就能设置为输出方式。<br /><br />rGPBUP = 0x7ff; //设置上拉电阻为disabled<br />0x7ff=111 11111111<br />这样有什么目的呢?<br /><br />#define LED1 (1<<5) // rGPB[5] =1 ;<br />#define LED2 (1<<6) // rGPB[6] =1 ;<br />#define LED3 (1<<7) // rGPB[7] =1 ;<br />#define LED4 (1<<8) // rGPB[8] =1 ;<br /><br />while (1){ <br /> for (k = 1; k < 5; k++){<br /> switch(k){<br /> case 1:rGPBDAT=~LED4;break;<br /> case 2:rGPBDAT= ~LED3;break; <br /> case 3:rGPBDAT= ~LED2;break;<br /> case 4:rGPBDAT= ~LED1;break; }<br /> Delay(2000); <br /> }<br />我上面的程序在AXD调试成功。我分析我的写法<br />LED1 = 00010000<br />LED2 = 00100000<br />LED3 = 01000000<br />LED4 = 10000000<br />~LED1 = 11101111 ----- rGPB[5] = 0 输出低电平<br />~LED2 = 11011111 ----- rGPB[6] = 0 输出低电平<br />~LED3 = 10111111 ----- rGPB[7] = 0 输出低电平<br />~LED4 = 01111111 ----- rGPB[8] = 0 输出低电平<br /><br />正好只有一个管脚输出低电平,所以该连接该管脚的LED灯亮。<br />但是我注意到很多资料上,包括按键控制LED的代码都是<br />这样写的<br />rGPBDAT=rGPBDAT & ~LED4<br />rGPBDAT=rGPBDAT & ~LED3<br />rGPBDAT=rGPBDAT & ~LED2<br />rGPBDAT=rGPBDAT & ~LED1<br /><br />但是奇怪得很,我这样写就是得不到跑马灯的效果。里面有什么<br />蹊跷吗?另外rGPBDAT的地址是0x56000014,它的初始值是多少呢?还是不确定?<br />请版主评点。 |
|