[技术问答] M058S的HCLK时钟源设置方式,寄存器与库函数差异

[复制链接]
 楼主| gejigeji521 发表于 2023-10-10 15:06 | 显示全部楼层 |阅读模式
上面的寄存器配置方式是例子中的,例子未能使用库函数配置。我查找库函数找到了一条说明与上面寄存器配置说明一样的函数,不知道是否是一样的。
786806524f74e3fab6.png
另外看,库函数包含了寄存器的这四条操作内容,但是多了一些其他的考虑,是否说,库函数做的更加保险?
  1. void CLK_SetHCLK(uint32_t u32ClkSrc, uint32_t u32ClkDiv)
  2. {
  3.     uint32_t u32HIRCSTB;

  4.     /* Read HIRC clock source stable flag */
  5.     u32HIRCSTB = CLK->CLKSTATUS & CLK_CLKSTATUS_OSC22M_STB_Msk;

  6.     /* Switch to HIRC for Safe. Avoid HCLK too high when applying new divider. */
  7.     CLK->PWRCON |= CLK_PWRCON_OSC22M_EN_Msk;
  8.     CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);
  9.     CLK->CLKSEL0 = (CLK->CLKSEL0 & (~CLK_CLKSEL0_HCLK_S_Msk)) | CLK_CLKSEL0_HCLK_S_HIRC;

  10.     /* Apply new Divider */
  11.     CLK->CLKDIV = (CLK->CLKDIV & (~CLK_CLKDIV_HCLK_N_Msk)) | u32ClkDiv;

  12.     /* Switch HCLK to new HCLK source */
  13.     CLK->CLKSEL0 = (CLK->CLKSEL0 & (~CLK_CLKSEL0_HCLK_S_Msk)) | u32ClkSrc;

  14.     /* Update System Core Clock */
  15.     SystemCoreClockUpdate();

  16.     /* Disable HIRC if HIRC is disabled before switching HCLK source */
  17.     if(u32HIRCSTB == 0)
  18.         CLK->PWRCON &= ~CLK_PWRCON_OSC22M_EN_Msk;
  19. }
复制代码


yiy 发表于 2023-10-10 15:24 | 显示全部楼层
这个差异应该是个花招,应该左移24,再右移24,最后就又折腾回去了。这个在编译阶段就给还原了。
yiy 发表于 2023-10-10 15:25 | 显示全部楼层
推荐使用寄存器这个,这个考虑更加全面。
华力电子 发表于 2023-10-10 17:23 来自手机 | 显示全部楼层
这个问题,可以找新唐技术支持问一下qq 1593449604
您需要登录后才可以回帖 登录 | 注册

本版积分规则

195

主题

2460

帖子

8

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