嵌入式培训机构四个月实训课程笔记(完整版)-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。…...
3步搞定抖音资源下载:免费高效的douyin-downloader完整指南
3步搞定抖音资源下载:免费高效的douyin-downloader完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...
40希尔排序 - 以递减间距进行插入排序
希尔排序 - 以递减间距进行插入排序 040希尔排序:用长距离跳跃打破速度壁垒📰 5W1H 发明者故事 Who(何人)- 发明者是谁? 发明者:唐纳德希尔(Donald L. Shell) 背景:希尔…...
稀疏矩阵运算全解析:从基础算术到高效求解与性能调优
1. 稀疏矩阵运算操作全景解析在数值计算、机器学习、图形学乃至各类工程仿真领域,处理大规模数据时,我们总会遇到一个“熟悉的陌生人”——稀疏矩阵。它不像密集矩阵那样,每个元素都占据着内存空间,而是像一个精打细算的管家&…...
实战指南:如何为nvm-windows项目配置专业级持续集成流水线
实战指南:如何为nvm-windows项目配置专业级持续集成流水线 【免费下载链接】nvm-windows A node.js version management utility for Windows. Ironically written in Go. 项目地址: https://gitcode.com/gh_mirrors/nv/nvm-windows nvm-windows作为Windows平…...
NoFences:免费开源桌面分区工具,Windows用户必备的效率神器
NoFences:免费开源桌面分区工具,Windows用户必备的效率神器 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences NoFences是一款基于C#开发的开源桌面分区工…...
立创泰山派RK3566开发环境实战:从交叉编译到高效文件传输
1. 立创泰山派RK3566开发环境搭建全攻略 第一次拿到立创泰山派RK3566开发板时,我和大多数嵌入式开发者一样兴奋又忐忑。这款基于Rockchip RK3566处理器的开发板性能强劲,但配套资料相对分散,特别是对于从其他平台(比如我熟悉的IMX…...
使用Nodejs和Taotoken快速构建一个支持多模型切换的聊天服务
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Node.js和Taotoken快速构建一个支持多模型切换的聊天服务 基础教程类,面向全栈或后端开发者,教程将引导…...
从零构建μC/OS-II硬件抽象层:以ARM7 LPC2292为例详解移植核心
1. 项目概述与核心思路十年前,我第一次把μC/OS-II从一个ARM7开发板搬到另一个不同型号的ARM7芯片上,光是改启动文件和中断向量表就折腾了一周。那时候我就想,要是有一套标准化的“中间层”,能把芯片底层的差异给屏蔽掉࿰…...
Deepin Boot Maker终极指南:3分钟制作完美启动盘的免费神器
Deepin Boot Maker终极指南:3分钟制作完美启动盘的免费神器 【免费下载链接】deepin-boot-maker 项目地址: https://gitcode.com/gh_mirrors/de/deepin-boot-maker 你是否曾经为了制作系统启动盘而烦恼?面对复杂的命令行工具,担心误操…...
XUnity Auto Translator:3分钟为Unity游戏添加多语言支持的终极方案
XUnity Auto Translator:3分钟为Unity游戏添加多语言支持的终极方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经因为语言障碍而无法畅玩心爱的Unity游戏?或者作为游…...
