⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ads7843.cpp

📁 其于ARM的USB操作,控制芯片为CH375实现操作.以及其他功能.包括AC,串口操作.
💻 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 + -