با سلام. من با 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); }
دیدگاه