board_syclk.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "sysctrl.h"
  2. #include "flash.h"
  3. static volatile uint32_t sys_ticks = 0;
  4. //systick中断函数
  5. void SysTick_IRQHandler(void)
  6. {
  7. // static boolean_t bFlag = TRUE;
  8. //
  9. // if(TRUE == bFlag)
  10. // {
  11. // bFlag = FALSE;
  12. // Gpio_WriteOutputIO(STK_Module_LED_PORT, STK_Module_LED_PIN, TRUE); //LED 引脚输出高电平
  13. // }
  14. // else
  15. // {
  16. // bFlag = TRUE;
  17. // Gpio_WriteOutputIO(STK_Module_LED_PORT, STK_Module_LED_PIN, FALSE); //LED引脚输出低电平
  18. // }
  19. sys_ticks++;
  20. }
  21. uint32_t sys_tick_get(void)
  22. {
  23. return sys_ticks;
  24. }
  25. //时钟初始化配置
  26. void board_sysclkInit(void)
  27. {
  28. stc_sysctrl_clk_cfg_t stcCfg;
  29. ///< 开启FLASH外设时钟
  30. Sysctrl_SetPeripheralGate(SysctrlPeripheralFlash, TRUE);
  31. ///<========================== 时钟初始化配置 ===================================
  32. ///< 因要使用的时钟源HCLK小于24M:此处设置FLASH 读等待周期为0 cycle(默认值也为0 cycle)
  33. Flash_WaitCycle(FlashWaitCycle0);
  34. ///< 时钟初始化前,优先设置要使用的时钟源:此处设置RCH为4MHz
  35. Sysctrl_SetRCHTrim(SysctrlRchFreq4MHz);
  36. ///< 选择内部RCH作为HCLK时钟源;
  37. stcCfg.enClkSrc = SysctrlClkRCH;
  38. ///< HCLK SYSCLK/1
  39. stcCfg.enHClkDiv = SysctrlHclkDiv1;
  40. ///< PCLK 为HCLK/1
  41. stcCfg.enPClkDiv = SysctrlPclkDiv1;
  42. ///< 系统时钟初始化
  43. Sysctrl_ClkInit(&stcCfg);
  44. }
  45. //将时钟从RCH4MHz切换至RCH24MHz,
  46. void board_Rch4MHzTo24MHz(void)
  47. {
  48. ///<============== 将时钟从RCH4MHz切换至RCH24MHz ==============================
  49. ///< RCH时钟不同频率的切换,需要先将时钟切换到RCL,设置好频率后再切回RCH
  50. Sysctrl_SetRCLTrim(SysctrlRclFreq32768);
  51. Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE);
  52. Sysctrl_SysClkSwitch(SysctrlClkRCL);
  53. ///< 加载目标频率的RCH的TRIM值
  54. Sysctrl_SetRCHTrim(SysctrlRchFreq24MHz);
  55. ///< 使能RCH(默认打开,此处可不需要再次打开)
  56. //Sysctrl_ClkSourceEnable(SysctrlClkRCH, TRUE);
  57. ///< 时钟切换到RCH
  58. Sysctrl_SysClkSwitch(SysctrlClkRCH);
  59. ///< 关闭RCL时钟
  60. Sysctrl_ClkSourceEnable(SysctrlClkRCL, FALSE);
  61. }