#define LCD_PIXEL_WIDTH ((uint16_t)320)
#define LCD_PIXEL_HEIGHT ((uint16_t)240)
.....
#define TS_SWAP_NONE 0x00
#define TS_SWAP_X 0x01
#define TS_SWAP_Y 0x02
#define TS_SWAP_XY 0x04
.....
typedef enum
{
TS_OK = 0x00,
TS_ERROR = 0x01,
TS_TIMEOUT = 0x02
}TS_StatusTypeDef;
.....
typedef struct
{
uint16_t TouchDetected;
uint16_t x;
uint16_t y;
}TS_StateTypeDef;
.....
static uint16_t ts_x_boundary, ts_y_boundary;
static uint8_t ts_orientation;
.....
// xSize: Maximum X size of the TS area on LCD ==>> LCD_PIXEL_WIDTH
// ySize: Maximum Y size of the TS area on LCD ==>> LCD_PIXEL_HEIGHT
void TS_Init(uint16_t xSize, uint16_t ySize)
{
/* Initialize x and y positions boundaries */
ts_x_boundary = xSize;
ts_y_boundary = ySize;
ts_orientation = TS_SWAP_XY;
/* Initialize the LL TS Driver */
TSC_Init();
TSC_Start();
}
.....
uint8_t TS_GetState(TS_StateTypeDef *TS_State)
{
static uint32_t _x = 0, _y = 0;
uint16_t xDiff, yDiff , x , y;
uint16_t swap;
TS_State->TouchDetected = TS_DetectTouch();
if(TS_State->TouchDetected)
{
TS_GetXY(&x, &y);
if(ts_orientation & TS_SWAP_X)
{
x = 4096 - x;
}
if(ts_orientation & TS_SWAP_Y)
{
y = 4096 - y;
}
if(ts_orientation & TS_SWAP_XY)
{
swap = y;
y = x;
x = swap;
}
xDiff = x > _x? (x - _x): (_x - x);
yDiff = y > _y? (y - _y): (_y - y);
if (xDiff + yDiff > 5)
{
_x = x;
_y = y;
}
TS_State->x = (ts_x_boundary * _x) >> 12;
TS_State->y = (ts_y_boundary * _y) >> 12;
}
return TS_OK;
}
.....
شرمنده من هر چی کد می زنم این پایه pen_irq اینتراپت نمیده
از دیتاشیتش هم چیز خاصی متوجه نشدم
من چجوری این پایه اینتراپتشو فعال کنم :(
ممنون میشم کمکم کنید
کارم گیره