Hi,
I am trying to implement the data transfer from memory to the RF TX FIFO using uDMA. Here is my code:
#include "udma.h" #include "hw_ints.h" #include "interrupt.h" #include "hw_rfcore_sfr.h" #define RF_TX_CHANNEL UDMA_CH2_RESERVED0 tDMAControlTable ucDMAControlTable[4] __attribute__ ((aligned(1024))); void uDMAIntHandler(void) { while(1); } void uDMAErrIntHandler(void){ while(1); } char *test="TESTING"; int main(void){ uDMAEnable(); uDMAControlBaseSet(&ucDMAControlTable[0]); uDMAChannelAttributeDisable(RF_TX_CHANNEL, UDMA_ATTR_ALL); uDMAChannelControlSet(RF_TX_CHANNEL|UDMA_PRI_SELECT, UDMA_SIZE_8|UDMA_SRC_INC_8|UDMA_DST_INC_NONE |UDMA_ARB_128); uDMAChannelTransferSet(RF_TX_CHANNEL | UDMA_PRI_SELECT, UDMA_MODE_AUTO, test, (void *)RFCORE_SFR_RFDATA, sizeof(test)); IntEnable(INT_UDMA); IntEnable(INT_UDMAERR); uDMAChannelEnable(RF_TX_CHANNEL); uDMAChannelRequest(RF_TX_CHANNEL); return 0; }
Everytime I executed my program to the "IntEnable(INT_UDMAERR);" it would trigger a udma error interrupt immediately. However, if I commented out the "uDMAChannelRequest(RF_TX_CHANNEL);" and executed it again, the error interrupt will not be trigger(but I cannot start the dma action).
Could anyone help me find the problem?