嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第三天-ARM Linux ADC和触摸屏开发 (物联技术666)

本文主要是介绍嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第三天-ARM Linux ADC和触摸屏开发 (物联技术666),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

链接:https://pan.baidu.com/s/1V0E9IHSoLbpiWJsncmFgdA?pwd=1688
提取码:1688

教学内容:

1ADC

S3C2440的A/D转换器包含一个8通道的模拟输入转换器,可以将模拟输入信号转换成10位数字编码。

在A/D转换时钟频率为2.5MHz时,其最大转换率为500KSPS(5个时钟周期完成一次转换)

输入电压范围为0~3.3V。

AD转换接口中的AIN[7]-AIN[4]四个通道为触摸屏的模拟信号输入口,低4位通道为普通的AD通道。

外AD转换:A[3]-A[0]

1)、设置ADCCON寄存器

通过ECFLG[15]可以查询是否转换完成,PRSCEN[14]预分频使能,PRSCVL[13:6]:分频大小

SEL_MUX[5:3]:选择AD转换通道;STDBM[2]:0普通模式;READ_START[1]:1,读取完后,自动继续AD转换,0停止使能读取;ENABLE_START[0]:1,启动AD转换,启动后自动清零

2)、ADCTSC

全设为0

3)、ADCDLY

AD延时

4)、ADCDATn

ADCDAT0[9:0]:AD转换的数据;ADCDAT0[15:12]:触摸屏AD相关,可以不设。

2、触摸屏AD转换:AIN[7]-AIN[4]

1)、设置ADCCON(和普通相关),

2)、设置ADCTSC

UD_SEN---抬起按下中断设置(0:检查点击触摸屏,1:检查弹起触摸屏)

  0:使能按下中断;         1:使能台起中断

YM_SEN---选择YMON的输出值

  0:输出0(YM=高阻);        1: 输出1(YM=GND)

YP_SEN---选择nYPON的输出值

  0:输出0(YP=外部电压); 1:输出1(YP连接AIN[5])

XM_SEN---选择XMON的输出值

  0:输出0( XM=高阻);      1: 输出1(XM=GND)

XP_SEN---选择nXPON的输出值

      0:输出0(XP=外部电压);1:输出1(XP连接AIN[7])

PULL_UP---上拉切换使能(等待中断才上拉,其他1)

       0:XP上拉使能;        1: XP上拉禁止

AUTO_PST---自动连续转换X轴和Y轴坐标模式选择(连续是测量X之后会继续测量Y)

       0:普通A/D转换;            1:连续X/Y轴转换模式

XY_PST---手动测量X轴和Y轴坐标模式选择

       00:无操作模式;             01:对X坐标测量;

       10:对Y坐标测量;           11:等待中断模式

等待中断模式:

YMON=1; nYPON=1;XMON=0;nXPON=1

YM=接地

YP=AIN[5]

XM=高阻

XP=AIN[7](上拉)

YM_SEN=1,YP_SEN=1,XM_SEN=0,XP_SEN=1;PULL_UP=0;XY_PST=11

测量X坐标:

YMON=0; nYPON=1;XMON=1;nXPON=0;

YM=高阻

YP=AIN[5]

XM=接地

XP=上拉

YM_SEN=0,YP_SEN=1,XM_SEN=1,XP_SEN=0;PULL_UP=1;XY_PST=01

测量Y坐标:

YMON=1; nYPON=0;XMON=0;nXPON=1;

YM=接地

YP=上拉

XM=高阻

XP=AIN[7]

YM_SEN=1,YP_SEN=0,XM_SEN=0,XP_SEN=1;PULL_UP=1;XY_PST=10

//*************触摸中断服务程序**********************************

void __irq Adc_or_TsSep(void)

{

       unsigned int valx, valy;

       int i;

      

       rSUBSRCPND |= BIT_SUB_TC; //清零

       ClearPending(BIT_ADC);          //清零

      

       if(rADCDAT0&0x8000)//stylus up

       {

             Uart_Printf("\nStylus Up!!\n"); 

             rADCTSC &= ~(0x01<<8);    // Set stylus down interrupt

       }

       else

       {

             Uart_Printf("\nStylus Down!!\n");

            

             // 采集X轴

       rADCTSC=(0<<8)|(0<<7)|(1<<6)|(1<<5)|(0<<4)|(1<<3)|(0<<2)|(1);

             valx = 0;

             for(i=0;i<5;i++)                     

             {

                    rADCCON|=0x1;              

                    while(rADCCON & 0x1);    //启动   

                    while(!(0x8000&rADCCON));         //等待结束

                    valx += (0x3ff&rADCDAT0);     //取值

             }

             valx /= 5;

            

             // 采集Y轴

       rADCTSC=(0<<8)|(1<<7)|(0<<6)|(0<<5)|(1<<4)|(1<<3)|(0<<2)|(2);

             valy = 0;     

             for(i=0;i<5;i++)                     

             {

                    rADCCON|=0x1;             

                    while(rADCCON & 0x1);     

                    while(!(0x8000&rADCCON)); 

                    valy += (0x3ff&rADCDAT1);

             }

             valy /= 5;

            

             // 计算X和Y坐标

            ResultX = TOUCH_WIDTH * ( TOUCH_DEFAULT_RB -valx) / (TOUCH_DEFAULT_RB - TOUCH_DEFAULT_LB);

            ResultY = TOUCH_HEIGHT * (valy - TOUCH_DEFAULT_TB) / (TOUCH_DEFAULT_BB - TOUCH_DEFAULT_TB);

             // 恢复到等待台起中断模式

       rADCTSC=(1<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);

       }

}

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

在初始化中设置成,按下中断等待模式,清中断,判断是抬起中断还是按下中断,按下中断中设置ADCTSC为采集x坐标值,(这里不需要设置ADCCON3-5位了,CPU自动设置了 ),按下采集结束后把中断模式改为抬起等待中断模式。

3SPI总线

SPI(Serial Peripheral Interface),串行外围设备接口。是由Motorola公司开发,用来在微控制器和外围设备芯片之间提供一个低成本、易使用的全双工同步串行总线。

SPI接口由SDI(串行数据输入),SDO(串行数据输出),SCK(串行移位时钟),CS(从使能信号)四种信号线构成。

S3C2440 SPI控制器及寄存器:2个SPI,每个都有6个专用寄存器,共12个寄存器

SPCON:模式控制选择(8位)

SPSTA:状态,注意0位,1:检测收发就绪(8位)

SPPRE:预分频(8位)

SPTDAT:发送寄存器SPTDAT0,SPTDAT1二个(8位)

SPRDAT:接收寄存器SPRDAT0,SPRDAT1二个(8位)

这篇关于嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第三天-ARM Linux ADC和触摸屏开发 (物联技术666)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/714559

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装