Other Parts Discussed in Thread: SYSCONFIG
Is there any limitation in the number of bytes that can be send out at a time from the I2C Tx FIFO by polling mechanism?
If so, where is it mentions in the device specific datasheet (page number)?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Is there any limitation in the number of bytes that can be send out at a time from the I2C Tx FIFO by polling mechanism?
If so, where is it mentions in the device specific datasheet (page number)?
Hi Lavina,
This information is shown in section 18.1.3 of the device's technical reference manual.
The FIFO is 8 bytes deep.
Could you please suggest a possible work around to send more than 8bytes of data at a time from the TX FIFO? (TX FIFO will be filled by DMA > 8bytes)
You can't transfer more than 8 bytes into the FIFO at a time, as the FIFO is 8 bytes wide. You can use repeat single mode, triggered by the I2C FIFO 1/2 full (or 1/4 full, or 3/4 full) flag to sequentially fill the FIFO without overflowing it. This would result in the same behavior in the I2C peripheral, as it sends the data out sequentially anyways.
Could you please provide the steps for the same?
To send data > 8bytes from I2C via DMA
Hi Lavina,
I'd recommend that you take a look at the MSPM0 Academy for I2C, particularly the second half of it. It walks through an example using the I2C to send 16 bytes and read 16 bytes without using the DMA.
Once you've built and used that example I would recommend that you look at the DMA academy as well.
To combine them, open the I2C section of the Sysconfig file, scroll to the DMA configuration section, and select controller TX FIFO Trigger for the Configure DMA event 1 trigger. Now a box labeled DMA Channel Event 1 should appear. Configure the channel to send a block of addresses to a fixed address, select the source and destination data widths you want, and select the source address to either decrement or increment. Configure the transfer size to be the size of your stored data, and select single as the transfer mode. For source address increment choose increment.
You'll need to remove the manual loading of the data from the I2C example, and add the DMA source and destination addresses, as shown in the DMA academy.
Hello Dylan,
It works now.
These are the steps followed.
Could you please suggest the steps to read back the 100bytes of data via I2C DMA?