ADI Blackfin DSP处理器-BF533的开发详解26:扩展IO输入的详细讲解(含源代码)

news2024/10/6 21:29:45

硬件准备

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

软件准备

Visual DSP++软件

硬件链接

在这里插入图片描述

硬件设计原理图

在这里插入图片描述

在这里插入图片描述

功能介绍

ADSP-EDU-BF53x 开发板上扩展接口的 PORT2 和 PORT3 中引出了 6 个扩展 IO 接口输入接口,这些连接到了CPLD,通过 CPLD 将这些信号与 EBIU 总线和中断管脚 PF0 连接,并将中断数据地址映射在 CPLD 的当有扩展 IO有输入后,会触发 PF0 中断信号,同时可以通过 EBIU 总线访问中断功能映射到 CPLD 寄存器中的 INTERRUPT_DAT寄存器,通过访问该寄存器,可以获取键盘的中断源数据,通过读取 CPLD 的 EXT_IO_INDAT 寄存器,可以获取当前触发中断的扩展 IO 是哪一个。其寄存器映射如下:

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。

EXT_IO_INDAT 寄存器(读唯一):
EXT_IO_INDAT 寄存器地址:0x203C0000
EXT_IO_INDAT 寄存器是扩展 IO 数据寄存器,通过该寄存器可以读取当前扩展 IO 是哪一个

EXT_IO_INDAT 寄存器位:

在这里插入图片描述

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

INTERRUPT_DAT 寄存器位功能:

在这里插入图片描述

当中断未触发时,读取的 Bit 位值为 1,当中断触发时,读取的 Bit 位值为 0,根据 Bit 位数据,获取中断设备。

SD_INF 为 SD 卡插入查询位,该 bit 位不会触发中断,只能通过读取该寄存器来查询 SD 卡是否插入。

硬件连接示意图

在这里插入图片描述

代码实现功能

代码实现了查询法和中断法两种读取扩展 IO 的方式,并将读到值与扩展 IO 位比较,打印出信息。

查询法:
需要将 main.c 文件中的宏开关“#define EXT_IN_INT_ENABLE”注释掉,运行代码后,程序会不停地扫描扩展 IO,等待扩展 IO 触发,扩展 IO 有被拉低后,则读取扩展 IO 位并打印出信息。

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

测试步骤

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

代码会打印出以下信息。

在这里插入图片描述

程序源码

#include <cdefBF533.h>
#include <sys\exception.h>
#include “cpld.h”
//#define EXT_IN_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 ext_io_data;
if(~*pINTERRUPT_DAT & EXT_IO_INT)
{
ext_io_data = ~*pEXT_IO_INDAT & 0x7F; //读外部IO状态
switch(ext_io_data)
{
case EXT_IN0: printf(“Ext_IO is EXT_IN0\n\r”); break;
case EXT_IN1: printf(“Ext_IO is EXT_IN1\n\r”); break;
case EXT_IN2: printf(“Ext_IO is EXT_IN2\n\r”); break;
case EXT_IN3: printf(“Ext_IO is EXT_IN3\n\r”); break;
case EXT_IN4: printf(“Ext_IO is EXT_IN4\n\r”); break;
case EXT_IN5: printf(“Ext_IO is EXT_IN5\n\r”); break;
case EXT_IN6: printf(“Ext_IO is EXT_IN6\n\r”); break;
default:
}
}

