ADI Blackfin DSP处理器-BF533的开发详解24:触摸屏的实现和应用(含源代码)

news2025/4/26 23:57:55

硬件准备**

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

软件准备

Visual DSP++软件

硬件链接

在这里插入图片描述

使用到硬件模块原理图

在这里插入图片描述

功能介绍

四线电阻式触摸屏,拿笔和指甲划拉的,不是现在的容性触摸屏。

ADSP-EDU-BF53x 板卡的 TFT 液晶屏上,覆盖了一层触摸屏(Touch),触摸屏连接触摸屏控制器芯片 ADS7843, ADSP-BF53x 通过 SPI 接口连接该控制器,采用 PF2 实现控制器设备的控制,由于板卡上有 SD 卡和触摸屏控制器两个 SPI 设备,所以通过 CPLD 将 PF2 接口做了个 2 选 1 切换,通过配置 CPLD 的 DEVICE_OE 寄存器,来使能和 选通 PF2 连接哪一个 SPI 设备。

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

DEVICE_OE 寄存器位功能:

在这里插入图片描述

SPI_SEL1~0:SPI 片选选择位
00:SPI_SEL 选通触摸屏模块
01:SPI_SEL 选通 SD 卡模块
10:SPI_SEL 选通外部 SPI0 模块
11:SPI_SEL 选通外部 SPI1 模块

在使用触摸屏时,需将 SPI_SEL0 位设置为 0,将 SPI_SEL1 位设置为 0。

硬件连接示意图

在这里插入图片描述

代码实现功能

代码实现了 12Bit 的触摸屏控制器对触摸屏坐标的读取,代码采用中断触发方式,当中断触发后,读出中断数据寄存器,判断确认为触摸屏中断,然后调用触摸屏读坐标函数分别读取 X 坐标和 Y 坐标。并将坐标打印在
VisualDSP++ 软件上。

测试步骤

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

测试结果

用手点击触摸屏,在 VisualDSP++ 5.0 软件上打印被触发的触摸屏坐标。

在这里插入图片描述

程序源码

ADS7843.C

#include <cdefBF533.h>

void SPIinit(void)
{
*pSPI_BAUD=30;
*pSPI_FLG |=FLS2;
*pSPI_CTL = 0x1001|CPHA| CPOL;
*pSPI_CTL = (*pSPI_CTL | SPE);
}

unsigned char spi_byte_rw(unsigned char value)
{
unsigned char incoming=0;
while(!(*pSPI_STAT & SPIF));
*pSPI_TDBR = value;
while(*pSPI_STAT & RXS)
incoming = *pSPI_RDBR;

return(incoming);	

}

int read_x(void)
{
int x_dat = 0;
int temp = 0;
delay(0xff);
*pSPI_FLG &= ~FLG2;
delay(0xff);
spi_byte_rw(0x90);
delay(0xff);
spi_byte_rw(0x00);
x_dat = (spi_byte_rw(0x00)&0xff)<<1;
temp = (spi_byte_rw(0x00)&0xff)<<1;
x_dat = (x_dat<<8)|temp;
x_dat >>=4;
*pSPI_FLG |= FLG2;
delay(0xff);

return x_dat;

}

int read_y(void)
{
int y_dat = 0;
int temp = 0;
delay(0xff);
*pSPI_FLG &= ~FLG2;
delay(0xff);
spi_byte_rw(0xd4);
delay(0xff);
spi_byte_rw(0x00);
y_dat = (spi_byte_rw(0x00)&0xff)<<1;
temp = (spi_byte_rw(0x00)&0xff)<<1;
y_dat = (y_dat<<8)|temp;
y_dat>>=4;
*pSPI_FLG |= FLG2;
delay(0xff);

return y_dat;	

}

cpu.c

#include <cdefBF533.h>
#include <sys\exception.h>
EX_INTERRUPT_HANDLER(FlagA_ISR);
/**********************************************************************************

  • 名称 :Set_PLL
  • 功能 :初始化内核时钟和系统时钟
  • 入口参数 :pmsel pssel 设置参数
  • 出口参数 :无
    ***********/
    void Set_PLL(int pmsel,int pssel)
    {
    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;”);
    }
    }
    /
  • 名称 :Setup_Flags
  • 功能 :初始化PF口
  • 入口参数 :无
  • 出口参数 :无
    ****************************************************************************/
    void Setup_Flags(void)
    {
    *pFIO_INEN = 0x0020;
    *pFIO_DIR = 0x001f;
    *pFIO_EDGE = 0x0000;
    *pFIO_MASKA_S = 0x0020;
    *pFIO_POLAR = 0x0020;
    }

