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.

TM4C123 Silicon Erratum SSI#07 Additional Info

Hello All!

Whilst debugging a particularly insidious SSI "feature" I stumbled upon a bit of a short-coming of the TM4C123 Silicon Errata in the section SSI#07. It correctly states that when the EOT bit is set in the SSICR1, the SSIRIS and SSIMIS no longer correctly show the SSI TXRIS and SSI TXMIS - they do indeed read 0 even when the TX FIFO is empty. Rather unhelpfully, the suggested "fix" is to not use the EOT feature. Unfortunately that precludes the writing of an efficient SSI driver, so below some extra info that might prove helpful.

o Whilst it is true that the SSIRIS and SSIMIS do not correctly reflect the state of the SSI TXRIS and SSI TXMIS (so you can't use those reliably in your driver), the interrupt signal does still appear to make it to the NVIC - ie it still works, you just can't determine the cause of the IRQ by looking at SSIRIS / SSIMIS.

o Whilst this Erratum affects SSIRIS and SSIMIS, it does not appear to affect the SSISR - you can tell that the TX FIFO has become empty by inspecting the TFE bit.

o You can infer the cause of the IRQ if you only set one bit in the SSIIM - if there is only one enabled source, then by definition, when you enter the IRQ handler then the source must(*) have been that source, ergo you don't even need to inspect SSIRIS / MIS.

* - there is an insidious "feature" that means this is not always true, which I will detail in a separate post.

Hope this helps,

Pat.

  • o Whilst it is true that the SSIRIS and SSIMIS do not correctly reflect the state of the SSI TXRIS and SSI TXMIS (so you can't use those reliably in your driver), the interrupt signal does still appear to make it to the NVIC - ie it still works, you just can't determine the cause of the IRQ by looking at SSIRIS / SSIMIS.

    o Whilst this Erratum affects SSIRIS and SSIMIS, it does not appear to affect the SSISR - you can tell that the TX FIFO has become empty by inspecting the TFE bit.

    o You can infer the cause of the IRQ if you only set one bit in the SSIIM - if there is only one enabled source, then by definition, when you enter the IRQ handler then the source must(*) have been that source, ergo you don't even need to inspect SSIRIS / MIS.

    Hi Pat,

      Thanks for the suggestion - by checking the SSISR register for TFE status. The errata #07 only affects the TXRIS in the SSIRIS register bit but not the RXRIS/RTRIS/RORRIS bits. If you get an interrupt and if RXRIS/RTRIS/RORRIS are clear and if TFE bit is set then your suggested workaround will work knowing that the interrupt is due to TXFIFO being empty while EOT is set. 

  • Hiya Charles,

    You're most welcome - only hope that someone finds it useful.

    Cheers,

    Pat.