SLAZ196I October   2012  – May 2021 MSP430F423

 

  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.      PM64
    3. 5.3 Memory-Mapped Hardware Revision (TLV Structure)
  6. 6Advisory Descriptions
    1. 6.1  CPU4
    2. 6.2  EEM20
    3. 6.3  ESP1
    4. 6.4  ESP2
    5. 6.5  ESP3
    6. 6.6  ESP4
    7. 6.7  ESP5
    8. 6.8  FLL3
    9. 6.9  MPY2
    10. 6.10 SD1
    11. 6.11 SD2
    12. 6.12 TA12
    13. 6.13 TA16
    14. 6.14 TA21
    15. 6.15 TAB22
    16. 6.16 US15
    17. 6.17 WDG2
  7. 7Revision History

ESP2

ESP Module

Category

Functional

Function

Negative Energy Flag Operation

Description

The NEGENFG negative energy flag treatment inside the ESP430 module is executed after each mains cycle and is set according to the energy accumulated during this period. Therefore the flag is set under two conditions:
- if during at least one mains cycle period over the last second the accumulated energy in the ACTENSPER register was negative
- if the accumulated energy in the ACTENERGY register is negative.

Workaround

If the indication of the negative energy status is required by the application, it can be done with the following sequence in CPU software.

1. Set negative energy bits: NE0 = 0, NE1 = 1   (negative energy is summed)

2. Perform the required steps manually software after new energy samples are available from the ESP430CE1:
- Check if the energy is negative and set the negative energy flag
- Correct the energy to positive values if required.

if ((msg_data & ENRDYFG))
    {
       if ((ACTENERGY1_HI & 0x8000) > 0 ) {// Negative Energy measured?
        negenfg = 1;        // set global neg. Energy Flag
       }else{
         negenfg = 0;       // clear global neg. Energy Flag
       }

      if (negenfg == 1){ // Negative Energy measured?
         total_energy -= (float)energy.l;
      }else{
         total_energy += (float)energy.l;
      }
    } // End of if ((msg_data & ENRDY)