Hi
I have a problem with the rx dma on a uart. This is my setup.
tInterfaceParameters.Channel = 2; // set UART channel for serial use
tInterfaceParameters.ucSpeed = SERIAL_BAUD_230400; // baud rate
//tInterfaceParameters.ucSpeed = SERIAL_BAUD_9600; // baud rate
tInterfaceParameters.Rx_tx_sizes.RxQueueSize = 40; // input buffer size
tInterfaceParameters.Rx_tx_sizes.TxQueueSize = TX_BUFFER_SIZE; // output buffer size
tInterfaceParameters.Task_to_wake = TASK_BACNET; // wake self when messages have been received
tInterfaceParameters.Config = CHAR_8 | NO_PARITY | ONE_STOP | /*RTS_CTS*/NO_HANDSHAKE |MSG_MODE | MSG_MODE_RX_CNT | MSG_BREAK_MODE;
tInterfaceParameters.ucDMAConfig = UART_RX_DMA |UART_RX_DMA_HALF_BUFFER |UART_RX_DMA_BREAK /*| UART_TX_DMA*/; // activate DMA on transmission
if((MstpPortID = fnOpen(TYPE_TTY, FOR_I_O, &tInterfaceParameters)) != 0)
{ // open or change the channel with defined configurations (initially inactive)
fnDriver(MstpPortID, (RX_ON|TX_ON), 0); // enable rx
fnDebugMsg("fnInitialise dl port\r\n");
//fnWrite(MstpPortID,(void*)&tInterfaceParameters,5);
}
if tInterfaceParameters.ucDMAConfig is 0 then I can receive my messages.
I added this
static __interrupt__ void _DMA2_Rx_handler(void) // rx buffer reception completed on SCI1
{
DMA_SR_BCR2 = DSR_DONE;
#ifdef _WINDOWS
DMA_SR_BCR2 &= ~DSR_DONE; // {100}
#endif
iInterruptLevel = 1; // ensure interrupts remain blocked during subroutine
fnSciRxByte(0, 2); // tty block ready for read
iInterruptLevel = 0;
}
to M5223X.c and changed fnConfigSCI to set up dma 2
Did I miss some thing.
Christo