嵌入式培训机构四个月实训课程笔记(完整版)-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位)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】volatile关键字

目录 一、引入 二、volatile关键字 三、对编译器优化的理解 一、引入 我们先来看一段代码&#xff1a; #include <stdio.h> #include <signal.h>int flag 1;void handler(int signo) {flag 0;printf("已收到%d号信号,flag:%d\n", signo, flag); }…

DIY耳机壳制作使用倒模UV树脂胶液对HIFI动铁音质有什么优势?

使用倒模UV树脂胶液制作DIY耳机壳并在HIFI动铁耳机上应用&#xff0c;可能会带来以下优势&#xff1a; 提高声音隔离度&#xff1a;UV树脂胶液可以有效地将动铁单元封装在耳机壳内&#xff0c;减少外界噪音的干扰&#xff0c;提高声音的隔离度。这有助于提高耳机的聆听体验&am…

紫微斗数双星组合:天同天梁在寅申

文章目录 前言内容总结 前言 紫微斗数双星组合&#xff1a;天同天梁在寅申 内容 紫微斗数双星组合&#xff1a;天同天梁在寅申 性格分析 天同星&#xff0c;天梁星入命宫&#xff0c;称做天同天梁坐命的人。其人外表温和&#xff0c;本性善良&#xff0c;但内心固执&#x…

蓝桥杯每日一题----单调栈和单调队列

单调栈和单调队列 单调栈 单调栈即栈内的元素是单调递减或者单调递增的&#xff0c;我们通过一个题目来理解。 单调栈模板题 题目描述 给出项数为 n 的整数数列 a 1 … a n a_1…a_n a1​…an​。 定义函数 f ( i ) f(i) f(i)代表数列中第 i 个元素之后第一个大于 a i …

核心篇-OSPF技术之序(下)

文章目录 一. 实验专题1.1. 实验1&#xff1a;配置OSPF特殊区域1.1.1. 实验目的1.1.2. 实验拓扑图1.1.3. 实验步骤&#xff08;1&#xff09;配置IP地址&#xff08;2&#xff09;创建环回口&#xff08;3&#xff09;查看路由表&#xff08;4&#xff09;设置Stub区域&#xf…

linux 安装docker

目录 环境 操作步骤 1 下载脚本 2 执行脚本 3 检查docker版本&#xff0c;证明安装成功 环境 阿里云 ubuntu 22.04 64位 操作步骤 参考linux系统安装docker-腾讯云开发者社区-腾讯云 (tencent.com) 1 下载脚本 curl -fsSL https://get.docker.com -o get-docker.sh …

如何使用六图一表七种武器

六图一表七种武器用于质量管理&#xff1a; 描述当遇到问题时应该用那张图来解决&#xff1a; 一、如果题目说出了质量问题需要找原因&#xff1f; 解&#xff1a;用因果图&#xff0c;因果图也称石川图或鱼骨图 二、如果要判断过程是否稳定受控&#xff1f; 解&#xff1a…

Kotlin基本语法3集合

1.List集合 1.1 只读List fun main() {val list listOf("Jason", "Jack", "Jacky")println(list.getOrElse(3){"Unknown"})println(list.getOrNull(3)?:"Unknown") } 1.2 可变List fun main() {val mutableList mutabl…

幻兽帕鲁服务器如何设置定时清理内存?内存优化(设置Swap、虚拟内存)

幻兽帕鲁服务器可以通过设置定时重启游戏&#xff0c;来达到定时清理内存的目的。也可以通过安装定时清理内存的软件&#xff0c;来设置。还可以通过设置虚拟内存来设置。设置的方法如下&#xff1a; 1、腾讯云一键部署幻兽帕鲁&#xff0c;部署好之后&#xff0c;只需要在控制…

2024 CKS 题库 | 6、创建 Secret

不等更新题库 CKS 题库 6、创建 Secret Task 在 namespace istio-system 中获取名为 db1-test 的现有 secret 的内容 将 username 字段存储在名为 /cks/sec/user.txt 的文件中&#xff0c;并将password 字段存储在名为 /cks/sec/pass.txt 的文件中。 注意&#xff1a;你必须创…

C++集群聊天服务器 muduo+nginx+redis+mysql数据库连接池 笔记 (下)

C集群聊天服务器 网络模块业务模块CMake构建项目 笔记 &#xff08;上&#xff09;-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135991635?spm1001.2014.3001.5501C集群聊天服务器 数据模块业务模块CMake构建项目 笔记 &#xff08;上&#xff09;-CSDN博…

Java双非无实习秋招进大厂历程

从转后端到拿到Offer,约一年半。 背景介绍 进了快手(如果你觉得不是大厂那就不是!)&#xff1a; 真双非本科: 安徽某双非无实习: 因为编程语言问题,去过之后发现不喜欢,几天跑路!(某小厂,2023.8)竞赛水: 大创(做的安卓软件)起到一个外观上的作用吧...2022.3 大二下转的后端: …