[技术问答] 系统初始化

[复制链接]
 楼主| abotomson 发表于 2025-7-15 11:09 | 显示全部楼层 |阅读模式

  1. //内核时钟最高可达到50MHz
  2. #define PLL_CLOCK  50000000//50MHz
  3. void SYS_Init(void)
  4. {
  5.         //解除写保护功能
  6.         //芯片中很多寄存器是写保护的,要写这些寄存器需要先解锁
  7.         SYS_UnlockReg();
  8.        
  9.         /*
  10.                 初始化系统时钟
  11.         */
  12.        
  13.         //使能时钟源,内部高速时钟 22.1184 MHz
  14.         CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);
  15.        
  16.         //等待时钟稳定
  17.         CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);
  18.        
  19.         //设置HCLK时钟源和HCLK分频
  20.         CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC,CLK_CLKDIV_HCLK(1));
  21.        
  22.         //使能时钟源,外部高速时钟 12 MHz
  23.         CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);

  24. //使能PLL时钟,选择选择外部时钟源,倍频到50MHz
  25.         CLK_EnablePLL(CLK_PLLCON_PLL_SRC_HXT, CLK_PLLCON_50MHz_HXT );
  26.        
  27.         //等待时钟稳定,外部高速时钟,PLL时钟,内部低速时钟
  28.         CLK_WaitClockReady(CLK_CLKSTATUS_XTL12M_STB_Msk | CLK_CLKSTATUS_PLL_STB_Msk | CLK_CLKSTATUS_IRC10K_STB_Msk);
  29.        
  30.         /*
  31.                 使能IP时钟。例如UART、ADC、PWM等等
  32.         */
  33.         //串口
  34.        
  35.         //使能串口时钟
  36.         CLK_EnableModuleClock(UART0_MODULE);
  37.        
  38.         //设置串口时钟,时钟源为外部高速时钟,1分频
  39.         CLK_SetModuleClock(UART0_MODULE,CLK_CLKSEL1_UART_S_HXT,CLK_CLKDIV_UART(1));
  40.        
  41.         //PWM

  42.     //使能PWM时钟
  43.         CLK_EnableModuleClock(PWM45_MODULE);

  44.         //设置PWM时钟,时钟源为外部高速时钟,最后一个是无参数
  45.         CLK_SetModuleClock(PWM45_MODULE,CLK_CLKSEL2_PWM45_S_HXT,NULL);
  46.         CLK_EnableModuleClock(PWM67_MODULE);
  47.         CLK_SetModuleClock(PWM67_MODULE,CLK_CLKSEL2_PWM67_S_HXT,NULL);       
  48.        
  49.         //更新系统时钟
  50.         SystemCoreClockUpdate();
  51.        
  52.         /*
  53.                 初始化I/O复用功能
  54.         */
  55.         //串口
  56.         SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk);
  57.         SYS->P3_MFP |= (SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0);

  58.         //使能写保护功能
  59.         SYS_LockReg();
  60. }

  61. 补充:
  62. 新唐的芯片一般有3种软件复位方式:CPU reset、Chip reset和System reset
  63. CPU reset:   就是将 CPU 执行指针 PC 直接指到 0 的地方重新执行程序,其它外设都不复位
  64. Chip reset:  就是整个芯片复位,类似于 POR(power on reset)上电复位的方式,让程序重新执行
  65. System reset:类似于 Chip reset,除了不复位晶振电路和 Config Area 的值不会重新加载,其
  66.                           它的电路都会被复位


您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

1904

帖子

1

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

55

主题

1904

帖子

1

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