7272#define TOUCHSIZE (60u)
7373#define MAIN_TOUCH_BOARD (0u)
7474#define AUX_TOUCH_BOARD (1u)
75- #define SPI_TIMEOUT (100 )
75+ #define SPI_TIMEOUT (1000 )
7676#define SPI_BUFFERSIZE (128u)
7777
7878/*******************************************************************************
@@ -100,6 +100,7 @@ typedef struct touchBuffer
100100struct touchBuffer touch1Data ; // Main board touch data
101101struct touchBuffer touch2Data ; // Auxillary board touch data
102102
103+
103104/* Timing variables */
104105int start , end ; // timing variable
105106float slot_scan_time = 0 ;
@@ -118,7 +119,7 @@ uint32_t bytes_transferred;
118119uint32_t spi_main_count ;
119120uint32_t spi_aux_count ;
120121uint16_t txBuffer [SPI_BUFFERSIZE ];
121-
122+ uint16_t rxBuffer [ SPI_BUFFERSIZE ];
122123/* Define SPI Mode
123124 0 = Main board
124125 1 = Aux Board
@@ -593,32 +594,24 @@ static void spi_aux_isr(void)
593594*******************************************************************************/
594595static void getTouch (void )
595596{
596- // Create empty buffers for SPI (we will use the same structure as the I2C buffers)
597- cy_en_scb_spi_status_t status ;
598- uint16_t rxBuffer [SPI_BUFFERSIZE ];
599-
600- for (int i = 0 ; i < TOUCHSIZE ; i ++ )
601- {
602- rxBuffer [i ] = 0 ;
603- rxBuffer [i + 60 ] = 0 ;
604- }
605-
606- /* Save touch data to buffer */
607- int i = 0 ;
608-
609- /* Master: start a transfer. Slave: prepare for a transfer. */
610- status = Cy_SCB_SPI_Transfer (CYBSP_SPI_AUX_HW , NULL , (uint8_t * )& rxBuffer , sizeof (rxBuffer ), & spi_aux_Context );
611-
612- if (status == CY_SCB_SPI_SUCCESS ) {
613- while (0UL != (CY_SCB_SPI_TRANSFER_ACTIVE & Cy_SCB_SPI_GetTransferStatus (CYBSP_SPI_AUX_HW , & spi_aux_Context )))
614- {
615- }
616-
597+ if (0UL == (CY_SCB_SPI_TRANSFER_ACTIVE & Cy_SCB_SPI_GetTransferStatus (CYBSP_SPI_AUX_HW , & spi_aux_Context ))) {
598+ /* Abort any ongoing transaction */
599+ Cy_SCB_SPI_AbortTransfer (CYBSP_SPI_AUX_HW , & spi_aux_Context );
600+
617601 /* Save data to touch buffer*/
618- for (i = 0 ; i < TOUCHSIZE ; i ++ )
602+ for (int i = 0 ; i < TOUCHSIZE ; i ++ )
619603 {
620604 touch2Data .u16_signal [i ] = rxBuffer [i ];
621605 }
606+
607+ /* empty receive buffer */
608+ for (int i = 0 ; i < TOUCHSIZE ; i ++ )
609+ {
610+ rxBuffer [i ] = 0 ;
611+ rxBuffer [i + 60 ] = 0 ;
612+ }
613+ /* Master: start a transfer. Slave: prepare for a transfer. */
614+ Cy_SCB_SPI_Transfer (CYBSP_SPI_AUX_HW , NULL , (uint8_t * )& rxBuffer , sizeof (rxBuffer ), & spi_aux_Context );
622615 }
623616}
624617
@@ -630,26 +623,22 @@ static void getTouch(void)
630623*******************************************************************************/
631624static void sendTouch (void )
632625{
633- /* Master: start a transfer. Slave: prepare for a transfer. */
634- // if (spi_main_count > SPI_TIMEOUT) {
635- // Cy_SCB_SPI_AbortTransfer(CYBSP_SPI_HW, &spiContext);
636- // spi_main_count = 0;
637- // }
638-
639- /* Save touch data to buffer */
640- for (int i = 0 ; i < TOUCHSIZE ; i ++ )
641- {
642- txBuffer [i ] = touch1Data .u16_signal [i ];
643- txBuffer [i + 60 ] = touch2Data .u16_signal [i ];
644- }
626+ if ((0UL == (CY_SCB_SPI_TRANSFER_ACTIVE & Cy_SCB_SPI_GetTransferStatus (CYBSP_SPI_HW , & spiContext )))) {
627+ /* Master: start a transfer. Slave: prepare for a transfer. */
628+ Cy_SCB_SPI_AbortTransfer (CYBSP_SPI_HW , & spiContext ); // abort any ongoing transaction
645629
646- /* save scan time */
647- txBuffer [120 ] = scan_time ;
630+ /* Save touch data to buffer */
631+ for (int i = 0 ; i < TOUCHSIZE ; i ++ )
632+ {
633+ txBuffer [i ] = touch1Data .u16_signal [i ];
634+ txBuffer [i + 60 ] = touch2Data .u16_signal [i ];
635+ }
648636
649- /* Master: start a transfer. Slave: prepare for a transfer. */
650- Cy_SCB_SPI_Transfer (CYBSP_SPI_HW , (uint8_t * )& txBuffer , NULL , sizeof (txBuffer ), & spiContext );
651- while ((0UL != (CY_SCB_SPI_TRANSFER_ACTIVE & Cy_SCB_SPI_GetTransferStatus (CYBSP_SPI_HW , & spiContext ))))
652- {
637+ /* save scan time */
638+ txBuffer [127 ] = scan_time ;
639+
640+ /* Master: start a transfer. Slave: prepare for a transfer. */
641+ Cy_SCB_SPI_Transfer (CYBSP_SPI_HW , (uint8_t * )& txBuffer , NULL , sizeof (txBuffer ), & spiContext );
653642 }
654643}
655644
0 commit comments