嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第三天-ARM Linux ADC和触摸屏开发 (物联技术666)
链接:https://pan.baidu.com/s/1V0E9IHSoLbpiWJsncmFgdA?pwd=1688
提取码:1688
教学内容:
1、ADC
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自动设置了 ),按下采集结束后把中断模式改为抬起等待中断模式。
3、SPI总线
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)
链接:https://pan.baidu.com/s/1V0E9IHSoLbpiWJsncmFgdA?pwd1688 提取码:1688 教学内容: 1、ADC S3C2440的A/D转换器包含一个8通道的模拟输入转换器,可以将模拟输入信号转换成10位数字编码。 在A/D转换时钟频率为2.5MHz时&…...
LeetCode “AddressSanitizer:heat-use-after-free on address“问题解决方法
heat-use-after-free : 访问堆上已经被释放的内存地址 现象:同样代码在LeetCode上报错,但是自己在IDE手动打印并不会报错 个人猜测,这个bug可能来源于LeetCode后台输出打印链表的代码逻辑问题。 问题描述 题目来自LeetCode的8…...
幸运彩票
L1-6 幸运彩票 分数 15 作者 陈越 单位 浙江大学 彩票的号码有 6 位数字,若一张彩票的前 3 位上的数之和等于后 3 位上的数之和,则称这张彩票是幸运的。本题就请你判断…...
搭建yum仓库服务器
安装 1.安装linux 1.1安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel 1.2下载 cd /opt/nginx wget http://nginx.org/download/nginx-1.25.3.tar.gz 1.3解压 tar -xvf nginx-1.25.3.tar.gz 1.4配置 cd nginx-1.25.3 ./configure --pre…...
贪心算法练习day1
练习1--翻硬币 1)题目及要求 2)解题思路 输入的是字符串,要想将两组字符串进行一一对比,需要将字符串转换成字符数组,再使用for循环依次遍历字符数组,进行比对。 输入两行字符串,转换成两个字…...
[VulnHub靶机渗透] WestWild 1.1
🍬 博主介绍👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…...
如何使用 ControlValueAccessor 在 Angular 中创建自定义表单控件
简介 在 Angular 中创建表单时,有时您希望拥有一个不是标准文本输入、选择或复选框的输入。通过实现 ControlValueAccessor 接口并将组件注册为 NG_VALUE_ACCESSOR,您可以将自定义表单控件无缝地集成到模板驱动或响应式表单中,就像它是一个原…...
视频讲解:优化柱状图
你好,我是郭震 AI数据可视化 第三集:美化柱状图,完整视频如下所示: 美化后效果前后对比,前: 后: 附完整案例源码: util.py文件 import platformdef get_os():os_name platform.syst…...
OpenAI宣布ChatGPT新增记忆功能;谷歌AI助理Gemini应用登陆多地区
🦉 AI新闻 🚀 OpenAI宣布ChatGPT新增记忆功能,可以自由控制内存,提供个性化聊天和长期追踪服务 摘要:ChatGPT新增的记忆功能可以帮助AI模型记住用户的提问内容,并且可以自由控制其内存。这意味着用户不必…...
Solidworks:平面草图练习
继续练习平面草图,感觉基本入门了。...
React18原理: 渲染与更新时的重点关注事项
概述 react 在渲染过程中要做很多事情,所以不可能直接通过初始元素直接渲染还需要一个东西,就是虚拟节点,暂不涉及React Fiber的概念,将vDom树和Fiber 树统称为虚拟节点有了初始元素后,React 就会根据初始元素和其他可…...
嵌入式I2C 信号线为何加上拉电阻(图文并茂)
IIC 是一个两线串行通信总线,包含一个 SCL 信号和 SDA 信号,SCL 是时钟信号,从主设备发出,SDA 是数据信号,是一个双向的,设备发送数据和接收数据都是通过 SDA 信号。 在设计 IIC 信号电路的时候我们会在 SC…...
Vite 5.0 正式发布
11 月 16 日,Vite 5.0 正式发布,这是 Vite 道路上的又一个重要里程碑!Vite 现在使用 Rollup 4,这已经代表了构建性能的大幅提升。此外,还有一些新的选项可以改善开发服务器性能。 Vite 4 发布于近一年前,它…...
嵌入式STM32 单片机 GPIO 的工作原理详解
STM32的 GPIO 介绍 GPIO 是通用输入/输出端口的简称,是 STM32 可控制的引脚。GPIO 的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 以 STM32F103ZET6 芯片为例子,该芯片共有 144 脚芯片,…...
系统调用的概念
在嵌入式开发、操作系统开发以及一般的系统编程中,系统调用是一个核心概念。它允许用户空间程序请求内核执行某些操作,如打开文件、读写数据、创建进程等。这些操作通常需要特殊的权限或访问硬件资源,因此不能直接在用户模式下执行。 系统调…...
【无标题】Matlab 之axes函数——创建笛卡尔坐标区
**基本用法:**axes 在当前图窗中创建默认的笛卡尔坐标区,并将其设置为当前坐标区。 应用场景1:在图窗中放置两个 Axes 对象,并为每个对象添加一个绘图。 要求1:指定第一个 Axes 对象的位置,使其左下角位于…...
2.12:C语言测试题
1.段错误:申请堆区内存未返回,str指向NULL 2.段错误:局部变量,本函数结束,p也释放 3.越界访问,可能正常输出hello,可能报错 4.可能段错误,释放后,str未指向NULL&#x…...
【Linux】yum软件包管理器
目录 Linux 软件包管理器 yum 什么是软件包 Linux安装软件 查看软件包 关于rzsz Linux卸载软件 查看yum源 扩展yum源下载 Linux开发工具 vim编辑器 上述vim三种模式之间的切换总结: 命令模式下,一些命令: vim配置 Linux 软件包管理…...
「优选算法刷题」:寻找旋转排序数组中的最小值
一、题目 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次…...
MySQL 基础入门指南:从安装到基本操作
一、简介 MySQL 是一种流行的开源关系型数据库管理系统,被广泛用于各种规模和类型的应用程序中。如果您对 MySQL 还不熟悉,本文将为您提供一个基础的入门指南,从安装到基本操作。 1.1 安装 MySQL 首先,您需要下载并安装 MySQL。…...
数据宝藏库:Awesome Public Datasets完整入门指南
数据宝藏库:Awesome Public Datasets完整入门指南 【免费下载链接】awesome-public-datasets A topic-centric list of HQ open datasets. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-public-datasets 你是否曾经为了寻找高质量的数据集而烦…...
模型剪枝实战指南(一):从原理到落地
1. 模型剪枝的本质:为什么能剪? 我第一次接触模型剪枝时,最困惑的问题是:神经网络训练出来的参数不都是有用的吗?凭什么能随便删?后来在移动端部署ResNet模型时才发现,原来大多数神经网络都存在…...
LightRAG架构解析:从图索引到双层检索的工程实现
1. LightRAG架构概览:为什么需要双层检索? 在传统RAG系统中,我们常常遇到两个核心痛点:信息碎片化和上下文缺失。想象一下,当你问"电动汽车的普及对城市空气质量有何影响"时,传统系统可能分别检索…...
C++数组和指针的声明与使用指南
数组声明语法 在 C 中声明数组的语法为: 数据类型 数组名[数组大小]; 示例: int myArray[10]; // 声明一个包含 10 个整数的数组 数组初始化 声明时可直接初始化: int myArray[5] {10, 20, 30, 40, 50}; 部分初始化时,未指定值的…...
Z-Image-Turbo LoRA Web服务安全加固:禁用前端覆盖负面提示+后端content policy双层防护
Z-Image-Turbo LoRA Web服务安全加固:禁用前端覆盖负面提示后端content policy双层防护 1. 项目概述与安全挑战 造相-Z-Image-Turbo 亚洲美女LoRA Web服务是一个基于Z-Image-Turbo模型的图片生成平台,集成了laonansheng/Asian-beauty-Z-Image-Turbo-To…...
5分钟搞定RetroArch缩略图:从黑屏到完美游戏封面的全攻略
5分钟搞定RetroArch缩略图:从黑屏到完美游戏封面的全攻略 【免费下载链接】RetroArch Cross-platform, sophisticated frontend for the libretro API. Licensed GPLv3. 项目地址: https://gitcode.com/GitHub_Trending/re/RetroArch 还记得打开RetroArch游戏…...
springboot+vue基于web的药店管理系统 药品商城在线购药系统
目录同行可拿货,招校园代理 ,本人源头供货商功能模块分析技术实现要点扩展功能建议项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块分析 后台管理系统(SpringBoot&…...
从云端到指尖:巧用Aspose组件实现Office/PDF文档秒级HTML预览,攻克移动端大文件访问瓶颈
1. 移动端大文件预览的痛点与解决思路 最近接手一个企业级项目时,遇到了一个非常典型的场景:用户通过PC端上传各种办公文档(Word、Excel、PPT、PDF),需要在移动端随时查看。但当文件体积较大时(比如超过50M…...
5个维度深度评估:哪款内容解锁工具真正值得投入时间?
5个维度深度评估:哪款内容解锁工具真正值得投入时间? 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字信息时代,付费墙已成为内容获取的主要障…...
Pyspark环境搭建及案例(Windows)
Windows环境下开发pyspark程序 一、环境准备:Anaconda Python 虚拟环境 1. 安装 Anaconda(推荐) 下载地址:https://www.anaconda.com/products/distribution 安装时选择“Add Anaconda to PATH”会更方便。 2、新建虚拟环境 使…...
