[应用方案] 472的篡改检测复位备份演示

[复制链接]
833|4
 楼主| zhuotuzi 发表于 2018-9-9 10:39 | 显示全部楼层 |阅读模式
不知道翻译的对不对,请高手来讲解啊
  1. /**************************************************************************//**
  2. * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url]  V1.00
  4. * $Date: 14/07/31 1:44p $
  5. * [url=home.php?mod=space&uid=247401]@brief[/url]    NUC472/NUC442 General Purpose I/O Driver Sample Code
  6. *           Connect PB.3 and PD.7 to test IO In/Out
  7. *           Test PB2, PC5, PA0(INT0) and PF0(INT5) interrupts
  8. *
  9. * @note
  10. * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
  11. *
  12. ******************************************************************************/
  13. #include <stdio.h>
  14. #include "NUC472_442.h"
  15. #include "gpio.h"

  16. #define PLLCON_SETTING      CLK_PLLCON_84MHz_HXT
  17. #define PLL_CLOCK           84000000

  18. /**
  19. * @brief       GPIO IRQ
  20. *
  21. * @param       None
  22. *
  23. * [url=home.php?mod=space&uid=266161]@return[/url]      None
  24. *
  25. * [url=home.php?mod=space&uid=1543424]@Details[/url]     The GPIO default IRQ, declared in startup_NUC472_442.s.
  26. */


  27. void SYS_Init(void)
  28. {
  29.     /*---------------------------------------------------------------------------------------------------------*/
  30.     /* Init System Clock                                                                                       */
  31.     /*---------------------------------------------------------------------------------------------------------*/
  32.     /* Unlock protected registers */
  33.     SYS_UnlockReg();

  34.     /* Enable External XTAL (4~24 MHz) */
  35.     CLK->PWRCTL |= CLK_PWRCTL_HXTEN_Msk; // XTAL12M (HXT) Enabled

  36.     /* Waiting for 12MHz clock ready */
  37.     CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

  38.     /* Switch HCLK clock source to XTAL */
  39.     CLK->CLKSEL0 &= ~CLK_CLKSEL0_HCLKSEL_Msk;
  40.     CLK->CLKSEL0 |= CLK_CLKSEL0_HCLKSEL_HXT;

  41.     /* Enable IP clock */
  42.     CLK->APBCLK0 |= CLK_APBCLK0_UART0CKEN_Msk; // UART0 Clock Enable
  43.     CLK->APBCLK0 |= CLK_APBCLK0_RTCCKEN_Msk; // RTC Clock Enable

  44.     /* Select IP clock source */
  45.     CLK->CLKSEL1 &= ~CLK_CLKSEL1_UARTSEL_Msk;
  46.     CLK->CLKSEL1 |= (0x0 << CLK_CLKSEL1_UARTSEL_Pos);// Clock source from external 12 MHz or 32 KHz crystal clock

  47.     /* Update System Core Clock */
  48.     /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
  49.     SystemCoreClockUpdate();

  50.     /*---------------------------------------------------------------------------------------------------------*/
  51.     /* Init I/O Multi-function                                                                                 */
  52.     /*---------------------------------------------------------------------------------------------------------*/
  53.     /* Set PG multi-function pins for UART0 RXD, TXD */
  54.     SYS->GPG_MFPL &= ~(SYS_GPG_MFPL_PG1MFP_Msk | SYS_GPG_MFPL_PG2MFP_Msk);
  55.     SYS->GPG_MFPL |= (SYS_GPG_MFPL_PG1MFP_UART0_RXD | SYS_GPG_MFPL_PG2MFP_UART0_TXD);

  56.     /* Lock protected registers */
  57. //    SYS_LockReg();

  58. }

  59. void RTC_init(void)
  60. {
  61.     S_RTC_TIME_DATA_T sRTC_Time;
  62.     /* Time Setting */
  63.     sRTC_Time.u32Year       = 2016;
  64.     sRTC_Time.u32Month      = 12;
  65.     sRTC_Time.u32Day        = 13;
  66.     sRTC_Time.u32Hour       = 12;
  67.     sRTC_Time.u32Minute     = 59;
  68.     sRTC_Time.u32Second     = 50;
  69.     sRTC_Time.u32DayOfWeek  = RTC_TUESDAY;
  70.     sRTC_Time.u32TimeScale  = RTC_CLOCK_24;
  71.    
  72.     RTC_Open(&sRTC_Time);
  73.     RTC_EnableTamperDetection(RTC_TAMPER_0, 1, 0, 1, 1);
  74.     RTC_EnableTamperDetection(RTC_TAMPER_1, 1, 0, 1, 1);
  75. }

  76. /*---------------------------------------------------------------------------------------------------------*/
  77. /* MAIN function                                                                                           */
  78. /*---------------------------------------------------------------------------------------------------------*/
  79. void RTC_AccessEnable()
  80. {
  81.     RTC->RWEN = RTC_WRITE_KEY;
  82.     while(!(RTC->RWEN & RTC_RWEN_RWENF_Msk));
  83. }
  84. int main (void)
  85. {
  86.     int32_t Spare_Data, i;

  87.     SYS_Init();

  88.     /* Init UART to 115200-8n1 for print message */
  89.     UART_Open(UART0, 115200);

  90.     printf("\n\nCPU [url=home.php?mod=space&uid=72445]@[/url] %dHz\n", SystemCoreClock);
  91.     SYS->GPA_MFPL &= ~(SYS_GPA_MFPL_PA1MFP_Msk | SYS_GPA_MFPL_PA2MFP_Msk | SYS_GPA_MFPL_PA0MFP_Msk);
  92.     GPIO_SetMode(PA, (BIT0 | BIT1 | BIT2), GPIO_MODE_OUTPUT);
  93.     PA0 = 0;
  94.     PA1 = 0;
  95.     PA2 = 0;

  96.     SYS->GPA_MFPL &= ~(SYS_GPA_MFPL_PA1MFP_Msk | SYS_GPA_MFPL_PA2MFP_Msk | SYS_GPA_MFPL_PA0MFP_Msk);
  97.     SYS->GPA_MFPL |= (SYS_GPA_MFPL_PA0MFP_TAMPER0  | SYS_GPA_MFPL_PA1MFP_TAMPER1);
  98.     RTC_init();


  99.    // Enable spare register
  100.     RTC_EnableSpareAccess();
  101.     // Write spare register
  102.     for(i = 0; i < 24; i++) {
  103.         RTC_AccessEnable();
  104.         RTC_WRITE_SPARE_REGISTER(i, i+1);
  105.         while(!(RTC->SPRCTL & RTC_SPRCTL_SPRRWRDY_Msk));
  106.     }
  107.    
  108.      while (1)
  109.     {
  110.         // Check spare register data
  111.         for(i = 0; i < 24; i++)
  112.         {
  113.             RTC_AccessEnable();
  114.             Spare_Data = RTC_READ_SPARE_REGISTER(i);
  115.             if(Spare_Data != i+1)
  116.             {
  117.                 PA2 = 0;
  118.             }
  119.             else
  120.             {
  121.                 PA2 = 1;
  122.             }
  123.         }
  124.     }  
  125. }




 楼主| zhuotuzi 发表于 2018-9-9 10:42 | 显示全部楼层
NUC472_442 侦测RTC PA[1:0] Tamper pin, 若异常将清除96 bytes spare registers Sample Code.

antusheng 发表于 2018-9-9 19:44 | 显示全部楼层
貌似一个RTC的应用,没见过。
dongliushui 发表于 2018-9-9 19:47 | 显示全部楼层
目前还没用过这个功能。MARK,学习一下。
幸福小强 发表于 2018-9-9 21:21 | 显示全部楼层
没看懂啥意思。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

214

主题

3375

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部