嵌入式培训机构四个月实训课程笔记(完整版)-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。…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
Windows 下端口占用排查与释放全攻略
Windows 下端口占用排查与释放全攻略 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。 一、准…...
结构化文件管理实战:实现目录自动创建与归类
手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题,进而引发后续程序异常。使用工具进行标准化操作,能有效降低出错概率。 需要快速整理大量文件的技术用户而言,这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB,…...
LangChain【6】之输出解析器:结构化LLM响应的关键工具
文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器?1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...
