Skip to content

Commit 6454efa

Browse files
authored
Merge pull request #1 from IDMIL/dev
changed SPI code to be non blocking
2 parents 19162f4 + 671e88c commit 6454efa

File tree

1 file changed

+31
-42
lines changed
  • firmware/tsticktouch_firmware

1 file changed

+31
-42
lines changed

firmware/tsticktouch_firmware/main.c

Lines changed: 31 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
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
100100
struct touchBuffer touch1Data; // Main board touch data
101101
struct touchBuffer touch2Data; // Auxillary board touch data
102102

103+
103104
/* Timing variables */
104105
int start, end; // timing variable
105106
float slot_scan_time = 0;
@@ -118,7 +119,7 @@ uint32_t bytes_transferred;
118119
uint32_t spi_main_count;
119120
uint32_t spi_aux_count;
120121
uint16_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
*******************************************************************************/
594595
static 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
*******************************************************************************/
631624
static 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

Comments
 (0)