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

📄 tchscr.c

📁 基于uc/osII的2410开发板触摸屏驱动的源代码
💻 C
字号:
#include "../inc/drivers.h"
#include "../inc/lib.h"
#include "inc/gpio.h"
#include "inc/spi.h"

#include <stdio.h>

#define DPRINTF(...)		//printfNULL

#define ADS7843_PIN_PEN		(GPIO_MODE_IN | GPIO_PULLUP_EN | GPIO_F5)

#define ADS7843_PIN_CS		(GPIO_MODE_OUT | GPIO_PULLUP_DIS | GPIO_G12)

#define ADS7843_CTRL_START		0x80
#define ADS7843_GET_X			0x50
#define ADS7843_GET_Y			0x10
#define ADS7843_CTRL_12MODE	0x0
#define ADS7843_CTRL_8MODE	0x8
#define ADS7843_CTRL_SER		0x4
#define ADS7843_CTRL_DFR		0x0
#define ADS7843_CTRL_DISPWD	0x3	// Disable power down
#define ADS7843_CTRL_ENPWD	0x0	// enable power down

#define ADS7843_CMD_X	(ADS7843_CTRL_START|ADS7843_GET_X|ADS7843_CTRL_12MODE|ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)
#define ADS7843_CMD_Y	(ADS7843_CTRL_START|ADS7843_GET_Y|ADS7843_CTRL_12MODE|ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)

#define enable_7843()	write_gpio_bit(ADS7843_PIN_CS, 0)
#define disable_7843()	write_gpio_bit(ADS7843_PIN_CS, 1)

#define ADS7843_SPI_CHANNEL		0
#define GPFCON (*(volatile unsigned *)0x56000050)
#define GPFUP (*(volatile unsigned *)0x56000058)
#define LCDWIDTH 320
#define LCDHEIGHT 240
int TchScr_Xmin=145,TchScr_Xmax=902,
    TchScr_Ymin=142,TchScr_Ymax=902; 
__inline static void set7843toIRQmode(void)
{
	enable_7843();
	SPISend(ADS7843_CMD_X, ADS7843_SPI_CHANNEL);
	SPIRecv(ADS7843_SPI_CHANNEL);
	SPIRecv(ADS7843_SPI_CHANNEL);
	disable_7843();
}

 void TchScr_init()
{
	set_gpio_ctrl(ADS7843_PIN_CS);
	write_gpio_bit(ADS7843_PIN_CS, 1);
	SPI_initIO(ADS7843_SPI_CHANNEL);
	Set_SIO_mode(ADS7843_SPI_CHANNEL, SPCON_SMOD_POLL | 
		SPCON_ENSCK | SPCON_MSTR |SPCON_CPOL_HIGH | 
		SPCON_CPHA_FMTA, 33, 2, NULL, NULL, NULL);
	GPFCON=GPFCON&0xf3ff;
		GPFUP=GPFUP&0xdf;	
	//set7843toIRQmode();
}

#define CLOCK_DELAY()		do{int i; for(i=0; i<10; i++);}while(0)

void TchScr_GetScrXY(int *x, int *y)
{
   

	unsigned int temp;

	

	enable_7843();
    
	SPISend (ADS7843_CMD_X, ADS7843_SPI_CHANNEL);
	temp=SendReadData(0, ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(ADS7843_CMD_X, ADS7843_SPI_CHANNEL)>>3);
	*x=temp;

	temp=SendReadData(0, ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(ADS7843_CMD_X, ADS7843_SPI_CHANNEL) >>3);
	*x+=temp;

	temp=SendReadData(0, ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(ADS7843_CMD_X, ADS7843_SPI_CHANNEL)>>3);
	*x+=temp;

	temp=SendReadData(0,ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(ADS7843_CMD_Y, ADS7843_SPI_CHANNEL)>>3);
	*x+=temp;
	*x>>=4;		//x=x/4/4;	change to 10bit
	
	temp=SendReadData(0, ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(ADS7843_CMD_Y, ADS7843_SPI_CHANNEL) >>3);
	*y=temp;

	temp=SendReadData(0, ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(ADS7843_CMD_Y, ADS7843_SPI_CHANNEL) >>3);
	*y+=temp;
	
	temp=SendReadData(0, ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(ADS7843_CMD_Y, ADS7843_SPI_CHANNEL) >>3);
	*y+=temp;

	temp=SendReadData(0, ADS7843_SPI_CHANNEL);
	temp<<=5;
	temp|= (SendReadData(0, ADS7843_SPI_CHANNEL)>>3);
	*y+=temp;
	*y>>=4;		//y=y/4/4;
	*x=(*x-TchScr_Xmin)*LCDWIDTH/(TchScr_Xmax-TchScr_Xmin);
    *y=(*y-TchScr_Ymin)*LCDHEIGHT/(TchScr_Ymax-TchScr_Ymin);

	disable_7843();


}



//#endif	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -