arm9 adc及触摸屏怎么使用
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇文章主要介绍"arm9 adc及触摸屏怎么使用",在日常操作中,相信很多人在arm9 adc及触摸屏怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"arm9
千家信息网最后更新 2025年12月01日arm9 adc及触摸屏怎么使用
这篇文章主要介绍"arm9 adc及触摸屏怎么使用",在日常操作中,相信很多人在arm9 adc及触摸屏怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"arm9 adc及触摸屏怎么使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
2440 adc和触摸屏接口框图:
adc共有一个转换器, 8个通道. 其中 AIN[3:0] 只能作为普通的ad输入通道, 而 AIN[4]/YM , AIN[5]/YP, AIN[6]/XM, AIN[7]/XP既可以作为普通的ad通道也可以当做触摸屏接口
一 普通ADC功能(查询法)
#define PRESCALE_EN (1 << 14)#define PRSCVL(x) ((x) << 6)#define ADC_INPUT(x) ((x) << 3)#define ADC_START (1 << 0)#define ADC_ENDCVT (1 << 15)/* 使用查询方式读取A/D转换值 * 输入参数: * ch: 模拟信号通道,取值为0~7 */static int ReadAdc(int ch){ ADCCON = PRESCALE_EN | PRSCVL(49) | ADC_INPUT(ch);// 选择模拟通道,使能预分频功能,设置A/D转换器的时钟 = PCLK/(49+1) ADCTSC &= ~(1<<2); // 清除位[2],设为普通转换模式 ADCCON |= ADC_START; // 设置位[0]为1,启动A/D转换 while (ADCCON & ADC_START); // 当A/D转换真正开始时,位[0]会自动清0 while (!(ADCCON & ADC_ENDCVT)); // 检测位[15],当它为1时表示转换结束 return (ADCDAT0 & 0x3ff); // 读取数据 ADCDAT0存放普通adc结果 或x坐标, ADCDAT1存放y坐标}二 触摸屏接口(中断法)
// ADCTSC寄存器#define UD_SEN (1 << 8)#define DOWN_INT (UD_SEN*0)#define UP_INT (UD_SEN*1)#define YM_SEN (1 << 7)#define YM_HIZ (YM_SEN*0)#define YM_GND (YM_SEN*1)#define YP_SEN (1 << 6)#define YP_EXTVLT (YP_SEN*0)#define YP_AIN (YP_SEN*1)#define XM_SEN (1 << 5)#define XM_HIZ (XM_SEN*0)#define XM_GND (XM_SEN*1)#define XP_SEN (1 << 4)#define XP_EXTVLT (XP_SEN*0)#define XP_AIN (XP_SEN*1)#define XP_PULL_UP (1 << 3)#define XP_PULL_UP_EN (XP_PULL_UP*0)#define XP_PULL_UP_DIS (XP_PULL_UP*1)#define AUTO_PST (1 << 2)#define CONVERT_MAN (AUTO_PST*0)#define CONVERT_AUTO (AUTO_PST*1)#define XP_PST(x) (x << 0)#define NOP_MODE 0#define X_AXIS_MODE 1#define Y_AXIS_MODE 2#define WAIT_INT_MODE 3/* 设置进入等待中断模式,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En * (1)对于S3C2410,位[8]只能为0,所以只能使用下面的wait_down_int, * 它既等待Pen Down中断,也等待Pen Up中断 * (2)对于S3C2440,位[8]为0、1时分别表示等待Pen Down中断或Pen Up中断 *//* 进入"等待中断模式",等待触摸屏被按下 */#define wait_down_int() { ADCTSC = DOWN_INT | XP_PULL_UP_EN | XP_AIN | XM_HIZ | YP_AIN | YM_GND | \ XP_PST(WAIT_INT_MODE); }/* 进入"等待中断模式",等待触摸屏被松开 */#define wait_up_int() { ADCTSC = UP_INT | XP_PULL_UP_EN | XP_AIN | XM_HIZ | YP_AIN | YM_GND | \ XP_PST(WAIT_INT_MODE); }/* 进入自动(连续) X/Y轴坐标转换模式 */#define mode_auto_xy() { ADCTSC = CONVERT_AUTO | XP_PULL_UP_DIS | XP_PST(NOP_MODE); }extern void (*isr_handle_array[50])(void);/* * 使用查询方式读取A/D转换值 * 输入参数: * ch: 模拟信号通道,取值为0~7 */static int ReadAdc(int ch){ // 选择模拟通道,使能预分频功能,设置A/D转换器的时钟 = PCLK/(49+1) ADCCON = PRESCALE_EN | PRSCVL(49) | ADC_INPUT(ch); // 清除位[2],设为普通转换模式 ADCTSC &= ~(1<<2); // 设置位[0]为1,启动A/D转换 ADCCON |= ADC_START; // 当A/D转换真正开始时,位[0]会自动清0 while (ADCCON & ADC_START); // 检测位[15],当它为1时表示转换结束 while (!(ADCCON & ADC_ENDCVT)); // 读取数据 ADCDAT0存放普通adc结果或x坐标, ADCDAT1存放y坐标 return (ADCDAT0 & 0x3ff);}/* * INT_TC的中断服务程序 * 当触摸屏被按下时,进入自动(连续) X/Y轴坐标转换模式; * 当触摸屏被松开时,进入等待中断模式,再次等待INT_TC中断 */static void Isr_Tc(void){ if (ADCDAT0 & 0x8000) { printf("Stylus Up!!\n\r"); wait_down_int(); /* 进入"等待中断模式",等待触摸屏被按下 */ } else { printf("Stylus Down: "); mode_auto_xy(); /* 进入自动(连续) X/Y轴坐标转换模式 */ /* 设置位[0]为1,启动A/D转换 * 注意:ADCDLY为50000,PCLK = 50MHz, * 要经过(1/50MHz)*50000=1ms之后才开始转换X坐标 * 再经过1ms之后才开始转换Y坐标 */ ADCCON |= ADC_START; } // 清INT_TC中断 SUBSRCPND |= BIT_SUB_TC; SRCPND |= BIT_ADC; INTPND |= BIT_ADC;}/* * INT_ADC的中断服务程序 * A/D转换结束时发生此中断 * 先读取X、Y坐标值,再进入等待中断模式 */static void Isr_Adc(void){ // 打印X、Y坐标值 printf("xdata = %4d, ydata = %4d\r\n", (int)(ADCDAT0 & 0x3ff), (int)(ADCDAT1 & 0x3ff)); /* 判断是S3C2410还是S3C2440 */ if ((GSTATUS1 == 0x32410000) || (GSTATUS1 == 0x32410002)) { // S3C2410 wait_down_int(); /* 进入"等待中断模式",等待触摸屏被松开 */ } else { // S3C2440 wait_up_int(); /* 进入"等待中断模式",等待触摸屏被松开 */ } // 清INT_ADC中断 SUBSRCPND |= BIT_SUB_ADC; SRCPND |= BIT_ADC; INTPND |= BIT_ADC;}/* * ADC、触摸屏的中断服务程序 * 对于INT_TC、INT_ADC中断,分别调用它们的处理程序 */void AdcTsIntHandle(void){ if (SUBSRCPND & BIT_SUB_TC) Isr_Tc(); if (SUBSRCPND & BIT_SUB_ADC) Isr_Adc();}/* * 测试触摸屏,打印触点坐标 */void Test_Ts(void){ isr_handle_array[ISR_ADC_OFT] = AdcTsIntHandle; // 设置ADC中断服务程序 INTMSK &= ~BIT_ADC; // 开启ADC总中断 INTSUBMSK &= ~(BIT_SUB_TC); // 开启INT_TC中断,即触摸屏被按下或松开时产生中断 INTSUBMSK &= ~(BIT_SUB_ADC); // 开启INT_ADC中断,即A/D转换结束时产生中断 // 使能预分频功能,设置A/D转换器的时钟 = PCLK/(49+1) ADCCON = PRESCALE_EN | PRSCVL(49); /* 采样延时时间 = (1/3.6864M)*50000 = 13.56ms * 即按下触摸屏后,再过13.56ms才采样 */ ADCDLY = 50000; wait_down_int(); /* 进入"等待中断模式",等待触摸屏被按下 */ printf("Touch the screem to test, press any key to exit\n\r"); getc(); // 屏蔽ADC中断 INTSUBMSK |= BIT_SUB_TC; INTSUBMSK |= BIT_SUB_ADC; INTMSK |= BIT_ADC;}到此,关于"arm9 adc及触摸屏怎么使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
触摸屏
模式
坐标
普通
通道
程序
功能
转换器
学习
服务
接口
时钟
查询
输入
信号
参数
数据
方式
更多
标值
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
学网络安全和黑客6
青岛售后备件管理软件开发
游戏开发比软件开发
优孚网络技术有限公司
软件开发质量标准
重庆智能设备管理软件开发
天津pdu服务器电源品牌
计算机网络技术习题
oracle更改数据库名
淮南网络安全法6月1日
数据库如何自动覆盖
张家口行为管理服务器厂家
虚拟服务器管理面板下载
松江区软件开发服务至上
视频会议软件开发方案
计算机网络技术一级学科
sql数据库安全认证
深度智能网络技术自动答题入口
杭州流田网络技术有限公司
多项目管理软件开发
数据库表中列明寄件人姓名
手机文件夹怎么转换成数据库
苹果服务器是最好的电脑吗
国际网络安全大赛36 0
sybase数据库 软件
互联网科技商业小说
移动光猫服务器设置
公安部研发的网络安全漏洞
干部监督数据库强化换届风气监督
上海中通吉网络技术有限公司待遇