一、时钟:
1、一些时钟控制逻辑可以通过设置引脚,使用外接晶振通过内部电路产生时钟源;或者直接使用外部时钟源。它提供三种时钟:
①、高频时钟:用于CPU
②、中频时钟:用于AHB总线上高性能设备(CPU、存储器控制器、中断控制器、LCD控制器、DMA和USB;主机模块等)
③、低频时钟:用于APB总线上低带宽设备(WatchDog、IIS、IIC、PWM定时器、MMC接口、ADC、UART、GPIO、RTC、SPI)
2、获得时钟的一般流程:外部晶振 -> 锁相环 -> 高频时钟 -> 中频时钟 -> 低频时钟。
3、时钟的设置:上电等待晶振输出稳定(此时FCLK=Fin),reset 信号恢复高电平,CPU 开始执行指令。设置分频器(三种时钟比值) -> 必要时还需设置CPU总线为异步模式 -> 设置锁相环确定高频时钟。
①、clock diveder 分频器:FCLK、HCLK、PCLK 通过分频器设置,其存在比例关系。某些情况还需设置其他寄存器。
②、有些芯片需要设置 CPU 总线为异步模式。
③、设置 MPLL,此时 FCLK 停振,CPU 不工作。设置等待时间。之后 MPLL 稳定,使用新 FCLK:(MPLL用于CPU及外围器件。UPLL用于USB)
Ⅰ、MPLL 寄存器:设置 FCLK 与 Fin 的倍数。FCLK Fin 与 MDIV、PDIV、SDIV 有计算公式。
Ⅱ、lock time 寄存器:设置等待 MPLL 稳定的时间。
二、定时器:
1、软件延时:当程序还要执行其他操作(键盘扫描、显示等)时需占用CPU机器周期,会影响精度。
硬件中断定时器:利用定时器溢出中断,在中断服务程序中改变电平的高低。

2、定时器原理:
①、TCMPx 和 TCNTx 初值来自 TCMPBx, TCNTBx。
②、每来一个时钟,预设的计数器 TCNTx 数值" -1 "。
③、当TCNTx == TCMPx,可以产生中断,也可以让对应的SPWM引脚反转(原来是高电平,之后转换成低电平)
④、TCNTx 继续减1。当TCNTx == 0 时,可以产生中断,pwm引脚再次反转(可设置自动加载初始)
3、操作定时器:(设置对应的寄存器。以上图为例)
①、设置时钟:TCFG0, TCFG1。配置 TCFG1 之前先清零。
②、设置初值:TCNTB0。因为暂未用到TCMP,所以不设置。次数减到0会触发中断,相当于周期。
③、加载初值,设为自动加载并启动:TCON。加载完初值后,需在启动 timer 前清除手动更新位。
④、设置 timer 中断:设置中断控制器中 timer 对应的位。
⑤、执行中断程序:在中断模式中读取,如果是定时器中断则处理。
⑥、检查中断:TCNTO0 寄存器的值能显示各寄存器状态。出错时需要用到。
网友评论