با سلام. من با ATXMega128a1 و ای سی ADS7843 میخوام یه تاچ 128x64 رو راه اندازی کنم.
یه مشکل بزرگ پیش اومده که با یک بار لمس تاچ پایه اینتراپت بجای اینکه یک بار تحریک شود ، پشت سر هم اینتراپت میدهد.
این هم کد :
یه مشکل بزرگ پیش اومده که با یک بار لمس تاچ پایه اینتراپت بجای اینکه یک بار تحریک شود ، پشت سر هم اینتراپت میدهد.
این هم کد :
کد:
//------------------------------------------------------------------------------
void Init_SPIF()
{
PORTF_DIRSET = _BV(5) | _BV(7) | _BV(4)| _BV(2)| _BV(1);
PORTF.PIN6CTRL = PORT_OPC_WIREDANDPULL_gc;
PORTF_OUTSET = _BV(5) | _BV(4) | _BV(2)| _BV(1);
PORTF_OUTCLR = _BV(7) | _BV(6);
SPIF.CTRL = 0x53;
}
//------------------------------------------------------------------------------
void InitTouchInterrupt()
{
PORTF.OUTCLR=_BV(0);
PORTF.DIRCLR=_BV(0);
PORTF.PIN0CTRL=0;
PORTF.INTCTRL=(PORTF.INTCTRL & (~(PORT_INT1LVL_gm | PORT_INT1LVL_gm))) |PORT_INT1LVL_OFF_gc | PORT_INT0LVL_HI_gc;
PORTF.INT0MASK=0x01;
PORTF.INT1MASK=0x00;
}
//------------------------------------------------------------------------------
byte SPIF_TxRx(byte d)
{
SPIF_DATA = d;
while(!(SPIF_STATUS & _BV(7)));
return SPIF_DATA;
}
//------------------------------------------------------------------------------
bool Read_XY(uint *x,uint *y)
{
byte spi_buf[10];
PORTF_OUTCLR = _BV(2);
spi_buf[0] = SPIF_TxRx(0x90);
spi_buf[1] = SPIF_TxRx(0);
spi_buf[2] = SPIF_TxRx(0xD0);
spi_buf[3] = SPIF_TxRx(0);
spi_buf[4] = SPIF_TxRx(0);
PORTF_OUTSET = _BV(2);
*y = (spi_buf[1] << 5);
*y |= (spi_buf[2] >> 3);
*x = (spi_buf[3] << 5);
*x |= (spi_buf[4] >> 3);
}







دیدگاه