I/O Ports中的GPFCON和GPFDAT寄存器
来源:互联网 发布:数据库数据恢复 编辑:程序博客网 时间:2024/06/03 17:32
今天在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, =0x56000050 ;//0x56000050是GPFCON寄存器的固定地址
ldr r0, [r1]
bic r0, r0, #(0x3<<0)
而LED1用的是GPF4, 所以我们要将GPFCON[9:8]设为输出, 即置01
bic r0, r0, #(0x3<<8)
orr r0, r0, #(0x1<<8)
// 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, =0x56000054
ldr r0, [r1]
ands r2, r0, #0x1
;//0&1=0,'z'(cpsr) is set to 1 due to the result 0,
;//1&1=1,'z'(cpsr) is still 0
;//that means, if last bit of GPFDAT is 0, then cpsr 'z'bit =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
我好不容易才理解了... :P 我是初学者...
欢迎各位赐教~~^^
- I/O Ports中的GPFCON和GPFDAT寄存器
- I/O Ports中的GPFCON和GPFDAT寄存器
- I/O Completion Ports
- I/O Completion Ports
- I/O Completion Ports
- I/O Completion Ports
- I/O Completion ports
- I/O Completion Ports
- I/O Completion Ports
- Inside I/O Completion Ports
- I/O Completion Ports学习
- S3C2440之I/O寄存器和中断寄存器
- Managed I/O Completion Ports (IOCP)
- Using I/O completion ports with UDP
- Managed I/O Completion Ports (IOCP)
- I/O Completion Ports(完成端口)
- I/O Completion Ports-I/O完成端口
- I/O Completion Ports-I/O完成端口
- spring 配置数据库连接池
- mysql开远程访问
- C++野指针
- 每日碰头会
- 使用twisted创建管理ftp账号数据库的接口
- I/O Ports中的GPFCON和GPFDAT寄存器
- java知识点如何并接?
- 编解码学习笔记一:基本知识
- volatile关键字
- 延迟渲染技术文献摘录
- 网站备注
- web测试工具--Apache AB
- FCK编辑器 配置中文解释
- linux oracle 自启动脚本编写