/************************************************************************************************** * @fn HalUARTPollSPI * * @brief SPI Transport Polling Manager. * * input parameters * * None. * * output parameters * * None. * * @return None. */ static void HalUARTPollSPI(void) { #ifdef HAL_SPI_MASTER #else #if defined POWER_SAVING pktFound = FALSE; #endif if ( ( spiRdyIsr ) || (SPI_RDY_IN()) ) { CLEAR_SLEEP_MODE(); #if defined HAL_SBL_BOOT_CODE if(!spiTxLen) { UxDBUF = 0x00; /* Zero out garbage from UxDBUF */ HAL_DMA_ARM_CH(HAL_SPI_CH_RX); /* Arm RX DMA */ asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); halIntState_t intState; HAL_ENTER_CRITICAL_SECTION(intState); SPI_SET_RDY_OUT(); /* SPI_RDYOut = 0 */ SPI_CLR_RDY_OUT(); /* SPI_RDYOut = 1 */ HAL_EXIT_CRITICAL_SECTION(intState); } #endif #if defined POWER_SAVING pktFound = TRUE; #endif } #endif #ifdef HAL_SPI_MASTER if ( spiRdyIsr && !writeActive) { spiParseRx(); } #else //SPI Slave if ( spiRdyIsr && !writeActive ) { if ( !(UxCSR & CSR_ACTIVE) ) { // MRDY has gone low to set spiRdyIsr // and has now gone high if SPI_RDY_IN // is false, read RXed bytes spiParseRx(); } else { // MRDY has gone low and is still low // Set SRDY low to signal ready to RX SPI_SET_RDY_OUT(); } } #endif //HAL_SPI_MASTER #if defined HAL_SPI_MASTER if( SPI_RX_RDY()) #else if (SPI_RX_RDY() && !spiTxLen) #endif { if (spiCB != NULL) { spiCB((HAL_UART_SPI - 1), HAL_UART_RX_TIMEOUT); } } #if defined POWER_SAVING if ( SPI_RDY_IN()|| SPI_RX_RDY() || spiRxLen || spiTxLen || spiRdyIsr || pktFound || SPI_RDY_OUT() ) { CLEAR_SLEEP_MODE(); } else if ( (!pktFound) && (!SPI_NEW_RX_BYTE(spiRxIdx)) ) { PxIEN |= SPI_RDYIn_BIT; SPI_CLR_RDY_OUT(); } #endif }
/************************************************************************************************** * @fn HalUARTPollSPI * * @brief SPI Transport Polling Manager. * * input parameters * * None. * * output parameters * * None. * * @return None. */ static void HalUARTPollSPI(void) { #ifdef HAL_SPI_MASTER #else #if defined POWER_SAVING pktFound = FALSE; #endif if ( ( spiRdyIsr ) || (SPI_RDY_IN()) ) { CLEAR_SLEEP_MODE(); #if defined HAL_SBL_BOOT_CODE if(!spiTxLen) { UxDBUF = 0x00; /* Zero out garbage from UxDBUF */ HAL_DMA_ARM_CH(HAL_SPI_CH_RX); /* Arm RX DMA */ asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); asm("NOP"); halIntState_t intState; HAL_ENTER_CRITICAL_SECTION(intState); SPI_SET_RDY_OUT(); /* SPI_RDYOut = 0 */ SPI_CLR_RDY_OUT(); /* SPI_RDYOut = 1 */ HAL_EXIT_CRITICAL_SECTION(intState); } #endif #if defined POWER_SAVING pktFound = TRUE; #endif } #endif #if defined HAL_SPI_MASTER if (!spiTxLen) #else if ((!spiTxLen) && (!SPI_RDY_IN())) #endif { SPI_CLR_RDY_OUT(); /* SPI_RDYOut = 1; */ spiParseRx(); } #if defined HAL_SPI_MASTER if( SPI_RX_RDY()) #else if (SPI_RX_RDY() && !spiTxLen) #endif { if (spiCB != NULL) { spiCB((HAL_UART_SPI - 1), HAL_UART_RX_TIMEOUT); } } if (!spiTxLen) { if ( SPI_RDY_OUT () ) { SPI_CLR_RDY_OUT(); /* Clear the ready-out signal */ } } #if defined POWER_SAVING if ( SPI_RDY_IN()|| SPI_RX_RDY() || spiRxLen || spiTxLen || spiRdyIsr || pktFound || SPI_RDY_OUT() ) { CLEAR_SLEEP_MODE(); } else if ( (!pktFound) && (!SPI_NEW_RX_BYTE(spiRxIdx)) ) { PxIEN |= SPI_RDYIn_BIT; SPI_CLR_RDY_OUT(); } #endif spiRdyIsr = 0; }