📄 ads7843.cpp
字号:
#include "ads7843.h"
extern OS_EVENT *UART0_SEM ; //UART 0信号量
extern OS_EVENT *Sio_Mbox;
/********************************************************
//功能描述:CAds7843构造函数
//函数入口:无
//函数出口:无
//操 作:无
//版 本:V1.0
//作 者:周登勇
//时 间:2004.10.25
*********************************************************/
CAds7843::CAds7843()
{
bSioOpen=FALSE;
}
/********************************************************
//功能描述:CAds7843析构函数
//函数入口:无
//函数出口:无
//操 作:无
//版 本:V1.0
//作 者:周登勇
//时 间:2004.10.25
*********************************************************/
CAds7843::~CAds7843()
{
}
/********************************************************
//功能描述:初始化SIO
//函数入口:无
//函数出口:无
//操 作:设置SIO工作方式,工作波特率,
//版 本:V1.0
//作 者:周登勇
//时 间:2004.10.25
*********************************************************/
BOOL CAds7843::InitSio( )
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
U32 temp=rSIOCON;
temp &= ~(0xff);
temp |= 0x21;
rSIOCON = temp;
Ctrl = temp;
temp = rSBRDR;
temp &= ~(0xfff);
temp |= 0x5ff;
rSBRDR = temp;
bSioOpen = TRUE;
//开中断
OS_ENTER_CRITICAL();
rINTMSK &= ~(BIT_SIO);
OS_EXIT_CRITICAL();
return TRUE;
}
/********************************************************
//功能描述:选中ads7843
//函数入口:无
//函数出口:无
//操 作:输出ADS7843片选信号为低
//版 本:V1.0
//作 者:周登勇
//时 间:2004.10.25
*********************************************************/
void CAds7843::Select()
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAL();
rPDATE &= ~CS_ADS7843;
OS_EXIT_CRITICAL();
}
/********************************************************
//功能描述:取消选中ads7843
//函数入口:无
//函数出口:无
//操 作:输出ADS7843片选信号为高
//版 本:V1.0
//作 者:周登勇
//时 间:2004.10.25
*********************************************************/
void CAds7843::DeSelect()
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAL();
rPDATE |= CS_ADS7843;
OS_EXIT_CRITICAL();
}
/********************************************************
//功能描述:使能ADS7843中断检测
//函数入口:无
//函数出口:无
//操 作:输出ADS7843中断检测信号为高
//版 本:V1.0
//作 者:周登勇
//时 间:2004.10.25
//
//注 意:对AD采样完成后必须调用此函数
*********************************************************/
void CAds7843::SetPenNomal()
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAL();
rPDATC |= ADS7843_PENIRQ;
OS_EXIT_CRITICAL();
}
/********************************************************
//功能描述:禁止ADS7843中断检测
//函数入口:无
//函数出口:无
//操 作:输出ADS7843中断检测信号为低
//版 本:V1.0
//作 者:周登勇
//时 间:2004.10.25
//
//注 意:对AD进行采样前必须先调用此函数
*********************************************************/
void CAds7843::SetPenDisable()
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAL();
rPDATC &= ~( ADS7843_PENIRQ );
OS_EXIT_CRITICAL();
}
/********************************************************
//功能描述:ADS7843服务函数
//函数入口:无
//函数出口:无
//操 作:对ADS7843进行操作,读出触摸屏位置
//版 本:V1.0
//作 者:周登勇
//时 间:2005.01.15 11:42
*********************************************************/
void CAds7843::Server()
{
switch( iStep )
{
case 0://启动读取数据
rSIODAT = 0x00;
rSIOCON |= (1<<3);
iStep ++;
break;
case 1:
cAdXHigh = rSIODAT;//读取数据x高字节
rSIODAT = 0x00;
rSIOCON |= (1<<3);
iStep ++;
break;
case 2:
cAdXLow = rSIODAT;//读取X低字节
rSIODAT = 0x90;//选择Y通道
rSIOCON |= (1<<3);
iStep ++;
break;
case 3://启动读数据
rSIODAT = 0x00;
rSIOCON |= (1<<3);
iStep ++;
break;
case 4:
cAdYHigh = rSIODAT;
rSIODAT = 0X00;
rSIOCON |= (1<<3);
iStep ++;
break;
case 5:
cAdYLow = rSIODAT;
x = ( cAdXHigh * 32 ) + ( cAdXLow >> 3 );
y = ( cAdYHigh * 32 ) + ( cAdYLow >> 3 );
bADOK = TRUE;
DeSelect();
OSMboxPost( Sio_Mbox, (void*)1 );
iStep ++;
break;
default:
DeSelect();
OSMboxPost( Sio_Mbox, (void*)1 );
break;
}
/*
U8 err;
void* msg;
U8 temp1;
U8 temp2;
rSIOCON = 0X21;
SetPenDisable();//取消中断检测
Select();//选中
rSIODAT = 0x90;
rSIOCON |= (1<<3);
msg = OSMboxPend(Sio_Mbox, 0, &err);
rSIODAT = 0x00;
rSIOCON |= (1<<3);
msg = OSMboxPend(Sio_Mbox, 0, &err);
temp1=rSIODAT;
rSIODAT = 0x00;
rSIOCON |= (1<<3);
msg = OSMboxPend(Sio_Mbox, 0, &err);
temp2=rSIODAT;
x = temp1*256+temp2;
x >>= 4;
rSIODAT = 0xd0;
rSIOCON |= (1<<3);
msg = OSMboxPend(Sio_Mbox, 0, &err);
rSIODAT = 0x00;
rSIOCON |= (1<<3);
msg = OSMboxPend(Sio_Mbox, 0, &err);
temp1=rSIODAT;
rSIODAT = 0x00;
rSIOCON |= (1<<3);
msg = OSMboxPend(Sio_Mbox, 0, &err);
temp2=rSIODAT;
y = temp1*256+temp2;
y >>= 4;
DeSelect();
*/
}
/********************************************************
//功能描述:返回横向座标
//函数入口:无
//函数出口:横向座标
//操 作:返回横向座标
//版 本:V1.0
//作 者:周登勇
//时 间:2005.01.15 14:05
*********************************************************/
S32 CAds7843::GetX()
{
return x;
}
/********************************************************
//功能描述:返回纵向座标
//函数入口:无
//函数出口:纵向座标
//操 作:返回纵向座标
//版 本:V1.0
//作 者:周登勇
//时 间:2005.01.15 14:06
*********************************************************/
S32 CAds7843::GetY()
{
return y;
}
/********************************************************
//功能描述:启动AD转换
//函数入口:无
//函数出口:无
//操 作:启动AD转换,
//版 本:V1.0
//作 者:周登勇
//时 间:2006.04.20 21:09
*********************************************************/
void CAds7843::Start()
{
iStep = 0;
bADOK = FALSE;
rSIOCON = 0X21;
SetPenDisable();//取消中断检测
Select();//选中
//选择通道
rSIODAT = 0xd0;
rSIOCON |= (1<<3);
}
BOOL CAds7843::GetAds( S32& ix, S32& iy )
{
if( bADOK )
{
ix = x;
iy = y;
}
return bADOK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -