您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF51X技术支持专区 -> BF518/BF512的按键设计详解
本帖共有638个阅读者
发表帖子 发表投票 回复主题
BF518/BF512的按键设计详解
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
BF518/BF512的按键设计详解

硬件实现原理

ADSP-EDU-BF51x 开发板上的按键连接到了CPLD,通过CPLD 将按键信号与EBIU 总线和中断管脚PG1 连接,并将中断数据地址映射在CPLD 的当有按键按下后,会触发PF0 中断信号,同时可以通过EBIU 总线访问中断功能映射到CPLD 寄存器中的INTERRUPT_DAT 寄存器,通过访问该寄存器,可以获取键盘的中断源数据,通过读取CPLD 的 KEYBOARD_DAT 寄存器,可以获取当前触发中断的按键的键值。其寄存器映射如下:

KEYBOARD_DAT 寄存器(读唯一):
KEYBOARD_DAT 寄存器地址:0x20280000
KEYBOARD_DAT 寄存器是按键数据寄存器,通过该寄存器可以读取当前按键键值,通过键值判断当前哪个按键按下。

INTERRUPT_DAT 寄存器(读唯一):
INTERRUPT_DAT 寄存器地址:0x20260000
INTERRUPT_DAT 寄存器是板卡上所有中断资源的中断源数据寄存器,可以通过该寄存器数据判断出当前中断是哪一个设备产生的。

INTERRUPT_DAT 寄存器位功能:

上传的图片
  201272712453941.jpg [ 19.46 KB 835×73 ] (缩略时请点击查看原图)

 

当中断未触发时,读取的Bit 位值为1,当中断触发时,读取的Bit 位值为0,根据Bit 位数据,获取中断设备。SD_INF 为SD 卡插入查询位,该bit 位不会触发中断,只能通过读取该寄存器来查询SD 卡是否插入。

硬件连接示意图

上传的图片
  201272712463641.jpg [ 21.04 KB 595×212 ] (缩略时请点击查看原图)

 





我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/7/27 12:46:50
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

代码实现功能

代码实现了查询法和中断法两种读取按键键值的方式,并将读到键值与按键对应,打印出按键信息。

查询法:
需要将 key.c 文件中的宏开关“#define KEY_INT_ENABLE”注释掉,运行代码后,程序会不停地扫描按键,等待按键触发,按下按键后,则读取键值并打印出按键信息。

中断法:
需要将 key.c 文件中的宏开关“#define KEY_INT_ENABLE”打开,运行代码后,程序会等待中断触发,中断触发后,判断是否为按键中断,如果为按键中断,则读取键值并打印出按键信息,否则退出中断等待下次中断触发。

测试步骤

1. 将仿真器(ICE)与ADSP-EDU-BF51x 开发板和计算机连接好。
2. 先给仿真器(ICE)上电再为ADSP-EDU-BF51x 开发板上电。
3. 运行 VisualDSP++ 5.0 软件,选择合适的BF518 的session 将仿真器与软件连接。
4. 加载 VisualDSP++ 5.0 工程文件BF51x_KEY.dpj,编译并全速运行。
5. 按下按键。

测试结果

代码会打印出触发按键的信息。

上传的图片
  201272712483241.jpg [ 24.91 KB 520×194 ] (缩略时请点击查看原图)

 



我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/7/27 12:48:39
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159070 Call, 1 Queries, Processed in 0.015625 second(s),