S3C2440对于触摸屏的相关interface有以下几个模式:
1.普通转换模式,手册是这么说的:most likely used for General Purpose ADC Conversion.(不了解这个,所以用原文)
2.分开X/Y转换模式,就是分开来转换X位置和Y位置。X位置的信息会保存在ADCDAT0的低10位,而Y位置信息则保存在ADCDAT1的低10位。
3.自动X/Y转换模式,就是会把和X和Y一起转换,然后X,Y位置信息保存跟上面一样,也是在ADCDAT0,ADCDAT1的低10位。(我想一般会用这个模式)
4.等待中断模式,也就是等待触摸屏的中断,ADCTSC=0xd3就是等待笔尖放下时产生中断,而ADC=0xd3|(1<<8)就是笔尖抬起时产生中断。
参考手册弄出来也不难,只是提醒一下ADCUPDN这个寄存器是会标记当前的中断是笔尖放下还是抬起的。只是读完之后就要记得把它清0,在这个地方卡了很久,后来想到手册既然没说这个寄存器会自动清0,那就自己手动帮他清0吧。果然是这样。
下面列出关键代码,使用自动X/Y转换模式:
void __irq lhg_tsINT(void) //中断函数
{
rINTSUBMSK |= ((U32)0x1<<9); //关闭中断服务
if ( rADCUPDN&(U32)0x01 ) //现在是down
{
ts=0; //这是一个全局变量,调试时会来登记一下触摸屏是否转换了新的XY坐标
rADCUPDN=0;
uart_print_str("/r/ndown");//自己做的串口打印函数
//产生X、Y坐标
rADCTSC = (1<<3)|(1<<2); //上拉电阻无效,自动XY坐标转换模式开启
rADCCON|=0x1; //开始A/D转换
while( rADCCON & 0x1 ); //等待AD转换开始
//rADCDLY = 40000; //这里比较郁闷,网上有人用这个值,据手册里说低15位有效,www.linuxidc.com默认值是0xff,屏蔽掉,不删免得以后忘记有这个寄存器。
while( !(rADCCON & ((U32)0x1<<15)) ); //等待AD转换结束
x=(rADCDAT0&0x3ff); //保存x位置
y=(rADCDAT1&0x3ff);//保存y位置
//等待笔触抬起
//rADCCON=(1<<14)+(9<<6); //设置A/D预分频
rADCTSC =0xd3|(1<<8); //再次设置等待中断模式,这一次是判断触笔的抬起
}
if ( (rADCUPDN>>1)&(U32)0x01 ) //现在是up
{
rADCUPDN=0;
uart_print_str("/r/nup");
ts=1;//标志有xy转换
rADCCON=(1<<14)+(9<<6); //设置A/D预分频
rADCTSC=0xd3; //设置触摸屏为等待中断模式。
}
rSRCPND |= (U32)0x1<<31; //清中断标志
rSUBSRCPND |=(U32)0x01<<9;
rINTPND |= (U32)0x1<<31;
rINTSUBMSK &= ~((U32)0x1<<9); //打开中断服务
}
void init_lhg_ts(void) //初始化触摸屏
{
uart_print_str("/r/nTouchScreen init");
//确定中断入口地址
pISR_ADC = (U32)lhg_tsINT;
rADCCON=(1<<14)+(9<<6); //设置A/D预分频
rADCTSC=0xd3; //设置触摸屏为等待中断模式。
//清中断标志
rSRCPND |= (U32)0x1<<31;
rSUBSRCPND |= (U32)0x01<<9;
rINTPND |= (U32)0x1<<31;
rINTSUBMSK &= ~((U32)0x1<<9); //打开中断服务
rINTMSK &= ~((U32)0x1<<31); //打开中断屏蔽
}
关键字:S3C2440 裸奔触摸屏
引用地址:
S3C2440裸奔触摸屏
推荐阅读最新更新时间:2024-03-16 14:31
S3C2440之简易播放器设计(利用DMA与IIS通信)
利用前一篇文章讲解的IIS知识,只是不是利用轮询,而是利用DMA控制器,让数据在内存和IIS的发送FIFO之间传送。这样在音乐播放过程中,进行暂停,静音,播放,音量增减都不会使音乐产生卡顿的感觉。 注意DMA的请求是由发送FIFO自动发起的。 可以设置DMAMSKTRIG的STOP位停止DMA,但是真正的停止需要参考ON_OFF位。ON_OFF位当为非自动重载,且CURR_TC为0,该位自动为OFF。STOP位置位,该位也置为OFF。所以需要注意,一次DMA传输结束,假设开启了DMA中断,那么再DMA中断需要再次打开DMA,因为CURR_TC=0使其停止了。 当CURR_TC=0,且DMA ACK=1的话,TC的数值又
[单片机]
S3C2440裸机------触摸屏_校准原理
所谓校准就是找到一个公式把电压值转换为坐标值,我们的触摸屏覆盖在LCD上面,当我们得到出点的电压值之后可以通过比例公式得到LCD的坐标。 但是实际我们不会选择边界点,因为边界点不方便点,所以我们都是从中间选择某个点进行计算。 由于液晶屏的水平方向和垂直方向存在一些偏差,因此我们都是水平方向选择2个点,垂直方向选择两个点。
[单片机]
S3C2440芯片时钟(2)
看手册 手册上的公式用问题 分频比 某些部分频率过高会导致设备不能正常工作 所以需要为了满足不同的需要某些总线上的时钟需要降频 时钟设置例子
[单片机]
【mini2440】S3C2440的基本IO
1. 原理图与实物图对照图 https://download.csdn.net/download/Kshine2017/73732833 2.详细介绍 2.1 Led电路 普通控制代码: //GPBCON 0x56000010 R/W 配置端口B的引脚 #define GPBCON (*(unsigned int *)0x56000010) //GPBDAT 0x56000014 R/W 端口B的数据寄存器 #define GPBDAT (*(unsigned int *)0x56000014) void delay(unsigned int time) { int i,j; for(i=0;i ti
[单片机]
s3c2440的系统时钟
下面内容是《ARM处理器裸机开发实战—机制而非策略》里的,以s3c2440开发板为例 系统时钟是整个电路的心脏。 总体来说,与s3c2440处理器有关的时钟主要有4种:Fin、FCLK、HCLK和PCLK。 Fin: 外部输入的晶振频率 FCLK: 主要用于CPU核 HCLK: 主要用在与AHB总线互连的设备上(存储器控制器、lcd控制器、dma) PCLK: 主要用在与APB总线互连的低速设备上(uart adc 定时器) S3c2440系统时钟概述 S3c2440处理器的系统时钟分为两部分,外部有时钟输入引脚,内部有2个锁相环将外部输入时钟倍频到处理器工作所需要的时钟。锁相环相当于一个时钟变换电
[单片机]
在VIM中实现对嵌入式软件的调试
引言 GNU免费提供了一整套工具链,为嵌入式Linux程序的开发和调试提供了完整的支持。其强大的gdb调试工具可以方便地对嵌入式平台上的程序进行跟踪调试;而Linux下强悍的VIM编辑器,不仅可以方便地调用make文件对代码进行编译,而且通过脚本的配置还可轻松地成为高效的代码编辑环境。流传着这样一种说法,“世界上的程序员分三种,一种使用Emacs,一种使用VIM,剩余的是其他。”不去辩论这句话的对与错,单纯从字面意义上来理解,也足见VIM的魅力了。因此,在VIM中实现对嵌入式软件的调试,我们便得到了一个高效、稳定的嵌入式Linux的开发环境。 1 gdb对嵌入式软件的调试模式 许多非Linux的嵌入式系统已经
[单片机]
s3c2440裸机-异常中断(二. und未定义指令异常)
1._und(未定义指令异常)介绍 我们之前分析过5种异常,那么如何进入未定义指令异常,当然是cpu读取指令发生异常,出现了指令解析异常。 我们先来看下当cpu解析到什么样的指令才会触发未定义指令异常呢? 从上面的arm指令格式中可知,只要指令码属于划线的格式,就属于未定义指令异常。 2.汇编向c函数传参 我们知道汇编给C语言函数传参是通过r0,r1,...通过堆栈的方式去传递的参数,比如r0=1, r1=2;那么在被调用的c函数中argv0就是r0, argv1就是r1...,那么我们如果通过汇编给C函数传递字符串呢? 我们可以通过这样声明und_string为一个字符串: und_string: .string unde
[单片机]
11-S3C2440驱动学习(八)嵌入式linux-块设备驱动程序
一、回顾字符设备驱动 主要分为简单字符设备驱动程序,和复杂字符设备驱动 1、简单字符设备驱动 对于简单的字符设备驱动,不需要采用分离分层的思想,主要包括以下几个部分。 2、复杂字符设备驱动 对于复杂的字符设备驱动,采用分离分层的思想,内核中已经实现好了核心层部分,我们只需要实现与硬件相关的部分就可以,最后形成一个总体。这样就是一个通用的字符驱动框架。如LCD驱动、V4L2驱动,当然有时候我们可以选择不采用分离分层的思想,按简单驱动程序的框架来实现一个驱动。 3、字符设备驱动常用技巧 (1) 查询方式 (2) 休眠唤醒,APP-read drv_read (3) poll机制 (4) 异步通知发信号
[单片机]