bsp_lpspi.c
/*!
* SPI_Flash_Send_Byte
* @brief W25Q64/W25Q128
*
*/
void SPI_Flash_Send_Byte(uint32_t instance, uint8_t *TxData, uint8_t *RxData, uint16_t count)
{
LPSPI_DRV_MasterTransfer(instance, TxData, RxData, count);
#if defined (LPSPICOM1)
if (instance == LPSPICOM1) {
xSemaphoreTake( BinarySem_LPSPI1_TxHandle, portMAX_DELAY);
}
#endif
}
lpspi_master_driver.c
/*!
* @brief Check if errors are detected on RX channel
* The main purpose of this function is to check DMA errors on rx channel
*/
static void LPSPI_DRV_MasterCompleteRX(void* parameter, edma_chn_status_t status)
{
#if defined (LPSPICOM1)
static portBASE_TYPE xHigherPriorityTaskWoken;
xHigherPriorityTaskWoken = pdFALSE;
#endif
uint32_t instance = (uint32_t)parameter;
lpspi_state_t * lpspiState = g_lpspiStatePtr[instance];
if (status == EDMA_CHN_ERROR)
{
(void)LPSPI_DRV_MasterAbortTransfer(instance);
lpspiState->status = LPSPI_TRANSMIT_FAIL;
}
#if defined (LPSPICOM1)
if (instance == LPSPICOM1) {
xSemaphoreGiveFromISR( BinarySem_LPSPI1_TxHandle, &xHigherPriorityTaskWoken);
portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
}
#endif
}