这是最新(主)开发分支的文档。如果您正在查找以前版本的文档,使用左侧的下拉菜单选择所需的版本。

RCC

简介

RCC 负责管理各个时钟源和时钟分频,为各个外设提供时钟使能。

功能列表

  • 支持开关其它模块的时钟,比如: I2C、UART、SPI、DMA 等

  • 支持复位其它模块时钟

  • 支持 CPU/WLAN/Peripheral 等的频率设置

RCC HW 支持的功能

各功能介绍

开关时钟

相关时序 API:

  • 调用 wm_drv_clock_init 初始化时钟, 如果设备已经初始化,则通过 wm_dt_get_device_by_name 函数来获取设备指针

  • 调用 wm_drv_clock_enable 打开对应模块的时钟

  • 调用 wm_drv_clock_disable 关闭对应模块时钟

支持开关的时钟模块如下

  • I2C, UART, SPI, DMA, RF, TIMER, GPIO, SD_ADC, PWM, LCD, I2S, RSA,

  • GPSEC, SDIOM, QSRAM, BT, TOUCH

时钟复位

相关时序 API:

  • 调用 wm_drv_clock_init 初始化时钟, 如果设备已经初始化,则通过 wm_dt_get_device_by_name 函数来获取设备指针

  • 调用 wm_drv_clock_reset 复位模块时钟

结果:

  • 复位成功之后,对应模块回到初始化状态,比如对SPI复位,则SPI模块将会恢复到初始化状态

可复位的模块:

  • BBP, MAC, SEC, SDIO_AHB, DMA, MEM_MNG, APB, I2C, UART,SPIM, SPIS

  • RF, GPIO, TIMER, SAR_ADC, PWM, LCD, I2S, RSA, QPSEC, SDIOM, BT, FLASH, TOUCH

警告

在系统运行起来之后,某些模块不能够再复位,如果强制复位可能会造成系统无法正常运行

时钟频率设置

  • 设置对应模块的时钟

相关时序 API:

  • 调用 wm_drv_clock_init 初始化时钟, 如果设备已经初始化,则通过 wm_dt_get_device_by_name 函数来获取设备指针

  • 调用 wm_drv_rcc_config_clock 设置指定时钟模块频率

  • 调用 wm_drv_rcc_get_config_clockk 查询指定模块当前时钟频率

可配置时钟的模块如下:

  • CPU, WLAN, SD_ADC, QFLASH, GPSEC, RSA, PERIPHERAL

警告

随意设置时钟可能会导致系统无法正常运行,建议只对 CPU 时钟进行配置,并且配置的时钟能够被 480 整除

应用实例

Clock initial范例
wm_drv_clock_init();
wm_drv_clock_disable(WM_RCC_CLOCK_ALL);
wm_drv_clock_enable(WM_RCC_UART0_GATE_EN | WM_RCC_UART1_GATE_EN |
               WM_RCC_RF_CFG_GATE_EN | WM_RCC_GPIO_GATE_EN |
               WM_RCC_SD_ADC_GATE_EN | WM_RCC_TOUCH_GATE_EN); //enable UART, RF, GPIO, SD_ADC, TOUCH时钟
wm_drv_rcc_config_clock(WM_RCC_TYPE_CPU, 240);  //配置 CPU 时钟为240Mhz

API参考

RCC API 参考