SLAZ423K October   2012  – May 2021 MSP430G2303

 

  1. 1Functional Advisories
  2. 2Preprogrammed Software Advisories
  3. 3Debug Only Advisories
  4. 4Fixed by Compiler Advisories
  5. 5Nomenclature, Package Symbolization, and Revision Identification
    1. 5.1 Device Nomenclature
    2. 5.2 Package Markings
      1.      RHB32
      2.      N20
      3.      PW20
      4.      PW28
    3. 5.3 Memory-Mapped Hardware Revision (TLV Structure)
  6. 6Advisory Descriptions
    1. 6.1  BCL12
    2. 6.2  CPU4
    3. 6.3  EEM20
    4. 6.4  SYS15
    5. 6.5  TA12
    6. 6.6  TA16
    7. 6.7  TA21
    8. 6.8  TAB22
    9. 6.9  USCI20
    10. 6.10 USCI22
    11. 6.11 USCI23
    12. 6.12 USCI24
    13. 6.13 USCI25
    14. 6.14 USCI26
    15. 6.15 USCI29
    16. 6.16 USCI30
    17. 6.17 USCI34
    18. 6.18 USCI35
    19. 6.19 USCI40
    20. 6.20 XOSC5
  7. 7Revision History

USCI29

USCI Module

Category

Functional

Function

Timing of USCI I2C interrupts may result in call to a reserved ISR location

Description

When certain USCI I2C interrupt flags (IFG) are set and an automatic flag-clearing event on the I2C bus occurs, the device makes a call to the TRAPINT interrupt vector. This will only happen if the IFG is cleared within a critical time window (~6 CPU clock cycles) after a USCI interrupt request occurs and before the interrupt servicing is initiated. The affected interrupts are UCBxTXIFG, UCSTPIFG, UCSTTIFG and UCNACKIFG.

The automatic flag-clearing scenarios are described in the following situations:

(1) A pending UCBxTXIFG interrupt request is cleared on the falling SCL clock edge following a NACK.
(2) A pending UCSTPIFG, UCSTTIFG, or UCNACKIFG interrupt request is cleared by a following Start condition.

Workaround

(1) Poll the affected flags instead of enabling the interrupts.

(2) Define an ISR for the interrupt vector TRAPINT. If the failure condition occurs; a call to the TRAPINT ISR is made. After the interrupt is serviced, the device returns to the application code and continues execution.

Include the following ISR definition in the application code.

#pragma vector= TRAPINT_VECTOR
__interrupt void TRAPINT_ISR(void)
{
__no_operation();
}

For IDE versions earlier than IAR V4.22 and CCS V4.2 in addition to the above code; include the ISR definition in the device header file.

In IAR Embedded Workbench include the following line in the device header file msp430xxxx.h.

/************************************************************
* Interrupt Vectors (offset from 0xFFE0)
************************************************************/

#define TRAPINT_VECTOR     (0*  2u)   /*INCLUDE THIS LINE IN .h FILE*/
#define PORT1_VECTOR             (2 * 2u)   /* 0xFFE4 Port 1 */

In Code Composer Essentials/Studio include the following line in the device header file msp430xxxx.h.

/************************************************************
* Interrupt Vectors (offset from 0xFFE0)
************************************************************/
#define TRAPINT_VECTOR    (0 * 1u)  /*INCLUDE THIS LINE IN .h FILE*/
#define PORT1_VECTOR            (2 * 1u)     /* 0xFFE4 Port 1 */