SLAZ299AD October   2012  – August 2021 MSP430F5508

 

  1.   1
  2.   2
  3.   3
  4.   4
  5.   5
    1.     6
    2.     7
      1.      8
      2.      9
      3.      10
      4.      11
    3.     12
  6.   13
    1.     14
    2.     15
    3.     16
    4.     17
    5.     18
    6.     19
    7.     20
    8.     21
    9.     22
    10.     23
    11.     24
    12.     25
    13.     26
    14.     27
    15.     28
    16.     29
    17.     30
    18.     31
    19.     32
    20.     33
    21.     34
    22.     35
    23.     36
    24.     37
    25.     38
    26.     39
    27.     40
    28.     41
    29.     42
    30.     43
    31.     44
    32.     45
    33.     46
    34.     47
    35.     48
    36.     49
    37.     50
    38.     51
    39.     52
    40.     53
    41.     54
    42.     55
    43.     56
    44.     57
    45.     58
    46.     59
    47.     60
    48.     61
    49.     62
    50.     63
    51.     64
    52.     65
    53.     66
    54.     67
    55.     68
    56.     69
    57.     70
    58.     71
    59.     72
    60.     73
    61.     74
    62.     75
    63.     76
    64.     77
    65.     78
    66.     79
    67.     80
  7.   81

CPU40

CPU Module

Category

Compiler-Fixed

Function

PC is corrupted when executing jump/conditional jump instruction that is followed by instruction with PC as destination register or a data section

Description

If the value at the memory location immediately following a jump/conditional jump instruction is 0X40h or 0X50h (where X = don't care), which could either be an instruction opcode (for instructions like RRCM, RRAM, RLAM, RRUM) with PC as destination register or a data section (const data in flash memory or data variable in
RAM), then the PC value is auto-incremented by 2 after the jump instruction is executed; therefore, branching to a wrong address location in code and leading to wrong program execution.

For example, a conditional jump instruction followed by data section (0140h).

@0x8012   Loop     DEC.W  R6
@0x8014            DEC.W  R7
@0x8016            JNZ    Loop
@0x8018   Value1   DW     0140h

Workaround

In assembly, insert a NOP between the jump/conditional jump instruction and program code with instruction that contains PC as destination register or the data section.

Refer to the table below for compiler-specific fix implementation information.

IDE/Compiler Version Number Notes
IAR Embedded Workbench IAR EW430 v5.51 or later For the command line version add the following information Compiler: --hw_workaround=CPU40 Assembler:-v1
TI MSP430 Compiler Tools (Code Composer Studio) v4.0.x or later User is required to add the compiler or assembler flag option below. --silicon_errata=CPU40
MSP430 GNU Compiler (MSP430-GCC) Not affected