请教I/O寄存器问题

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

还是根据数据手册上设置把,手册应该写得很清楚

  
 楼主| gavin_li 发表于 2009-6-26 12:53 | 显示全部楼层

你是说根据s3c2440的datasheet设置吗

  
linqing171 发表于 2009-6-26 12:57 | 显示全部楼层

给你改一下。

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:rGPBDAT=^LED4;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:rGPBDAT=&nbsp;^LED3;break;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;3:rGPBDAT=&nbsp;^LED2;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;4:rGPBDAT=&nbsp;^LED1;break;&nbsp;&nbsp;}<br /><br /><br />还有你的delay是不是有问题啊。<br />
 楼主| gavin_li 发表于 2009-6-26 13:02 | 显示全部楼层

我的delay没问题

void&nbsp;dely(int&nbsp;time)<br />{<br />&nbsp;&nbsp;int&nbsp;i,k;<br />&nbsp;&nbsp;for&nbsp;(&nbsp;i=0;i&lt100;i++){<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(&nbsp;k=0;k&lttime;k++){}<br />&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />}<br />我在TQ2440上调试过,没问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

150

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部