02、W601配置时钟

02、W601配置时钟

一、w601时钟树

在这里插入图片描述

如图就是W601整个芯片的时钟树,暂时对我们初始化系统时钟没有什么用,不过以后配置基本外设时钟还是有用的。

因为W601是M3内核,所以还是看内核。

……看了一下W601的SDK的API,已经为我们提供了配置系统时钟的接口:

void tls_sys_clk_set(u32 clk);

没错,只要调用这个接口就好了。其实我也找了寄存器文档,并没有介绍有关系统时钟的配置,只知道W601可以工作在80MHz。既然提供了接口那就用吧。其中SDK有个wm_regs.h文件,顾名思义,这就是寄存器配置,在其中可以找到有关W601的寄存器的地址,这个是由厂家提供的。

那是不是直接调用一下这个接口就行了呢?其实也是可以的,但是我们要考虑到整个芯片的结构,根据整个板子的特点来初始化系统时钟,并且封装成一个函数。

在这里插入图片描述

如图就是W601的芯片结构图。

这里我们仿照linux arm 板BootLoader中的写法,把时钟初始化放到.S汇编文件中,这样在配置好系统时钟之后在让程序进入到main函数,那么我们需要在配置系统时钟里面干些什么呢?

  • 初始化系统时钟
  • 关闭所有IO口的复用功能
  • 配置中断优先级组
  • 配置低功耗模式
  • 配置PMU的时钟,因为芯片的框图里面有PMU,PMU 部分作为芯片的常供电模块提供了上电时序管理,起振时钟,实时时钟功能等
void SystemInit(void)
{
    /*系统时钟设置为80MHz*/
    tls_sys_clk_set(CPU_CLK_80M);

	/*关闭所有IO的复用功能,只开启SWD复用功能*/
	wm_gpio_af_disable();

	/*中断优先级组配置*/
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);

	/*配置深度睡眠低功耗模式*/
	NVIC_SystemLPConfig(NVIC_LP_SLEEPDEEP, ENABLE);

	/*选择PMU时钟*/
	tls_pmu_clk_select(0);
}

配置好系统时钟需要把它放到汇编启动文件当中,我们先让系统时钟初始化然后再跳转到main函数中。

; Reset handler
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
		IMPORT  __main
		IMPORT  SystemInit
				LDR     R0, =SystemInit
				BLX     R0
				MOV		R0, #0
				MSR 	PRIMASK,R0
                LDR     R0, =__main
                BX      R0
                ENDP

到此,关于W601的系统时钟就配置好了。

       BX      R0
            ENDP

到此,关于W601的系统时钟就配置好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值