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.

TCAN4550EVM: nINT still action after disable interrupt

Part Number: TCAN4550EVM


Hi team,

My customer is testing TCAN4550EVM.

They use API TCAN4x5x_Device_ConfigureInterruptEnable(&0) to disable all interrupt, but nINT still will action. And they read registers 0820h and 0830h are not all 0.

Could you help explain why interrupt can't be disabled by this API?

image.png

Thanks,

Severi

  • HI Severi,

    The nINT pin is the Logical OR of all "enabled" bits that are set in registers 0x0820 and 0x0824.  The Device Interrupt Enable register (0x0830) can only disable some of the bits in the interrupt register (0x0820) from causing a change to the nINT pin voltage. 

    There is a one-to-one correlation between the bits in register 0x0820 and 0x0830.  Any bits in register 0x0820 that have a corresponding RSVD name in register 0x0830 can't be disabled from causing a change to the nINT pin.

    To clear any set interrupt bits, you need to write a "1" to the bits that are set.  Writing 0xFFFF to the register will effectively clear any set bits.  

    Note that register 0x0824 is a read only copy of the MCAN Interrupt register 0x1050, and therefore to clear any set bits in register 0x0824, you need to write a "1" to the set bits in register 0x1050.

    If the SPI Error (SPIERR) bit is set in register 0x0820, you will need to clear the bits in the Status Register 0x000C that reports SPI errors.  

    Once you have cleared all the set bits in register 0x000C, 0x0820, and 0x0824/0x1050, the nINT pin should go high.

    Regards,

    Jonathan

  • Hi Jonathan,

    Based on your reply, can I understand that what is currently causing the nINT pin to trigger is the fact that the RSVD bits are displayed in the 0x0830 register and cannot be set, and there are meaningful flag bits in the 0x0820 register, such as SPIERR and CANSLNT, etc.? CANSLNT cannot be cleared?

  • Yes CANSLNT can be cleared by writing a "1" to the bit in register 0x0820. 

    If you want to prevent the CANSLNT bit from causing the nINT pin to pull low, you can also set the CANSLNT bit in register 0x0830 to "0" to disable the CANSLNT flag from generating a hardware interrupt.  The bit will still be set in register 0x0820, but it will not cause the nINT pin to pull low.

    Regards,

    Jonathan

  • Thank you for your explanation. However, I also noticed that the CANSLNT flag will trigger CANERR and GLOBALERR. These two flags are present in 0x0820 but not in the 0x0830 register. Therefore, these two flags remain in the enabled state. Together with CANSLNT, CANERR and GLOBALERR will pull the nINT pin low. How can I fundamentally solve the problem of CANSLNT?

  • To prevent CANSLNT from causing the nINT pin to pull low, you only need to set the CANSLNT bit of register 0x0830 to 0.  (0x0830[10] = 0).

    The CANSLNT, CANERR, and GLOBALERR bits will still be set in register 0x0820, but because CANSLNT bit has been disabled in register 0x0830, the nINT pin will not be pulled low.

    Other bits that are still enabled will however cause the nINT pin to pull low.

    Regards,

    Jonathan