硬件(6)——定时器
硬件中如何确定引脚电平的高低?硬件内部有一个比较器类似门电路有两个输入一个输出其中一个输入接稳定的参考值DCDC 3.3V另一个输入接引脚。当引脚高于3.3V就输出高电平引脚低于3.3V就输出低电平。但是硬件接触频率是带有波动的可能会在3.3V附近多次浮动跳跃那么下降沿触发多次就无法实现精准中断控制。硬件上RC低通滤波可处理高频的干扰但是无法处理低频的干扰。软件上的解决方法延时检测电平变化。为了精准控时我们可以使用定时器。一、定时器概念定时器 (EPIT/GPT)是一个通过对已知频率的时钟信号进行计数来实现定时、延时或事件计数功能的硬件模块或软件机制。时钟(clock)在电子系统中是一个产生稳定、周期性振荡信号的电路或组件。时钟源晶体震荡器。工作原理利用石英晶体的压电效应和固有谐振频率来产生高度稳定的电信号。PLLphase locked loop锁相环电路倍频因子N只能升频不能降频Prescale分频器分频因子M只能降频不能升频PFDphase fractional Prescale相位分数分频器输出频率可升可降二、CCM时钟树CCM时钟树有PLL1~PLL77个PLL8个PFD。PLL1 --- ARM内核的时钟路默认396M。PLL2 --- system系统时钟固定528M。PLL3 --- USB1 PLL固定480M。1. PLL1ARM PLL配置流程396M-528M先选择osc_clk让step_clk为24MHz再将PLL1的输出改成step_clk让ARM暂时工作在24MHz;配置PLL为1056注意设置倍频因子之前先把PLL之后的二分频设置好避免ARM内核故障最后改回pll1_main_clkCCM-CCSRbit80表示选择osc_clk (24M)1选择secondary_clk。bit20则pll1_main_clk1则step_clk。CCM-CACRR低三位设置分频因子M2分频。CCM_ANALOG-PLL_ARMbit15-140选择24M晶振。bit131开启时钟。低七位(div_select)设置倍频因子N范围在54~108。Fout Fin * div_select /2.0目标输出1056M 24M * 88 / 2所以倍频因子置88。2. PLL2、PLL3PLL2、PLL3各有4路独立分频输出通道PLLx_PFDx固定频率*18/PLLx_FRAC。CCM_ANALOG-PFD_528 ~((0x3F 0) | (0x3F 8) | (0x3F 16)| (0x3F 24)); CCM_ANALOG-PFD_528 | (27 0) | (16 8) | (24 16) | (32 24); CCM_ANALOG-PFD_480 ~((0x3F 0) | (0x3F 8) | (0x3F 16)| (0x3F 24)); CCM_ANALOG-PFD_480 | (12 0) | (16 8) | (17 16) | (19 24);3. 时钟根PLL2时钟源输出的高频信号经时钟根分频到合适总线和外设的工作频率。1.AHB_CLK_ROOT132MCCM-CBCMRbit19、1801选择PLL2_PFD2分频。CCM-CBCDRbit250选择PFD2支路。bit12-10010设置3分频因子。2.IPG_CLK_ROOT66MCCM-CBCDR:bit9、8设置2分频。3.PERCLK_CLK_ROOT66MCCM-CSCMR1bit60表示选择ipg clk root。低6位设置分频因子M。三、EPIT定时器EPITEnhanced Periodic Interrupt Timer:增强型周期中断定时器。EPIT 是一个32位的向下计数器给它一个初值它就会从这个给定的初值开始递减直到减为0计数寄存器里面保存的就是当前的计数值。比较寄存器里面保存的数值用于和计数寄存器里面的计数值比较如果相等的话就会产生一个比较事件。在EPIT内部有三个寄存器计数寄存器(EPIT_CNR)只读寄存器。加载寄存器(EPIT_LR)在set-and-forget模式下装载寄存器初值。比较寄存器(EPIT_CMPR)寄存器值为0。EPIT两个工作模式set-and-forget设置并遗忘EPIT 工作在该模式下当计数寄存器里面的值减少到 0EPIT 就会重新从加载寄存器读取数值到计数寄存器里面重新开始向下计数free-running 模式此模式下当计数器计数到 0 以后会重新从0XFFFFFFFF 开始计数。EPIT设置步骤为1. 设置 EPIT1 的时钟源。EPIT1-CR:bit25:2401选择ipg_clk2. 设置分频值。EPIT1-CR:bit15:4置M653. 设置工作模式。EPIT1-CR:bit30则free-running 模式,1则set-andforget 模式4. 设置计数器的初始值来源。EPIT1-CR:bit1置1表示计数器初值来源加载值5. 使能比较中断。EPIT1-CR:bit20关闭比较中断1开启6. 设置加载值和比较值。EPIT-LR、EPIT-CMPR7. 设置EPIT1 中断服务函数8. 使能 EPIT1 定时器。EPIT1-CR:bit01开启EPIT1定时器。四、GPT定时器GPTGeneral Purpose Timer通用目的定时器。GPT 定时器是一个 32 位向上定时器(也就是从0开始向上递增计数)GPT 定时器可以跟一个值进行比较当计数器值和这个值相等的话就发生比较事件产生比较中断。GPT计数器可以运行在重新启动(restart)或自由运行(free-run) 模式。GPT1-CR:bit28:26000输出断开001翻转输出引脚。bit19、180表示禁止捕获。bit90工作在重新启动(restart)模式,1工作在自由运行模式(free-run)。bit8:6000 关闭时钟源001 选择ipg_clk 作为时钟源bit1关闭 GPT 定时器后0表示计数器寄存器保存定时器关闭时候的计数值1表示定时器计数器寄存器就会清零。bit01 的时候使能 GPT 定时器为 0 的时候关闭 GPT 定时器。GPT1-PR:用于保存分频值bit11:0,可设置 0~4095分别对应 1~4096 分频。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2466465.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!