历史上的今天
今天是:2024年09月30日(星期一)
2021年09月30日 | S3C2440裸机------触摸屏_利用ADC读取触摸屏坐标
2021-09-30 来源:eefocus
前面我们在按下触摸屏时只是打印调试信息,现在我们再按下的中断处理函数里面增加ADC的配置代码,当我们按下后利用ADC读取触摸屏的坐标。
#include "../s3c2440_soc.h"
#define ADC_INT_BIT (10)
#define TC_INT_BIT (9)
#define INT_ADC_TC (31)
/* ADCTSC's bits */
#define WAIT_PEN_DOWN (0<<8)
#define WAIT_PEN_UP (1<<8)
#define YM_ENABLE (1<<7)
#define YM_DISABLE (0<<7)
#define YP_ENABLE (0<<6)
#define YP_DISABLE (1<<6)
#define XM_ENABLE (1<<5)
#define XM_DISABLE (0<<5)
#define XP_ENABLE (0<<4)
#define XP_DISABLE (1<<4)
#define PULLUP_ENABLE (0<<3)
#define PULLUP_DISABLE (1<<3)
#define AUTO_PST (1<<2)
#define WAIT_INT_MODE (3)
#define NO_OPR_MODE (0)
void enter_wait_pen_down_mode(void)
{
ADCTSC = WAIT_PEN_DOWN | PULLUP_ENABLE | YM_ENABLE | YP_DISABLE | XP_DISABLE | XM_DISABLE | WAIT_INT_MODE;
}
void enter_wait_pen_up_mode(void)
{
ADCTSC = WAIT_PEN_UP | PULLUP_ENABLE | YM_ENABLE | YP_DISABLE | XP_DISABLE | XM_DISABLE | WAIT_INT_MODE;
}
void enter_auto_measure_mode(void)
{
ADCTSC = AUTO_PST | NO_OPR_MODE;
}
void Isr_Tc(void)
{
//printf("ADCUPDN = 0x%x, ADCDAT0 = 0x%x, ADCDAT1 = 0x%x, ADCTSC = 0x%xnr", ADCUPDN, ADCDAT0, ADCDAT1, ADCTSC);
if (ADCDAT0 & (1<<15))
{
//printf("pen upnr");
enter_wait_pen_down_mode();
}
else
{
//printf("pen downnr");
/* 进入"自动测量"模式 */
enter_auto_measure_mode();
/* 启动ADC */
ADCCON |= (1<<0);
}
}
void Isr_Adc(void)
{
int x = ADCDAT0;
int y = ADCDAT1;
if (!(x & (1<<15))) /* 如果仍然按下才打印 */
{
x &= 0x3ff;
y &= 0x3ff;
printf("x = %08d, y = %08dnr", x, y);
}
enter_wait_pen_up_mode();
}
void AdcTsIntHandle(int irq)
{
if (SUBSRCPND & (1< if (SUBSRCPND & (1< SUBSRCPND = (1< void adc_ts_int_init(void) { SUBSRCPND = (1< /* 注册中断处理函数 */ register_irq(31, AdcTsIntHandle); /* 使能中断 */ INTSUBMSK &= ~((1< void adc_ts_reg_init(void) { /* [15] : ECFLG, 1 = End of A/D conversion * [14] : PRSCEN, 1 = A/D converter prescaler enable * [13:6]: PRSCVL, adc clk = PCLK / (PRSCVL + 1) * [5:3] : SEL_MUX, 000 = AIN 0 * [2] : STDBM * [0] : 1 = A/D conversion starts and this bit is cleared after the startup. */ ADCCON = (1<<14) | (49<<6) | (0<<3); /* 按下触摸屏, 延时一会再发出TC中断 * 延时时间 = ADCDLY * 晶振周期 = ADCDLY * 1 / 12000000 = 5ms */ ADCDLY = 60000; } void touchscreen_init(void) { /* 设置触摸屏接口:寄存器 */ adc_ts_reg_init(); printf("ADCUPDN = 0x%x, SUBSRCPND = 0x%x, SRCPND = 0x%xnr", ADCUPDN, SUBSRCPND, SRCPND); /* 设置中断 */ adc_ts_int_init(); /* 让触摸屏控制器进入"等待中断模式" */ enter_wait_pen_down_mode(); }
史海拾趣
|
安全、舒适、无污染、经济性一直是汽车工业和用户追求的目标。实现这些目标的关键在于汽车的电子化和智能化,先决条件则是各种信息的及时获取,这势必要求在汽车中大量采用各种传感器。传统的传感器往往体积和重量大,成本高,它们在汽车的应用受到 ...… 查看全部问答> |
|
我用mapi发送短信成功后,短信保存在“已发送信息” 这时候我选择“已发送信息”中某条信息,选择回复的时候, 显示的回复框变成邮件回复的形式了,包括(密件抄送,抄送,编辑发件人的邮件, 原始邮件等信息) 我不知道为什么原来的sms变成了em ...… 查看全部问答> |
|
一般智能手机里面的邮件客户端在设置账户时候,需要输入服务器地址,我自己架了个服务器,然后想做一个手机的登录程序,只需要输入邮件的用户名和密码,不需要配置服务器地址了,大家有什么好的思路啊?请给我点建议… 查看全部问答> |
|
大家好!我们一直在用pxa255在wince操作系统下接TFT lcd使用,但是想使用oled,不知是否好做改动?改动的难度大吗?望做过这方面工作的朋友给与指导。谢谢!… 查看全部问答> |
|
发现一个新的,能自动生成设备驱动的软件RapidDriver . 我已经用了,可以生成支持PDIUSBD12 USB芯片的驱动,这个软件自己介绍支持VISTA,但我没有试验,最要重要的是这个软件需要注册,否则有时间限制 http://www.entechtaiwan.net/dev/rapid/index.shtm 上面是介绍页… 查看全部问答> |




