📄 ts.c
字号:
#include "..\header\armperipherals.h"
#include "..\header\FPGA_peripherals.h"
#include "omap30.h"
#include "omap30_arminth.h"
#include "omap1510_inth2.h"
#define BCS 0x04
#define BCLK 0x01
#define BDIN 0x02
#define BBUSY 0x08
#define BOUT 0x10
#define BPENDOWN 0x20
volatile unsigned char *pTouchScreenReg = (unsigned char*)0x08000204;
static void CS_H(void)
{
//*pFPGAOUTRegs &= ~BCS ;
*pTouchScreenReg &= ~BCS ; // EPLD inverts active low signals.
}
static void CS_L(void)
{
// *pFPGAOUTRegs |= BCS ;
*pTouchScreenReg |= BCS ;
}
static void SCLK_L(void)
{
// *pFPGAOUTRegs &= ~BCLK ;
*pTouchScreenReg &= ~BCLK ;
}
static void SCLK_H(void)
{
// *pFPGAOUTRegs |= BCLK ;
*pTouchScreenReg |= BCLK ;
}
static void SDI_L(void)
{
// *pFPGAOUTRegs &= ~BDIN;
*pTouchScreenReg &= ~BDIN ;
}
static void SDI_H(void)
{
// *pFPGAOUTRegs |= BDIN;
*pTouchScreenReg |= BDIN ;
}
static unsigned char BUSY(void)
{
//return *pFPGAINRegs & BBUSY;
//return (*pTouchScreenReg & BBUSY) ;
return (((*pTouchScreenReg & BBUSY) == 0)?1:0) ;
}
static unsigned char DOUT(void)
{
//return (*pFPGAINRegs & BOUT) ? 1 : 0;
return ((*pTouchScreenReg & BOUT) ? 1 : 0) ;
}
void Wait(void)
{
// 200 -> 1.8 Khz
// 20 -> 18.0 Khz
// 10 -> 36.0 Khz
int i;
for(i=0; i<4; i++);
}
static unsigned short SPIWriteRead (unsigned char ucVal)
{
int i ;
unsigned short unVal;
SCLK_L() ;
SDI_L();
CS_L() ; // enable the chip select
Wait() ;
for (i=0; i<8; i++ )
{
if (ucVal & 0x80) SDI_H();
else SDI_L(); // prepare the data on line sdi OR din
Wait() ;
SCLK_H() ; // clk in the data
ucVal = ucVal << 1 ;
Wait() ;
SCLK_L() ;
}
SDI_L();
Wait() ;
while(BUSY());
unVal = 0;
Wait() ;
Wait() ;
Wait() ;
Wait() ;
for (i=0 ; i<16 ; i++ )
{
SCLK_L() ;
Wait() ;
if(i<12)
{
unVal <<= 1 ;
unVal |= DOUT();
}
SCLK_H() ;
Wait() ;
}
SCLK_L() ;
CS_H() ; // disable the chip select
return unVal;
}
static void SPIWrite (unsigned char ucVal)
{
int i ;
SCLK_L() ;
CS_L() ; // enable the chip select
Wait() ;
for (i=0 ; i<8 ; i++ )
{
if (ucVal & 0x80) SDI_H();
else SDI_L(); // prepare the data on line sdi OR din
Wait() ;
SCLK_H() ; // clk in the data
ucVal = ucVal << 1 ;
Wait() ;
SCLK_L() ;
}
CS_H() ; // disable the chip select
}
#define S 0x80
#define A2 0x40
#define A1 0x20
#define A0 0x10
#define MODE 0x08
#define SER 0x04
#define PD1 0x02
#define PD0 0x01
#define Ypos ( S | A0 | PD1 | PD0 )
//#define Ypos ( S | A0 )
#define Z1pos ( S | A1 | A0 | PD1 | PD0 )
#define Z2pos ( S | A2 | PD1 | PD0 )
#define Xpos ( S | A2 | A0 | PD1 | PD0 )
//#define Xpos ( S | A2 | A0 )
#define YposPd ( S | A0 )
#define Vbat ( S | A1 | PD1 | PD0 | SER )
#define AuxIn ( S | A2 | A1 | PD1 | PD0 | SER )
#define Refoff ( S | PD0)
unsigned short GetPenPos (short *pX, short *pY)
{
short x, y;
unsigned short bPenDown ;
//bPenDown = ((*pTouchScreenReg & BPENDOWN) ? 1 : 0) ;
//CS_L () ;
Wait () ;
Wait () ;
x = SPIWriteRead (Xpos) ;
//x = SPIWriteRead (Xpos) ;
//x = SPIWriteRead (Xpos) ;
//x = SPIWriteRead (Xpos) ;
//x = SPIWriteRead (Xpos) ;
//x = SPIWriteRead (Xpos) ;
Wait () ;
Wait () ;
y = SPIWriteRead (Ypos) ;
//y = SPIWriteRead (Ypos) ;
//y = SPIWriteRead (Ypos) ;
//y = SPIWriteRead (Ypos) ;
//y = SPIWriteRead (Ypos) ;
//y = SPIWriteRead (Ypos) ;
Wait () ;
Wait () ;
SPIWrite(YposPd);
//SPIWrite(YposPd);
//SPIWrite(YposPd);
//SPIWrite(YposPd);
//SPIWrite(YposPd);
//CS_H () ; // this must be here for BPENDOWN below to work???
Wait () ;
bPenDown = ((*pTouchScreenReg & BPENDOWN) ? 1 : 0) ;
//FilterTouchScreen (bPenDown, &x, &y) ;
*pX = x;
*pY = y;
return bPenDown ;
}
#pragma SWI_ALIAS(SetIRQ, 0);
extern void SetIRQ(unsigned int OnOff);
extern unsigned int gpio_count ;
extern unsigned short *fpga_intmask ;
extern int idetest_flag ;
void touchscreentest()
{
if(idetest_flag == 0){
INTH2_InitLevel(GPIO_INT,INTH_IRQ,INTH_HIGHEST_PRIORITY,INTH_LOW_LEVEL_SENSITIVE);
INTH2_EnableOneIT(GPIO_INT,INTH_IRQ);
/* Set up GPIO 13 */
if (SetupGPIO(13, 1, 1, LOW2HIGH_INTERRUPT))
return ;
}
*((unsigned long *)0xfffecb04) = 0xffffbfff;
*fpga_intmask |= 0x0010;
SetIRQ(1);
while(gpio_count < 10);
*((unsigned short *)0x08000008) &=(0x00ef);
return ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -