- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IOport中的GPFCON和GPFDAT寄存器(裸奔LED驱动实例)
今天在MBA2440上做实验, 通过按KEY1按钮来控制LED1开/关.按下KEY1时LED1亮,反之则灭.?因为KEY1(EINT0)连着CPU上的PORT F(GPF0).如下图所示所以我们可以通过配置GPF的寄存器, 来达到控制GPF的目的.GPF有四个寄存器, GPFCON, GPFDAT, GPFUP, Reserved这四个. 地址已被固定.如下图.?而GPF0-7,各自在GPFCON寄存器里有自己的位置, 例如,GPFCON的第一,二位是控制GPF0的, 如此类推, 如下图示:因为KEY1用的是GPF0, 所以我们先要将GPFCON[1:0]设为输入, 即置为00.???????? ldr r1, =0?? ;//0GPFCON寄存器的固定地址???????? ldr r0, [r1]???????? bic r0, r0, #(0x30)?而LED1用的是GPF4, 所以我们要将GPFCON[9:8]设为输出, 即置01???????? bic r0, r0, #(0x38)??????? orr r0, r0, #(0x18)??????? // GPFCON[9:8] == 01 configure GPF4 as output?然后存回原位置????????? str r0, [r1]??????? //write GPFCON?下面, 通过检测GPFDAT的位, 来确认KEY1有没有被按下. GPFDAT是一个8位寄存器, 每一位对应一个PIN的状态, 例如第0位,对应的是GPF0的状态, 第4bit对应GPF4的状态. ?当KEY1被按下后, GPFDAT的第0位被自动设为0, 松开后,自动设回1. 也许这就叫低电平有效吧. 按下时触发低电平...我也不太懂这个..呵呵,我是搞软件的...:P?Anyway, 我们可以通过这个来判断KEY1有没有被按下. 检测GPFDAT的第0位.?而GPFDAT的第4位控制着LED1的开关, 如果我们编程将第4位设为1,那么LED就开了, 我们将第4位设0,那么LED就关了.就这么简单.?所以我们先判断第0位, 第0位==0, 则第4位设==1, 如果第0位为1, 则第四位为0.?这样就实现了按下则亮,松开则灭的目的了.?这里我们可以通过一个LOOP来实现一直让它可以运行.?LOOP??????? ?????? ldr r1, =0????? ldr r0, [r1]?????? ands r2, r0, #0x1?????? ;//01=0,z(cpsr) is set to 1 due to the result 0,?????? ;//11=1,z(cpsr) is still 0?????? ;//that means, if last bit of GPFDAT is 0, then cpsr zbit =1?????? ;//if last bit of GPFDAT is 1, z bit stays still 0 ?????? ?????? biceq?? r0, r0, #(0x1 4)????? ?????? ;//according to z, [3] of GPFDAT is set to be 0 or 1,?????? ;//[3]bit is controlling the LED1, if [3]bit is 0, turn on LED?????? ;//if it is 1, turn off LED?????? orrne?? r0, r0, #(0x1 4)????? ;//[4]==1????? str???? r0, [r1]?????? b?????? LOOP
文档评论(0)