/****************************************************************************

  • 名称 :Init_EBIU
  • 功能 :初始化并允许异步BANK存储器工作
  • 入口参数 :无
  • 出口参数 :无
    ****************************************************************************/

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

/****************************************************************************

  • 名称 :Init_SDRAM
  • 功能 :初始化SDRAM
  • 入口参数 :无
  • 出口参数 :无
    ****************************************************************************/
    void Init_SDRAM(void)
    {
    *pEBIU_SDRRC = 0x00000817;
    *pEBIU_SDBCTL = 0x00000013;
    *pEBIU_SDGCTL = 0x0091998d;
    ssync();
    }

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;

}

/****************************************************************************

  • 名称 : delay
  • 功能 : 延时函数
  • 入口参数 :无
  • 返回值 :无
    ****************************************************************************/
    void delay(unsigned int tem)
    {
    int i;
    for(i=0;i<tem;i++)
    asm(“nop;”);
    }

main.c

#include <stdio.h>
#include <cdefBF533.h>
#include <sys\exception.h>
#include “cpld.h”

EX_INTERRUPT_HANDLER(FlagA_ISR)
{
unsigned char interrupt=0;
int tem_x = 0,tem_y=0;

interrupt = (~*pINTERRUPT_DAT&0x3f)&0x02;	

if(interrupt == 0x02)
{
	tem_x = read_x();
	tem_y = read_y();
	if(tem_x!=0xfff)
		printf("x is %x\n",tem_x);

	if(tem_y!=0)
		printf("y is %x\n",tem_y);	
}	
*pFIO_FLAG_C = 0x0001;	

}

void main(void)
{
Set_PLL(16,4);
Init_EBIU();
Interrupt_Enable();
Touch_Enable();

Init_Flags();
SPIinit();
Init_Interrupts();
printf("Please press the touch screen!\n"); 

while(1);

}

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

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

相关文章

《Docker》阿里云服务器docker部署nginx并配置https踩坑记录(完整)

前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e; 主页: oliver尹的主页 格言: 跌倒了爬起来就好&#xff5e; 来个关注吧&#xff0c;点个赞…

# Docker说明、安装(Windows10家庭版)

Docker说明、安装&#xff08;Windows10家庭版&#xff09; Docker是什么&#xff1f;它是干嘛的&#xff1f; 开始&#xff0c;我就知道别人说是用来加工tar包的。tar包&#xff1f;又是干什么用的&#xff1f; tar包&#xff0c;个人粗俗的理解就是一个环境&#xff0c;里面…

CVPR2021 | VQGAN+:Taming Transformers for High-Resolution Image Synthesis

原文标题&#xff1a;Taming Transformers for High-Resolution Image Synthesis 主页&#xff1a;Taming Transformers for High-Resolution Image Synthesis 代码&#xff1a;https://github.com/CompVis/taming-transformers transformer比CNN缺少了归纳偏置和局部性&…

音视频编解码经典问题汇总(1)

前言&#xff1a; 大家好&#xff0c;今天给大家分享的内容是关于平时在做音频编解码会遇到的一些问题&#xff0c;比如说&#xff1a;解码播放的时候&#xff0c;播不出来解码播放的时候&#xff0c;画面有条纹编码的时候&#xff0c;修改分辨率大小&#xff0c;没有反应这三个…

【NumPy 数组副本 vs 视图、NumPy 数组形状、重塑、迭代】

&#x1f935;‍♂️ 个人主页老虎也淘气 个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f44d;&#x1f3fb; 收藏…

实验五 进程通信-管道通信

1. 函数int pipe(int fd[2])创建一个管道&#xff0c;管道两端可分别用描述字fd[0]以及fd[1]来描述。需要注意的是&#xff0c;管道的两端是固定了任务的。即一端只能用于读&#xff0c;由描述字fd[0]表示&#xff0c;称其为管道读端&#xff1b;另一端则只能用于写&#xff0c…

我失业了?| ChatGPT生信分析初体验

