S 3 C 440抵抗タッチスクリーン駆動設計
3075 ワード
実験:タッチパネルにタッチペンをクリックすると、SecureCRTに接点のX,Y座標が表示されます.
目的:抵抗タッチスクリーンドライバをテストする;
開発ボード:S 3 C 2440
処理ファイルを中断するcのタッチパネル割り込み関数の呼び出しプログラム:
目的:抵抗タッチスクリーンドライバをテストする;
開発ボード:S 3 C 2440
/*
* (C)2015,ZJU
*
* :ts.c
* :
* : : TX2440
*
* :V1.0
* :Frank
* :2015.12.22
*
*/
#define ADCCON (*(volatile unsigned int *)0x58000000) //ADC control register
#define ADCTSC (*(volatile unsigned int *)0x58000004) //ADC Touch Screen Control Register
#define ADCDLY (*(volatile unsigned int *)0x58000008) //ADC Start or interval delay register
#define ADCDATA0 (*(volatile unsigned int *)0x5800000C) //ADC conversion data register
#define ADCDATA1 (*(volatile unsigned int *)0x58000010) //ADC conversion data register
/*interrupt register*/
#define SRCPND (*(volatile unsigned long *)0x4A000000)
#define INTMSK (*(volatile unsigned long *)0x4A000008)
#define INTPND (*(volatile unsigned long *)0x4A000010)
#define INTOFFSET (*(volatile unsigned long *)0x4A000014)
#define SUBSRCPND (*(volatile unsigned long *)0x4A000018)
#define INTSUBMSK (*(volatile unsigned long *)0x4A00001C)
int xdata=0;
int ydata=0;
/*******************************************************************
* :Ts_Init()
* :
* : ADC
* :2015.12.22
*******************************************************************/
void Ts_Init(void)
{
/*1、 AD */
ADCCON = (1 << 14) | (49 << 6); //AD =PCLK/(Val + 1), 1MHz
/*2、 */
INTMSK = ~(1 << 31);
INTSUBMSK = ~(1 << 9);
/*3、 */
ADCTSC = 0xd3;
/*** CPSR 7 I(IRQ disable), start.S ****/
//
__asm__(
"mrs r0, cpsr
"
"bic r0, r0, #0x80
"
"msr cpsr_c, r0
"
:
:
);
}
/*******************************************************************
* :Ts_Handler()
* :
* :
* :2015.12.22
*******************************************************************/
void Ts_Handler(void)
{
/*1、 XY */
ADCTSC = (1 << 2);
ADCCON |= (1 << 0);
/*2、 */
while(!(ADCCON & (1 << 15)));
/*3、 */
xdata = ADCDATA0 & 0x3ff;
ydata = ADCDATA1 & 0x3ff;
/*4、 */
SUBSRCPND |= (1 << 9);
SRCPND = (1 << 31);
INTPND = (1 << 31);
/*5、 */
ADCTSC = 0xd3;
ADCTSC |= (1 << 8);
while(1)
{
if (SUBSRCPND & (1 << 9))
break;
}
/*6、 */
SUBSRCPND |= (1 << 9);
SRCPND = (1 << 31);
INTPND = (1 << 31);
// X,Y
printf("X is %d, Y is %d
", xdata, ydata);
printf("
\r");
/*7、 */
ADCTSC = 0xd3;
}
処理ファイルを中断するcのタッチパネル割り込み関数の呼び出しプログラム:
/*******************************************************************
* :handle_int()
* :
* :
*******************************************************************/
void handle_int()
{
/* */
unsigned long value = *(INTOFFSET);
switch (value)
{
case 31 :
Ts_Handler(); //
break;
default :
break;
}
}