SPRUI30H November 2015 – May 2024 DRA745 , DRA746 , DRA750 , DRA756
The draining feature is implemented to handle the end of a transfer whose length is not a multiple of the FIFO threshold values (the I2Ci.I2C_BUF[13:8] RXTRSH bit field value + 1 for the RX threshold and the I2Ci.I2C_BUF[5:0] TXTRSH field value + 1 for the TX threshold). It can also transfer the remaining number of bytes (because the threshold is not reached).
This feature prevents the LH or the DMA controller from trying more FIFO accesses than necessary (for example, to generate at the end of a transfer a DMA RX request having fewer bytes in the FIFO than the configured DMA transfer length). Otherwise, an AERR interrupt is generated by the I2Ci.I2C_IRQSTATUS_RAW [7] AERR bit.
The draining mechanism generates an interrupt using the I2Ci.I2C_IRQSTATUS_RAW [13] RDR or I2Ci.I2C_IRQSTATUS_RAW [14] XDR bit at the end of the transfer, informing the LH that it must check the amount of data left to be transferred (the I2Ci.I2C_BUFSTAT[13:8] RXSTAT or I2Ci.I2C_BUFSTAT[5:0] TXSTAT bit fields) and enable the draining feature of the DMA controller by reconfiguring the DMA transfer length according to this value (when the DMA mode is enabled) or perform only the required number of data accesses (when the DMA mode is disabled).
In receive mode (master or slave), if the RX FIFO threshold (the I2Ci.I2C_BUF[13:8] RXTRSH bit field value + 1) is not reached, but the transfer ends on the I2C bus and data remains in the RX FIFO (less than the threshold), the receive draining interrupt (the I2Ci.I2C_IRQSTATUS_RAW [13] RDR bit) is asserted to inform the LH that it can read the amount of data in the RX FIFO (the I2Ci.I2C_BUFSTAT[13:8] RXSTAT bit field). The LH performs a number of data read accesses equal to the I2Ci.I2C_BUFSTAT[13:8] RXSTAT bit field (interrupt or polling mode), or reconfigures the DMA controller with the required value to drain the FIFO.
In master transmit mode, if the TX FIFO threshold (the I2Ci.I2C_BUF[5:0] TXTRSH bit field value + 1) is not reached, but the amount of data remaining to be written in the TX FIFO is less than the threshold, the transmit draining interrupt (the I2Ci.I2C_IRQSTATUS_RAW [14] XDR bit) is asserted to inform the LH that it can read the amount of data remaining to be written in the TX FIFO (the I2Ci.I2C_BUFSTAT[5:0] TXSTAT bit field). The LH must write the required number of data bytes specified by the I2Ci.I2C_BUFSTAT[5:0] TXSTAT bit field value or reconfigure the DMA controller with the value required to transfer the last bytes to the FIFO.
In master mode, the LH can alternately not check the values of the I2Ci.I2C_BUFSTAT[5:0] TXSTAT and I2Ci.I2C_BUFSTAT[13:8] RXSTAT bit fields, because it can obtain this information internally (by computing the I2Ci.I2C_CNT[15:0] DATACOUNT bit field value modulo I2Ci.I2C_BUF[13:8] RXTRSH or I2Ci.I2C_BUF[5:0] TXTRSH).
By default, the draining feature is disabled; it can be enabled using the I2Ci.I2C_IRQENABLE_SET [14] XDR_IE or I2Ci.I2C_IRQENABLE_SET [13] RDR_IE bits (default disabled) only for transfers with lengths not equal to the threshold values (I2Ci.I2C_BUF[5:0] TXTRSH bit field value + 1 for the TX threshold or the I2Ci.I2C_BUF[13:8] RXTRSH bit field value + 1 for the RX threshold).