Hello everyone,
I'm working on developing firmware for TM4C129ENCPDT device. This application is to shift data received from ethernet port then send it to 4 GPIO port A, D, K, L then serial shift them to a radio at 8Mbps. The reason I have to do this is because the radio requires serial RS-422 data input with a synchronous clock which will latch data on falling edge of every bit of serial data. For the serial shift, I used 4 of SN74HC166D (parallel in serial out shift register) so the total serial bit to shift is 32 bit. I plan to use uDMA of the TM4C129 to send data from the ethernet received buffer to GPIO then to load into shift registers, once all 32 bit have been shift out, an external interrupt signal will be generated from shift registers to an input port (port Q) to trigger another transfer until all data is shifted out. I looked around to find examples in Tiva library and didn't find anything similar.
I've studied the uDMA section in the datasheet of the MCU and still unclear about the uDMA channel assignment. From the Table 9-1 page 688 of the datasheet, if I'd like to assign the uDMA channel to GPIO port A, D, K, L then channel 4, 7, 12, and 13 should be used with these functions as below, provided that MCU and these channels have been initialized
MAP_uDMAChannelAssign(UDMA_CH4_GPIOA); MAP_uDMAChannelAssign(UDMA_CH7_GPIOD); MAP_uDMAChannelAssign(UDMA_CH12_GPIOK); MAP_uDMAChannelAssign(UDMA_CH13_GPIOL);
and
uDMAChannelControlSet(UDMA_CH4_GPIOA | UDMA_PRI_SELECT, UDMA_SIZE_8 | UDMA_SRC_INC_32 | UDMA_DST_INC_NONE | UDMA_ARB_1); uDMAChannelControlSet(UDMA_CH7_GPIOD | UDMA_PRI_SELECT, UDMA_SIZE_8 | UDMA_SRC_INC_32 | UDMA_DST_INC_NONE | UDMA_ARB_1); uDMAChannelControlSet(UDMA_CH12_GPIOK | UDMA_PRI_SELECT, UDMA_SIZE_8 | UDMA_SRC_INC_32 | UDMA_DST_INC_NONE | UDMA_ARB_1); uDMAChannelControlSet(UDMA_CH13_GPIOL | UDMA_PRI_SELECT, UDMA_SIZE_8 | UDMA_SRC_INC_32 | UDMA_DST_INC_NONE | UDMA_ARB_1);
and
uDMAChannelTransferSet(UDMA_CH4_GPIOA | UDMA_PRI_SELECT, UDMA_MODE_BASIC, g_ui8RxBuf, (void *)(GPIO_PORTA_BASE + 0x3FC), 1); uDMAChannelTransferSet(UDMA_CH7_GPIOD | UDMA_PRI_SELECT, UDMA_MODE_BASIC, g_ui8RxBuf, (void *)(GPIO_PORTD_BASE + 0x3FC), 1); uDMAChannelTransferSet(UDMA_CH12_GPIOK | UDMA_PRI_SELECT, UDMA_MODE_BASIC, g_ui8RxBuf, (void *)(GPIO_PORTK_BASE + 0x3FC), 1); uDMAChannelTransferSet(UDMA_CH13_GPIOL | UDMA_PRI_SELECT, UDMA_MODE_BASIC, g_ui8RxBuf, (void *)(GPIO_PORTL_BASE + 0x3FC), 1);
Please shed some light on this and tell me if I'm in the right direction. Any inputs/comments will be greatly appreciated. Thank you all and have a nice day.
Best Regards,
TLN

