ADI Blackfin DSP处理器-BF533的开发详解16:KEY按键的实现(含源代码)

article/2025/11/6 18:38:45

硬件准备

ADSP-EDU-BF533:BF533开发板
AD-HP530ICE:ADI DSP仿真器

软件准备

Visual DSP++软件

硬件链接

在这里插入图片描述

硬件设计原理图

在这里插入图片描述

实现原理

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

其寄存器映射如下:
DEVICE_OE 寄存器(读/写):
DEVICE_OE 寄存器地址:0x20320000
DEVICE_OE 寄存器设置硬件设备上一些控制管脚的电平状态。
DEVICE_OE 寄存器位功能

在这里插入图片描述

PF0_SET:PF0 模拟 IIC 总线 SCL 接口或 PF0 中断功能使能
1:关闭 I2C_SCL 输入信号, 使能 PF0 中断信号
0:使能 I2C_SCL 输入信号,关闭 PF0 中断信号
使用中断时,将 PF0_SET 位设置为1。

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

KEYBOARD_DAT 寄存器位:

在这里插入图片描述

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

INTERRUPT_DAT 寄存器位功能:

在这里插入图片描述

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

硬件连接示意图

在这里插入图片描述

代码实现功能

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

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

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

测试步骤

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

测试结果

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

在这里插入图片描述

程序源码

#include <cdefBF533.h>
#include <sys\exception.h>
#include “cpld.h”
//#define KEY_INT_ENABLE

EX_INTERRUPT_HANDLER(FlagA_ISR);

void Set_PLL(unsigned int pmsel,unsigned int pssel)
{
unsigned int new_PLL_CTL;
*pPLL_DIV = pssel;
asm(“ssync;”);
new_PLL_CTL = (pmsel & 0x3f) << 9;
*pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != *pPLL_CTL)
{
*pPLL_CTL = new_PLL_CTL;
asm(“ssync;”);
asm(“idle;”);
}
}

void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0xffc07bb0;
*pEBIU_AMGCTL = 0x000f;
}

void Init_Flags(void)
{
*pFIO_INEN = 0x0001;
*pFIO_DIR = 0x0000;
*pFIO_EDGE = 0x0001;
*pFIO_POLAR = 0x0001;
*pFIO_MASKA_D = 0x0001;
}

void Init_Interrupts(void)
{
*pSIC_IAR0 = 0xffffffff;
*pSIC_IAR1 = 0xffffffff;
*pSIC_IAR2 = 0xffff5fff;

register_handler(ik_ivg12, FlagA_ISR);		
*pSIC_IMASK = 0x00080000;

}

EX_INTERRUPT_HANDLER(FlagA_ISR)
{
unsigned char interrupt=0;
unsigned char keydata;
if(~*pINTERRUPT_DAT & KEY_INT)
{
keydata = ~*pKEYBOARD_DAT; //读键值
switch(keydata)
{
case LUK: printf(“The key is left->up\n\r”); break;
case LLK: printf(“The key is left->left\n\r”); break;
case LDK: printf(“The key is left->down\n\r”); break;
case LRK: printf(“The key is left->right\n\r”); break;
case RUK: printf(“The key is right->up\n\r”); break;
case RLK: printf(“The key is right->left\n\r”); break;
case RDK: printf(“The key is right->down\n\r”); break;
case RRK: printf(“The key is right->right\n\r”); break;
default:
}
}

*pFIO_FLAG_C = 0x0001;	

}
void main(void)
{
Set_PLL(16,4);
Init_EBIU();
printf(“Please press the Keyboard!\n”);

#ifdef KEY_INT_ENABLE

Init_Interrupts();
ExtIO_Interrupt_Enable();
Interrupt_Enable();			
Init_Flags();

#else
unsigned char keydata;
while(1)
{
keydata = ~*pKEYBOARD_DAT; //读键值
if(keydata & LUK)
printf(“The key is left->up\n\r”);
if(keydata & LLK)
printf(“The key is left->left\n\r”);
if(keydata & LDK)
printf(“The key is left->down\n\r”);
if(keydata & LRK)
printf(“The key is left->right\n\r”);
if(keydata & RUK)
printf(“The key is right->up\n\r”);
if(keydata & RLK)
printf(“The key is right->left\n\r”);
if(keydata & RDK)
printf(“The key is right->down\n\r”);
if(keydata & RRK)
printf(“The key is right->right\n\r”);
}
#endif

 while(1);	  

}


http://chatgpt.dhexx.cn/article/rpQuWSIn.shtml

相关文章

matlab进行傅里叶分析

license需求&#xff1a;需要使用到simulink工具包simscape 1.在matlab的command window中输入power_fftscope命令,并按回车键&#xff0c;该操作会打开FFT分析的窗口 2.加载用于FFT分析的数据到matlab worksapce,该数据需要按照一定的格式显示才能被FFT分析窗口自动识别到。 …