*pFIO_FLAG_C = 0x0001;	

}
void main(void)
{
Set_PLL(16,4);
Init_EBIU();
printf(“Waiting ext_io input!\n”);

#ifdef EXT_IN_INT_ENABLE

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

#else
unsigned char ext_io_data;
while(1)
{
ext_io_data = ~*pEXT_IO_INDAT & 0x7F; //读外部IO状态
if(ext_io_data & EXT_IN0)
printf(“Ext_IO is EXT_IN0\n\r”);
if(ext_io_data & EXT_IN1)
printf(“Ext_IO is EXT_IN1\n\r”);
if(ext_io_data & EXT_IN2)
printf(“Ext_IO is EXT_IN2\n\r”);
if(ext_io_data & EXT_IN3)
printf(“Ext_IO is EXT_IN3\n\r”);
if(ext_io_data & EXT_IN4)
printf(“Ext_IO is EXT_IN4\n\r”);
if(ext_io_data & EXT_IN5)
printf(“Ext_IO is EXT_IN5\n\r”);
if(ext_io_data & EXT_IN6)
printf(“Ext_IO is EXT_IN6\n\r”);
}
#endif

 while(1);	  

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C. Rooks Defenders Codeforces Round #791 (Div. 2)(树状数组!)

传送门 题意&#xff1a;给你一个的棋盘&#xff0c;然后给你一个t&#xff08;t只能为1&#xff0c;2&#xff0c;3&#xff09;&#xff0c;对于不同的t产生不同的影响&#xff1a; t1时&#xff0c;给你一个点的坐标x,y&#xff0c;在这个点上生成一辆坦克&#xff08;保证…

模拟实战从外网打点渗透到内网域控的笔记

信息收集 本次项目是一个是模拟渗透测试 电信诈骗网站&#xff0c;境外人员依赖该网站通过优惠卷诱导受害者进行消费&#xff0c; 诈骗受害人金钱。 前台地址 项目拓扑图 http://ip/user.php?moddo&actlogin&fromtohttp%3A%2F%2F43.143.193.216%2F 后台地址 http…

rabbitmq基础2——rabbitmq二进制安装和docker安装、基础命令

文章目录一、RabbitMQ安装1.1 二进制安装1.2 rabbitmqctl工具1.3 docker安装二、rabbitmq基础命令2.1 多租户与权限类2.1.1 创建虚拟主机2.1.2 查看虚拟主机信息2.1.3 删除虚拟主机2.1.4 给用户授权2.1.5 清除用户权限2.1.6 查看权限2.2 用户管理类2.2.1 创建用户2.2.2 查看用户…

爱心源码动图-Html网页运行

程序示例精选 爱心源码动图-Html网页运行 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff01; 前言 Html写的追女生神器-爱心动图&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读&#xff0c;对学习与使用Html有较好的帮助。 文章目录 一、所需工具…

Redis高可用之主从复制、哨兵、cluster集群

Redis高可用之主从复制、哨兵、cluster集群Redis 高可用什么是高可用Redis的高可用技术Redis主从复制主从复制的作用主从复制流程搭建Redis主从复制所有节点安装Redis修改master节点的配置文件修改slave节点的配置文件验证主从效果Redis哨兵模式哨兵模式的作用哨兵结构故障转移…

Redis集群模式

目录 前言 一、集群的作用 二、集群模式的数据分片 三、集群模式的主从复制模型 四、Redis集群模式 Redis集群部署 开启群集功能 修改所有集群服务的配置文件端口&#xff0c;使其不一致 启动集群 集群测试 前言 1、集群&#xff0c;即 Redis Cluster&#xff0c; …

模型效果差?我建议你掌握这些机器学习模型的超参数优化方法

模型优化是机器学习算法实现中最困难的挑战之一。机器学习和深度学习理论的所有分支都致力于模型的优化。 机器学习中的超参数优化旨在寻找使得机器学习算法在验证数据集上表现性能最佳的超参数。超参数与一般模型参数不同&#xff0c;超参数是在训练前提前设置的。举例来说&a…

CKA考试Tips

前言 今年黑五的双证套餐的折扣比双11时还便宜个200多,不到2000&#xff0c;应该是史低吧,反正比前年低。即使考试前看了各种避坑技巧&#xff0c;虽然通过了但是结果还是因为各种问题导致时间不够没做完扣分&#xff0c;于是下面总结一下参加CKA/CKS考试时候的技巧。 报名及考…

[基因遗传算法]进阶之四:实践VRPTW

参考资料: 《旅行商问题(TSP)、车辆路径问题(VRP,MDVRP,VRPTW)模型介绍》 本文对《基于GA算法解决VRPTW》的分析和思考.具体的代码可以参考 《Python实现(MD)VRPTW常见求解算法——遗传算法&#xff08;GA&#xff09;》 . 文章目录壹、VRPTW一. 定义类二、数据读取三. 构造初…

JVM调优手段

JDK提供命令工具 jstat 是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据&#xff0c;在没有 GUI图形界面&#xff0c;只提供了纯文本控制台环境的服务器上&#xff0c;它将是运行期定位虚拟…

博球一看,CSDN与你共观世界杯

2022卡塔尔世界杯不知不觉已接近尾声&#xff0c;不仅让人感叹&#xff0c;乌拉圭&#xff0c;巴西&#xff0c;葡萄牙都已淘汰&#xff0c;四强诞生分别是阿根廷&#xff0c;法国&#xff0c;摩洛哥&#xff0c;克罗地亚&#xff0c;非常期待梅西和魔笛的对决&#xff0c;也希…

电子学会2020年12月青少年软件编程(图形化)等级考试试卷(三级)答案解析

目录 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 二、判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 三、编程题【该题由测评师线下评分】&#xff08;共3题&#xff0c;共30分&#xff09; 青少年软件…

【云计算与大数据技术】虚拟化简介及虚拟化的分类讲解(图文解释 超详细)

一、虚拟化简介 1&#xff1a;什么是虚拟化 虚拟化是指计算机元件在虚拟的基础上而不是在真实的、独立的物理硬件基础上运行。这种以优化资源、简化软件的重新配置过程为目的的解决方案就是虚拟化技术 虚拟化架构就是在一个物理硬件机器上同时运行多个不同应用的独立的虚拟系…

r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现|视频

Glmnet是一个通过惩罚最大似然关系拟合广义线性模型的软件包。正则化路径是针对正则化参数λ的值网格处的lasso或Elastic Net&#xff08;弹性网络&#xff09;惩罚值计算的。 最近我们被客户要求撰写关于LASSO的研究报告&#xff0c;包括一些图形和统计输出。该算法非常快&am…

电子学会2020年12月青少年软件编程(图形化)等级考试试卷(四级)答案解析

目录 一、单选题&#xff08;共15题&#xff0c;每题2分&#xff0c;共30分&#xff09; 二、判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 三、编程题【该题由测评师线下评分】&#xff08;共4题&#xff0c;共50分&#xff09; 青少年软件…

51单片机——LED 点阵点亮一个点,小白详解

LED点阵介绍&#xff1a; LED点阵是由发光二极管排列组成的显示器件&#xff0c;在我们生活中的电器中随处可见&#xff0c;被广泛用于汽车报站器&#xff0c;广告屏等。 通常用用较多的是8*8点阵&#xff0c;然后使用多个8*8点阵组成不同分辨率的LED点阵显示屏&#xff0c;比如…

kubernetes--kube-proxy组件深入理解

文章目录kube-proxy的工作原理netfilter的运行机制ipvs和iptables有什么区别&#xff1f;iptables在网络栈的hook点更多&#xff0c;而ipvs的hook点很少iptables的hook点ipvs的hook点如何切换&#xff1f;ipvs安装为何推荐ipvs&#xff1f;为什么iptables或者ipvs在每个节点上都…

面试官:你会几种分布式 ID 生成方案???

1. 为什么需要分布式 ID 对于单体系统来说&#xff0c;主键 ID 常用主键自动的方式进行设置。这种 ID 生成方法在单体项目是可行的&#xff0c;但是对于分布式系统&#xff0c;分库分表之后就不适应了。比如订单表数据量太大了&#xff0c;分成了多个库&#xff0c;如果还采用…

基于java+springboot+mybatis+vue+mysql的福聚苑社区团购

项目介绍 随着互联网的发展&#xff0c;各种团购模式也越来越多&#xff0c;尤其是最近几年的社区团购模式更是如火如荼的在进行着&#xff0c;我了能够让大家品味到更多的瓜果蔬菜&#xff0c;我们通过java语言&#xff0c;springboot框架、前端vue技术、数据库mysql开发了本…

使用Hilt搭建隔离层架构

在我们的日常编码的过程中&#xff0c;常常会遇到这种需求。例如&#xff1a;这个版本我们使用okhttp作为网络通信库&#xff0c;如果下个版本我们想要用volley作为网络通信库&#xff0c;那该怎么办呢&#xff1f;我们总不能对使用okhttp的地方一个个改成volley吧&#xff01;…