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

 

  1.   1
  2.   摘要
  3.   商标
  4. 1引言
  5. 2低频子系统简介
    1. 2.1 使用 VBAT 对 LFSS IP 进行复位
    2. 2.2 电源域电源检测
      1. 2.2.1 启动序列
      2. 2.2.2 LFSS IP 行为
    3. 2.3 LFXT、LFOSC
    4. 2.4 独立看门狗计时器 (IWDT)
    5. 2.5 防篡改 I/O
      1. 2.5.1 IOMUX 模式
      2. 2.5.2 防篡改模式
        1. 2.5.2.1 篡改事件检测
        2. 2.5.2.2 时间戳事件输出
        3. 2.5.2.3 检测信号发生器
    6. 2.6 便笺式存储器 (SPM)
    7. 2.7 实时时钟 (RTC)
    8. 2.8 VBAT 充电模式
  6. 3应用示例
    1. 3.1 防篡改 I/O 检测信号示例
    2. 3.2 RTC 防篡改 I/O 时间戳事件示例
    3. 3.3 超级电容器充电示例
    4. 3.4 LFOSC 转换回 LFXT 的示例
    5. 3.5 RTC_A 校准
      1. 3.5.1 外设 ADC 12
      2. 3.5.2 RTC_A

RTC 防篡改 I/O 时间戳事件示例

此示例需要两种防篡改 I/O 配置。将防篡改 I/O 0 配置为输入以用作篡改事件触发器。时间戳事件输出可捕获事件发生情况,RTC 则记录捕获事件的时间。接下来,将防篡改 I/O 1 配置为输出以切换检测信号模式的 LED。在防篡改 I/O 触发上升沿时,TSCTL 寄存器将捕获发生的第一个或最后一个事件。配置的 LED 会在 VDD 断电时一直闪烁,表明检测信号发生器仍在运行并由 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;
    }
}