Not applicable
Feb 26, 2014
01:15 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Feb 26, 2014
01:15 AM
Hi
I'm exploring the UART001 examples and have some issues with understanding the setup of the DMA to use with the UART.
First of all, the example as it is delevered will transmit only every 4th byte of the Data array. This is when source and destination single transfer and DMA burst widths are set to 8 (one byte?). How does that happen? And, the tx FIFO registers are 16 bit, while the UART001 is set up with 8 data bits (only low address of INx is used), so how should this actually be set up?
Further, if I break in the DMA_IRQ_BLOCK event, each of the 10 blocks (every 4 bytes) are transmitted, but if I don't some of the blocks, or part of blocks, are lost. My only conclution is that the DMA occationally overwrites the buffer before the data is sent? Is this a trigger issue? How do I prevent this?
i.e. if
Data[12] = {0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c}; // a..l, BlockSize=12
when breaking between blocks the terminal output is:
aeiaeiaeiaeiaeiaeiaeiaeiaeiaei
when not breaking, terminal output:
aeiaeiaeiaeiaeiae
Last. Please explain the differences between DMA transfer types Auto-reload multi-block transfer and Auto-reload multi-block transfer(contiguous SAR). How does this behave if block size is larger than UART FIFO?
Thanks,
/Åse Maj
I'm exploring the UART001 examples and have some issues with understanding the setup of the DMA to use with the UART.
First of all, the example as it is delevered will transmit only every 4th byte of the Data array. This is when source and destination single transfer and DMA burst widths are set to 8 (one byte?). How does that happen? And, the tx FIFO registers are 16 bit, while the UART001 is set up with 8 data bits (only low address of INx is used), so how should this actually be set up?
Further, if I break in the DMA_IRQ_BLOCK event, each of the 10 blocks (every 4 bytes) are transmitted, but if I don't some of the blocks, or part of blocks, are lost. My only conclution is that the DMA occationally overwrites the buffer before the data is sent? Is this a trigger issue? How do I prevent this?
i.e. if
Data[12] = {0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c}; // a..l, BlockSize=12
when breaking between blocks the terminal output is:
aeiaeiaeiaeiaeiaeiaeiaeiaeiaei
when not breaking, terminal output:
aeiaeiaeiaeiaeiae
Last. Please explain the differences between DMA transfer types Auto-reload multi-block transfer and Auto-reload multi-block transfer(contiguous SAR). How does this behave if block size is larger than UART FIFO?
Thanks,
/Åse Maj
2 Replies
Not applicable
Feb 26, 2014
03:30 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Feb 26, 2014
03:30 AM
I was able to resolve the issue with the block overwriting by setting and resetting the Transfer Flow Type to Memory-Peripherial. Obviously there was a problem with the generated code (stuck in Memory-Memory mode?).
Anyway, I also tried to migrate the Dave Apps to the latest version, but then the transmitted data is something quite different and much larger than my set block size, so I reverted back to the older Apps.
The other questions still stand.
/Åse Maj
Anyway, I also tried to migrate the Dave Apps to the latest version, but then the transmitted data is something quite different and much larger than my set block size, so I reverted back to the older Apps.
The other questions still stand.
/Åse Maj
Not applicable
Feb 26, 2014
06:32 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Feb 26, 2014
06:32 AM
Related to this..Is there a way to force the DMA002 app to use GPDMA1 (as I am using GPDMA0 with a different configuration with the VADC)?