最近ChatGPT火的一塌糊涂&#xff0c;作为在生物医学和计算机科学领域夹缝求生的边缘摇摆人&#xff0c;也来蹭一波热度。ChatGPT是一个预训练的语言模型&#xff0c;由OpenAI训练。它可以用来生成自然语言文本&#xff0c;并且可以进行对话。它基于Transformer架构&#xff0c…

OAuth2.0的四种授权方式

前言 OAuth 简单理解就是一种授权机制&#xff0c;它是在客户端和资源所有者之间的授权层&#xff0c;用来分离两种不同的角色。在资源所有者同意并向客户端颁发令牌后&#xff0c;客户端携带令牌可以访问资源所有者的资源。 OAuth2.0 是 OAuth 协议的一个版本&#xff0c;有…

【计算机毕业设计】77.旅游资源网站源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 本论文主要论述了如何使用JAVA语言开发一个旅游资源网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xf…

MATLB|分布式能源的选址与定容IEEE30节点实现

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清…

Jmeter(四):请求默认值元件应用,模拟http请求实战,正则表达式提取器元件讲解

Jmeter(7)&#xff1a;jmeter请求默认值元件应用 HTTP请求默认值 在公司内部进行测试的时候&#xff0c;一般测试环境访问的接口地址&#xff08;服务器名称 或IP&#xff09;、端口、协议一般都是不变的&#xff0c;但http请求取样器每个请求都要求写一遍 这些信息&#xff0…

购物网站系统

视频如下 go网站前台:关于我们、联系我们、公告信息、商品类型、商品信息、商品评论管理员: 1、管理关于我们、联系我们 2、增删改查公告类型、公告信息 3增删改查商品类型、商品信息 4、查看注册用户信息 5、查看用户充值信息 6、查看回复用户咨询 7、查看下单信息 8、发货、查…

微信支付API3 APP【统一下单 APIV3】

官方参考资料 签名&#xff1a;签名生成-接口规则 | 微信支付商户平台文档中心 签名生成&#xff1a;签名生成 - WechatPay-API-v3 统一下单接口&#xff1a;微信支付-开发者文档 如何查看证书序列号&#xff1a;证书相关 - WechatPay-API-v3 私钥和证书&#xff1a;私钥和…

EXCEL基础:数据透视表(按年龄分组统计与统计各部门的工资情况)

【按年龄分组进行统计】&#xff1a; 如下为原始数据&#xff0c;最后就是年龄字段&#xff1a; 选择数据单元格&#xff0c;在新表里插入【数据透视表】&#xff0c;若数据透视表的【字段列表】没有显示&#xff0c;可以按照1标注那里勾选&#xff0c; 按照2处的列、行和统计…

Pytorch:使用官网提供数据集的相关参数设置,以CIFAR10为例进行说明

文章目录前言一、Dataset定义-组成分类二、获取数据集1.参数说明2.相关Demo前言 本文记录笔者关于Dataset的相关学习记录&#xff0c;以Pytorch官网文档为主进行学习 一、Dataset 定义-组成 所谓Dataset&#xff0c;指的是我们在学习神经网络中要接触的数据集&#xff0c;一…

[附源码]Python计算机毕业设计SSM基于的楼盘销售系统的设计与实现(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

关于近期虚拟化学习遇到的问题总结

一、关于Intel VT-x/EPT. 不使用虚拟化的Intel VT-x/EPT 因为需要在Linux中使用kvm做虚拟化因此需要开放宿主虚拟机的虚拟权限 但是打开报错 首先想要开启虚拟化&#xff0c;你的cpu是一定要支持虚拟化的 如何查看呢&#xff0c;可以ctrlaltdel打开任务管理器 点击性能 可以看…

电子加速器原理与应用

辐射单位 射线能量ϵ\epsilonϵ&#xff0c;单位eVeVeV ϵhν\epsilon h\nuϵhν&#xff0c;普朗克常数hhh&#xff0c;电磁波频率ν\nuν 电子伏特eVeVeV&#xff1a;一个电子&#xff08;电量为1.610C&#xff09;经过1VVV的电位差加速后获得的动能。 1eV1.610−19J1.610−…

计及碳捕集电厂低碳特性的含风电电力系统源–荷多时间尺度调度方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

[附源码]Python计算机毕业设计SSM基于的楼盘销售管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…