ZHCAEI9 September 2024 MSPM0L1227 , MSPM0L1227-Q1 , MSPM0L1228 , MSPM0L1228-Q1 , MSPM0L2227 , MSPM0L2227-Q1 , MSPM0L2228 , MSPM0L2228-Q1
此示例需要两种防篡改 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;
}
}