ADI Blackfin DSP处理器-BF533的开发详解18:用触摸屏的例程来理解中断(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 硬件设计原理图 硬件实现原理 ADSP-EDU-BF533 开发板上的中断资源连接到了 CPLD&#xff0c;并通过 CPLD 将中断信号连接到 PF0 触发&#xff0c…

【正点原子FPGA连载】第十三章QSPI Flash读写测试实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第十三章QSPI Fl…

ADI Blackfin DSP处理器-BF533的开发详解3:GPIO(含源代码)

我们从最基础的GPIO开始&#xff0c;先讲外设&#xff0c;这玩意不管是单片机&#xff0c;还是ARM&#xff0c;又或是FPGA&#xff0c;甚至SOC的芯片&#xff0c;都有GPIO&#xff0c;有共性&#xff0c;就好理解&#xff0c;让我们看看在ADI的DSP里头&#xff0c;GPIO是怎么一…

Protobuf 简介

protobuf (protocol buffer) 是谷歌内部的混合语言数据标准。通过将结构化的数据进行序列化(串行化)&#xff0c;用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。通常说的protobuf包括以下三点&#xff1a; 是一种二进制数据交换格式。支持不…

【prony】基于prony算法的参数辨识matlab仿真

1.软件版本 matlab2013b 2.系统概述 建立如下被测信号: 被测信号中包含四个振荡模态,在数据窗宽度同样为10s的前提下,利用不同的采样频率做普罗尼计算。结果如表1所示。根据公式的基本表达式: 所以最后,进行估计得到的参数为:

ADI Blackfin DSP处理器-BF533的开发详解54:CVBS输出-DSP和CH7024的应用详解(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 CVBS OUT 视频输出 硬件实现原理 CVBS_OUT 子卡板连接在 ADSP-EDU-BF53x 开发板的扩展端口 PORT3 和 PORT4 上&#xff0c;板卡插入时&#xff0…

【AI+】Martin Fowler: 基于 AI 辅助的测试驱动开发的技术 | An example of LLM prompting for programming

Martin Fowler: 基于 AI 辅助的测试驱动开发的技术 | An example of LLM prompting for programming 目录 Martin Fowler: 基于

iPhone 13分辨率,屏幕尺寸,PPI 详细数据对比 iPhone 13 Pro、iPhone 13 Pro Max、iPhone 13 mini

点击图片放大查看 iPhone 14分辨率,屏幕尺寸,PPI 详细数据对比 iPhone 14 Plus、iPhone 14 Pro、iPhone 14 Pro Max​​​​​​​

android 主流分辨率是多少,android 屏幕分辨率问题

iPhone的icon设计就这么简单&#xff0c;iPhone的屏幕只有320480像素&#xff0c;所以程序没有适配性问题。 Android 在研究Android的icon设计之前&#xff0c;有必要先了解Android的界面是如何适配多样化屏幕的。 适配性 由于同一个UI元素(如100100像素的图片)在高精度的屏幕上…

iPhone手机屏幕大小及分辨率

以前一直找,现在自己保存起来

IPHONE屏幕大小,分辨率解析

相关概念 // 竖屏时,返回的是不带有状态栏的Rect.横屏时,返回整个屏幕Rect [UIScreen mainScreen].applicationFrame);//The natural scale factor associated with the screen(自然比例因子) [UIScreen mainScreen].scale);//The native scale factor for the physical scree…

iPhone 各屏幕尺寸及解析

一.iPhone 各屏幕尺寸表 手机型号屏幕尺寸(inch)像素密度&#xff08;PPI&#xff09;逻辑分辨率 &#xff08;point&#xff09;物理分辨率&#xff08;屏幕分辨率&#xff09;&#xff08;pixel&#xff09;缩放因子&#xff08;scale factor&#xff09;宽高比&#xff08;…

各版本iPhone屏幕分辨率尺寸图标

1、3.5&#xff08;iPhone 4、iPhone 4s&#xff09;&#xff1a; 640x960 2、4.0&#xff08;iPhone 5、iPhone 5s、iPhone 5C、iPhone SE&#xff09;&#xff1a; 640x1136 3、4.7&#xff08;iPhone 6、iPhone 6s、iPhone 7、iPhone 8&#xff09;&#xff1a; 750x1334&…

各型号iPhone的屏幕参数 逻辑分辨率 物理分辨率 - iOS Device Display Summary - 更新到iPhone 13系列

详询&#xff1a; iOS设备分辨率 - 逻辑分辨率 - 屏幕参数 - iPhone/iPad/iWatch without Macbookhttps://tools.rudon.cn/electronics/resolution/ios/

EditPlus中文版 安装教程

EditPlus中文版安装教程 1、下载软件压缩包,解压即可。不需要安装,解压后打开“EditPlus中文版”文件夹(软件我会打包好,在文中的最低端找到即可下载;若链接失效了,请告知我一声,我会重新更新链接) 2.打开EditPlus.exe启动软件。 3、设置程序的配置文件目录。 …

安装Editplus软件

1.安装Editplus软件 百度云网盘链接:https://pan.baidu.com/s/1alKZWD_yXUO4be6wUoM5Fg?pwdhykz 提取码:hykz 2.点开下载的软件进行安装&#xff0c;Accept下一步 3.选择自己想要安装的文件目录 4.点击Start Copy进行下一步安装&#xff0c;安装完成后桌面会有Editplus的软件…

EditPlus 5.0.651 中文版

各位网友&#xff1a;4.0 版本以前的注册码在新版本&#xff08;5.0&#xff0b;&#xff09;不再有效&#xff01; EditPlus 是一个著名的代码文本编辑器。目前网上有其他人翻译的版本&#xff0c;但均存在零星的翻译错误。为此&#xff0c;我重新汉化了 EditPlus 的界面。 …