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?