SLAAEN0 September   2024 MSPM0L1227 , MSPM0L1227-Q1 , MSPM0L1228 , MSPM0L1228-Q1 , MSPM0L2227 , MSPM0L2227-Q1 , MSPM0L2228 , MSPM0L2228-Q1

 

  1.   1
  2.   Abstract
  3.   Trademarks
  4. 1Introduction
  5. 2Low-Frequency Subsystem Introduction
    1. 2.1 Resetting LFSS IP Using VBAT
    2. 2.2 Power Domain Supply Detection
      1. 2.2.1 Start-Up Sequences
      2. 2.2.2 LFSS IP Behavior
    3. 2.3 LFXT, LFOSC
    4. 2.4 Independent Watchdog Timer (IWDT)
    5. 2.5 Tamper I/O
      1. 2.5.1 IOMUX Mode
      2. 2.5.2 Tamper Mode
        1. 2.5.2.1 Tamper Event Detection
        2. 2.5.2.2 Timestamp Event Output
        3. 2.5.2.3 Heatbeat Generator
    6. 2.6 Scatchpad Memory (SPM)
    7. 2.7 Real-Time Clock (RTC)
    8. 2.8 VBAT Charging Mode
  6. 3Application Examples
    1. 3.1 Tamper I/O Heartbeat Example
    2. 3.2 RTC Tamper I/O Timestamp Event Example
    3. 3.3 Supercapacitor Charging Example
    4. 3.4 LFOSC Transition Back to LFXT Example
    5. 3.5 RTC_A Calibration
      1. 3.5.1 Peripheral ADC 12
      2. 3.5.2 RTC_A

RTC Tamper I/O Timestamp Event Example

This example needs two Tamper I/O configurations. Configure Tamper I/O 0 as input to act as a tamper event trigger. The timestamp event output captures the event occurrence and RTC records when the event is captured. Next, configure Tamper I/O 1 as output to toggle LED for Heartbeat mode. As the Tamper I/O triggered the rising edge, the TSCTL register captures the first or last event that occurred. The configured LED remains flashing as VDD power loss to show that the heartbeat generator is still functioning and is supplied by VBAT.

#include "ti_msp_dl_config.h"

volatile bool gCheckTSEVT = false;
volatile uint32_t counter = 0;
volatile uint8_t gBlink;

int main(void)
{
    /* Initialization */
    SYSCFG_DL_init();

    /* Enable the RTC interrupt at NVIC */
    NVIC_EnableIRQ(RTC_A_INT_IRQn);

    /* Start RTC clock */
    DL_RTC_A_enableClockControl(RTC_A);

    while (1) {
        __WFI();

        /* Wait in a while() loop until the time stamp interrupt triggers - Trigger a tamper event externally */
        while (gCheckTSEVT == false)
            ;

        /* Blink LED a number of times equal to amount of time stamp events detected */
        if (DL_RTC_A_getTimeStampEventCause(
                RTC_A, DL_RTC_A_TIME_STAMP_EVENT_CAUSE_TIO_0) ==
            DL_RTC_A_TIME_STAMP_EVENT_CAUSE_TIO_0) {
            for (gBlink = 0; gBlink < (2 * counter); gBlink++) {
                DL_GPIO_togglePins(GPIO_LEDS_LED_2_PORT, GPIO_LEDS_LED_2_PIN);
                delay_cycles(16000000);
            }
        }
    }
}

void LFSS_IRQHandler()
{
    switch (DL_RTC_A_getPendingInterrupt(RTC_A)) {
        case DL_RTC_A_IIDX_TSEVT:
            counter++;
            gCheckTSEVT = true;
        default:
            break;
    }
}