历史上的今天
今天是:2024年10月08日(星期二)
2021年10月08日 | S3C2440裸机------触摸屏_按下松开检测
2021-10-08 来源:eefocus
1.整体流程图

上图中的AdcTsIntHandle是总的中断,里面会进行判断,如果是ADC中断,则调用ADC中断函数,如果是触摸屏中断,那么就调用触摸屏中断函数。
2.touchscreen.c
#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 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_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); ADCDLY = 0xff; } 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(); }
史海拾趣
|
各位哥哥哥姐这个程序第一次启动定时器可以正常运行,第二次启动定时器就不中断了,小弟初学单片机,实在是找不出原因了。 ORG 0000H LJMP START MORG 000BH LJMP TIMER1 ;定时器1的中断处理 ORG 30H START: &nbs ...… 查看全部问答> |
|
UART是很多实验的基础,可以作为其他实验运行的验证。在做LPC1114 UART实验时,发现LPCXpresso的例程只有发送函数,而且是发送字符串的,所以本人完善了一些,添加了一个发送字符串的函数UARTSendByte(),一个接受字符的函数UARTReceiveByte(),一 ...… 查看全部问答> |
|
下述代码用VC能编译通过,用ads1.2编译器则不行,错误提示:Serious error: C2432E: non-constant initialiser #define BYTE unsigned char #define WORD unsigned short int #define DWORD unsigned int #define SDWORD signed int #define SBYTE signed char #define SWORD signed short int static SWORD neg_pow2[17]={0,-1,-3,-7,-15,-31,-63,-12 ...… 查看全部问答> |
|
请教一个EVC中动态改变静态文本控件颜色的问题; 现在正在开发一个基于WinCE.net4.2平台的应用程序,用EVC开发一个MFC应用程序。 碰到的问题是:我在对话框中依次排列了四个静态文本控件,ID分别为IDC_STATIC1,IDC_STATIC2,IDC_STA ...… 查看全部问答> |
|
我的产品是上电后,DSP程序一次性从flash搬到sram中,大部分时间是正常的,但是有时候会出现一部分功能好的,另一部分功能完全不对,重新上电后问题就有可能不复现了。 拜托各位帮我想想会是什么方面的问题呢? 有没有可能是sram中的程序在加载时 ...… 查看全部问答> |
|
我的单通道多次转换AD,已经有软件的平滑滤波,但是检测大于1V的信号是显示低于1V接近1V 检测200mV的信号显示0.956~0.542之间不断波动,总之是与实际值相差较大,检测2V以上信号时 ...… 查看全部问答> |
|
亲爱的朋友们~~小编又来献礼啦:carnation:~~今天小编为大家带来的是《数字电源UCD92xx 输出电压波形的优化》。基于UCD92xx 与UCD7xxx 的非隔离数字电源,其输出电压在软启动阶段经常出现“台阶”现象,波形不平滑,尤其是输出电压设定为较低值时, ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 03:26 编辑 新人报道!!向大神求一个程序,关于倒立摆的。就是自己手动把单摆放垂直,然后怎么让它保持倒立,稳定住!我用的是二相步进电机~~ … 查看全部问答> |




