[技术问答] 例子是不是有错

[复制链接]
891|7
 楼主| xinpian101 发表于 2018-3-8 18:29 | 显示全部楼层 |阅读模式
ck, rc, se, UART, TI
刚才看到有人发帖关于系统初始化的顺序。说是先选择外设时钟源,再使能外设时钟。
使能外部/内部晶振,并等待晶振稳定(PWRCTL寄存器和CLKSTATUS寄存器)
 选择CPU时钟源(CLKSEL0寄存器)
 选择外设时钟源(CLKSEL1/CLKSEL2等寄存器)
 使能外设时钟(APBCLK寄存器)
 设定GPIO的功能(PA_L_MFP/PA_H_MFP等寄存器)

如上所述。
那么刚才看了一下用库函数写的例子。
  1. void SYS_Init(void)
  2. {
  3.     /*---------------------------------------------------------------------------------------------------------*/
  4.     /* Init System Clock                                                                                       */
  5.     /*---------------------------------------------------------------------------------------------------------*/
  6.     /* Enable Internal RC 22.1184MHz clock */
  7.     CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);

  8.     /* Waiting for Internal RC clock ready */
  9.     CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);

  10.     /* Switch HCLK clock source to Internal RC and HCLK source divide 1 */
  11.     CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC, CLK_CLKDIV_HCLK(1));

  12.     /* Enable external XTAL 12MHz clock */
  13.     CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);

  14.     /* Waiting for external XTAL clock ready */
  15.     CLK_WaitClockReady(CLK_CLKSTATUS_XTL12M_STB_Msk);

  16.     /* Set core clock as PLL_CLOCK from PLL */
  17.     CLK_SetCoreClock(PLL_CLOCK);

  18.     /* Enable UART module clock */
  19.     CLK_EnableModuleClock(UART0_MODULE);

  20.     /* Select UART module clock source */
  21.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_PLL, CLK_CLKDIV_UART(1));

  22.     /*---------------------------------------------------------------------------------------------------------*/
  23.     /* Init I/O Multi-function                                                                                 */
  24.     /*---------------------------------------------------------------------------------------------------------*/

  25.     /* Set P3 multi-function pins for UART0 RXD and TXD */
  26.     SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk);
  27.     SYS->P3_MFP |= (SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0);

  28. }
看上面,对于串口0的时钟配置,竟然是先使能然后设置时钟源,那么这个顺序正确吗,还是这两个可以不分先后呢?
 楼主| xinpian101 发表于 2018-3-8 18:30 | 显示全部楼层
/* Set core clock as PLL_CLOCK from PLL */
    CLK_SetCoreClock(PLL_CLOCK);
还有这个是不是就是设置CPU时钟呢啊?
huangcunxiake 发表于 2018-3-8 21:43 | 显示全部楼层
错误倒是不至于,根据那个结构,其实不分先后顺序的,关系是串联,你先开A,还是开B,最后的结果都是AB同时打开才有效。
 楼主| xinpian101 发表于 2018-4-22 22:28 | 显示全部楼层
串联的关系,不分顺序
yiyigirl2014 发表于 2018-4-23 10:47 | 显示全部楼层
这种不算错误,能运行的。
jiekou001 发表于 2018-4-23 11:52 | 显示全部楼层
我以为什么呢,这个顺序是配置过程中的,颠倒一下也可以运行。
643757107 发表于 2018-4-23 15:51 | 显示全部楼层
只要没有启动前,先配置哪个都可以。
734774645 发表于 2018-4-23 19:06 | 显示全部楼层
看这个模块的结构图,只要合理的顺序都可以。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

130

主题

1651

帖子

1

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