void DRV_USART_BufferEventHandlerSet ( const DRV_HANDLE hClient, const DRV_USART_BUFFER_EVENT_HANDLER eventHandler, const uintptr_t context ) { DRV_USART_CLIENT_OBJ * clientObj; DRV_USART_OBJ *drvObj; /* Validate the driver handle */ if((DRV_HANDLE_INVALID == hClient) || (0 == hClient)) { /* This means the handle is invalid */ SYS_DEBUG(0, "Driver Handle is invalid"); return; } clientObj = (DRV_USART_CLIENT_OBJ *)hClient; if(!clientObj->inUse) { SYS_DEBUG(0, "Invalid driver handle"); return; } drvObj = clientObj->hDriver; /* Register the event handler with the client */ clientObj->eventHandler = eventHandler; clientObj->context = context; /* Setup the Event handler for the DMA TX channel interrupts */ if(SYS_DMA_CHANNEL_HANDLE_INVALID != drvObj->dmaChannelHandleWrite ) { if((DRV_IO_INTENT_WRITE == (DRV_IO_INTENT_WRITE & clientObj->ioIntent))) { SYS_DMA_ChannelTransferEventHandlerSet(drvObj->dmaChannelHandleWrite, (SYS_DMA_CHANNEL_TRANSFER_EVENT_HANDLER)_DRV_USART_DMA_EventHandler, (uintptr_t)drvObj); } } /* Setup the Event handler for the DMA Rx channel interrupts */ if(SYS_DMA_CHANNEL_HANDLE_INVALID != drvObj->dmaChannelHandleRead) { if((DRV_IO_INTENT_READ == (DRV_IO_INTENT_READ & clientObj->ioIntent))) { SYS_DMA_ChannelTransferEventHandlerSet(drvObj->dmaChannelHandleRead, (SYS_DMA_CHANNEL_TRANSFER_EVENT_HANDLER)_DRV_USART_DMA_EventHandler, (uintptr_t)drvObj); } } }
void DRV_SPI_SetupDMA( struct DRV_SPI_DRIVER_OBJECT * pDrvInstance) { DMA_TRIGGER_SOURCE txSource = 0; DMA_TRIGGER_SOURCE rxSource = 0; switch(pDrvInstance->spiId) { case SPI_ID_1: { txSource = DMA_TRIGGER_SPI_1_TRANSMIT; rxSource = DMA_TRIGGER_SPI_1_RECEIVE; } break; case SPI_ID_2: { txSource = DMA_TRIGGER_SPI_2_TRANSMIT; rxSource = DMA_TRIGGER_SPI_2_RECEIVE; } break; case SPI_ID_3: { txSource = DMA_TRIGGER_SPI_3_TRANSMIT; rxSource = DMA_TRIGGER_SPI_3_RECEIVE; } break; case SPI_ID_4: { txSource = DMA_TRIGGER_SPI_4_TRANSMIT; rxSource = DMA_TRIGGER_SPI_4_RECEIVE; } break; case SPI_ID_5: { txSource = DMA_TRIGGER_SPI_5_TRANSMIT; rxSource = DMA_TRIGGER_SPI_5_RECEIVE; } break; case SPI_ID_6: { txSource = DMA_TRIGGER_SPI_6_TRANSMIT; rxSource = DMA_TRIGGER_SPI_6_RECEIVE; } break; default: break; } if (pDrvInstance->txDmaThreshold != 0) { pDrvInstance->txDmaChannelHandle = SYS_DMA_ChannelAllocate(pDrvInstance->txDmaChannel); SYS_DMA_ChannelSetup(pDrvInstance->txDmaChannelHandle, SYS_DMA_CHANNEL_OP_MODE_BASIC, txSource); SYS_DMA_ChannelTransferEventHandlerSet(pDrvInstance->txDmaChannelHandle, pDrvInstance->sendDMAHander, (uintptr_t)pDrvInstance); } if (pDrvInstance->rxDmaThreshold != 0) { pDrvInstance->rxDmaChannelHandle = SYS_DMA_ChannelAllocate(pDrvInstance->rxDmaChannel); SYS_DMA_ChannelSetup(pDrvInstance->rxDmaChannelHandle, SYS_DMA_CHANNEL_OP_MODE_BASIC, rxSource); SYS_DMA_ChannelTransferEventHandlerSet(pDrvInstance->rxDmaChannelHandle, pDrvInstance->receiveDMAHander, (uintptr_t)pDrvInstance); } }