/** Initialize audio rx * - get pointer to buffer pool * - register interrupt handler * - initialize RX queue * Parameters: * @param pThis pointer to own object * @param pBuffP pointer to buffer pool to take and return chunks from * @param pIsrDisp pointer to interrupt dispatcher to get ISR registered * * @return Zero on success. * Negative value on failure. */ int uartRx_init(uartRx_t *pThis, bufferPool_t *pBuffP, isrDisp_t *pIsrDisp) { if ( NULL == pThis || NULL == pBuffP || NULL == pIsrDisp) { //printf("[UART_RX]: Failed init\r\n"); return FAIL; } pThis->pPending = NULL; pThis->pBuffP = pBuffP; pThis->state = UARTRX_WAITING; // init queue with queue_init(&pThis->queue, UARTRX_QUEUE_DEPTH); /* Configure the DMA3 for RX (data receive/memory write) */ /* Read, 1-D, interrupt enabled, Memory write operation, 16 bit transfer, * Auto buffer */ *pDMA10_CONFIG = 0x10A2;//0xA2; //SYNC | WNR | WDSIZE_8 | DI_EN; /** * Register the interrupt handler */ isrDisp_registerCallback(pIsrDisp, ISR_DMA10_UART1_RX, uartRx_isr, pThis); //printf("[UART_RX]: RX init complete\r\n"); return PASS; }
/** Initialize audio tx * - get pointer to buffer pool * - register interrupt handler * - initialize TX queue * Parameters: * @param pThis pointer to own object * @param pBuffP pointer to buffer pool to take and return chunks from * @param pIsrDisp pointer to interrupt dispatcher to get ISR registered * * @return Zero on success. * Negative value on failure. */ int audioTx_init(audioTx_t *pThis, bufferPool_t *pBuffP, isrDisp_t *pIsrDisp) { // parameter checking if ( NULL == pThis || NULL == pBuffP || NULL == pIsrDisp ) { printf("[Audio TX]: Failed init \r\n"); return FAIL; } // store pointer to buffer pool for later access pThis->pBuffP = pBuffP; pThis->pPending = NULL; // nothing pending pThis->running = 0; // DMA turned off by default // init queue queue_init(&pThis->queue, AUDIOTX_QUEUE_DEPTH); /* Configure the DMA4 for TX (data transfer/memory read) */ /* Read, 2-D, interrupt enabled, 16 bit transfer, Auto buffer */ *pDMA4_CONFIG = WDSIZE_16 | DI_EN; //| DMA2D; /* 16 bit and DMA enable */ // register own ISR to the ISR dispatcher isrDisp_registerCallback(pIsrDisp, ISR_DMA4_SPORT0_TX, audioTx_isr, pThis); printf("[Audio TX]: TX init complete \r\n"); return PASS; }