0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

敏矽微电子Cortex-M0学习笔记08——基本定时器详解

jf_pJlTbmA9 来源:敏矽MCU 作者:敏矽MCU 2023-09-26 17:13 次阅读

1、ME32F030基本定时器简介

ME32F030内置 4 个基本功能的 16 位定时器/计数器。 定时器/计数器工作时钟由 SYSAHBCLKDIV 寄存器控制。关闭 SYSAHBCLKDIV 寄存器中定时器/计数器的时钟供给可节省系统功耗。主要功能如下:

• 可预置分频的 16 位定时器/计数器

• 1 个 16 位匹配寄存器:

–可产生中断

–停止定时器

–对定时器复位

16 位基本型定时器/计数器模块框图如下图所示:

wKgZomUD0iGAPqQrAAD5znpO1W0238.png

图1 基本定时器结构图

为了便于理解,可以将基本定时器框图分为4个功能单元。

①:预分频计数单元,由PRESCALE COUNTER (PC) 和 PRESCALE REGISTER (PR)组成,预分频计数器(PC)会在每个 PCLK 时钟上递增计数。达到设定的预分频值后,定时器计数器就会加1,而预分频值就是由PR寄存器决定的。

②:定时器计数单元,由TIMER COUNTER (TC) 和 TIMER CONTROL REGISTER (TCR)组成,定时器控制寄存器TCR决定计数器TC是否启用。预分频计数器(PC)溢出后,定时器计数器(TC)加1,达到设定的匹配值MR0之后可以根据设置产生中断等行为。

③:定时器匹配单元:该单元只有一个MATCH REGISTER0(MR0),它决定着定时器计数器TC的匹配值。

④:定时器控制单元,由MATCH CONTROL REGISTER (MCR) 和 INTERRUPT REGISTER (IR)组成,二者共同作用,控制着定时器的主要功能和参数

2、ME32F030基本定时器寄存器

在简介中,我们介绍了基本定时器的模块框图,其实每个功能模块都有对应的寄存器来实现其功能。基本定时器的寄存器列表如图所示:

wKgaomUD0iKAMUrkAAHytoa_HG4233.png

2-1 中断寄存器

中断寄存器包含用于匹配中断的位。如果有中断产生, IR 中的相应位为高电平。否则,该位为低电平。向对应的 IR 位写逻 辑 1 会使中断复位。写 0 无效。

2-2 定时器控制寄存器

定时器控制寄存器用于控制计数器/定时器的操作。它主要控制着计数器的使能和复位,具体的操作如图所示:

wKgZomUD0iSAffthAAEopvoottI547.png

图3 控制寄存器

2-3 定时器计数寄存器

当预分频器计数器达到其 PC 数值时, 16 位定时器计数器会递增计数。如果 TC 在到达计数器上限之前没有复位,它将一直 计数到 0x0000 FFFF 然后翻转到 0x0000 0000。该事件不会产生中断,如果需要,可使用匹配寄存器检测溢出。

2-4 预分频寄存器

16 位预分频寄存器指定预分频计数器的最大值。当预分频计数器计数到此值后,会从0开始重新计数。

2-5 预分频计数寄存器

16 位预分频计数器用某个常量来控制 PCLK 的分频,再使其输入到定时器计数器。它所控制的是定时器分辨率与最大时间之间的关系,从而能防止定时器溢流。预分频计数器会在每个 PCLK 时钟上递增计数。当预分频计数器的计数达到预分频寄存器中存储的值时,定时器计数器将递增计数,并且在下一个 PCLK 时钟上对预分频计数器复位。这将使得 TC 当 PR = 0 时在每个 PCLK 上递增计数,当 PR = 1 时,在每 2 个 PCLK 上递增计数,依次类推。.

2-6 匹配控制寄存器

匹配控制寄存器用于控制当其中一个匹配寄存器的值与定时器计数器的值匹配时应执行的操作。功能如下所示。

位0:决定着计数器TC与匹配值相等后,中断是否使能。

位1:MR0与TC匹配时,决定TC是否复位。如果选择复位,TC则会清0重新计数,这样就会形成一个固定时间的计数周期。

位2:MR0与TC匹配时,决定TC是否停止。如果置1选择使能,TC则不再会计数。这样就是个单次周期的计数了。如果想要周期性循环计数,那么就需要置0(默认)禁止。

wKgZomUD0iWACFs0AAERNVcBybY939.png

图4 匹配控制寄存器

2-7 匹配寄存器

匹配寄存器的值会不断地与定时器计数器值进行比较。当两个值相等时,自动触发相应操作。这些操作包括产生中断、复位定时器计数器或停止定时器。所有操作均由 MCR 寄存器中的设置控制。

3、基本定时器驱动函数

在例程LIB->common->Drivers->Source文件夹内有timer.c文件,这个就是提供的定时器库程序,里面除了基本定时器的驱动函数,还包括高级定时器、PWM输出等功能函数,本章节先对基本定时器的函数进行讲解。

3-1 基本定时器初始化

ct:要初始化的定时器模块,可选TIM0、TIM1、TIM2、TIM3。

tickpersecond:预分频系数。

voidTIM0_Init(TIM0_Type*ct,uint32_ttickpersecond)
{
if(ct==TIM0)
{
SYSCON->SYSAHBCLKCTRL_b.TIM0_CLK=1;//使能定时器时钟
SYSCON->PRESETCTRL_b.TIM0_RST_N=0;//复位定时器
SYSCON->PRESETCTRL_b.TIM0_RST_N=1;
}

elseif(ct==TIM1)
{

SYSCON->SYSAHBCLKCTRL_b.TIM1_CLK=1;

SYSCON->PRESETCTRL_b.TIM1_RST_N=0;

SYSCON->PRESETCTRL_b.TIM1_RST_N=1;
}

elseif(ct==TIM2)
{
SYSCON->SYSAHBCLKCTRL_b.TIM2_CLK=1;

SYSCON->PRESETCTRL_b.TIM2_RST_N=0;

SYSCON->PRESETCTRL_b.TIM2_RST_N=1;
}

elseif(ct==TIM3)
{

SYSCON->SYSAHBCLKCTRL_b.TIM3_CLK=1;

SYSCON->PRESETCTRL_b.TIM3_RST_N=0;

SYSCON->PRESETCTRL_b.TIM3_RST_N=1;

}elsereturn;

//设置预分频系数
if(tickpersecond>SystemCoreClock)
tickpersecond=SystemCoreClock;
ct->PR_b.PRVAL=SystemCoreClock/tickpersecond-1;
return;
}

3-2 设置匹配寄存器

这个函数用于设置定时器的匹配值,以及达到匹配值之后的行为。

Ct:要设置的定时器模块,可选TIM0、TIM1、TIM2、TIM3。

Ticks:要写入的计数器匹配值。

Action: 触发中断 TIM_MATCH_TRIGGER_INT

复位计数器 TIM_MATCH_RESET_COUNTER

停止计数器 TIM_MATCH_STOP_COUNTER

voidTIM0_ConfigMatch(TIM0_Type*ct,uint16_tticks,uint8_taction)
{
ct->MR0_b.MATCH=ticks-1;
ct->MCR=action;
return;
}

3-3 设置预分频计数器值

voidTIM0_SetTimerCounter(TIM0_Type*ct,uint16_ttick)
{
ct->PC_b.PCVAL=tick;
return;
}

3-4 复位预分频计数器值

voidTIM0_ResetTimerCounter(TIM0_Type*ct)
{
ct->PC_b.PCVAL=0;
return;
}

来源:敏矽MCU

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117719
  • 计数器
    +关注

    关注

    32

    文章

    2121

    浏览量

    92976
  • 定时器
    +关注

    关注

    23

    文章

    3147

    浏览量

    112036
  • Cortex-M0
    +关注

    关注

    4

    文章

    122

    浏览量

    38353
收藏 人收藏

    评论

    相关推荐

    cortex-m0学习资料

    本帖最后由 jheng 于 2015-4-9 21:54 编辑 cortex-m0学习
    发表于 04-09 21:48

    【ARM Cortex-M0视频教程 By SmartMcu】【系统定时器SysTick】

    本帖最后由 rejoice818 于 2015-5-19 13:58 编辑 ARM Cortex-M0视频教程- 系统定时器SysTick【SmartMcu】视频地址:http://pan.baidu.com/s/1eQngXSQ
    发表于 05-19 13:50

    ARM Cortex-M0权威指南(英文版)

    , 153, 153) !important]2016-2-3 13:41 上传本书是全球首本系统论述ARM Cortex-M0处理及其编程的图书。本书既有ARM Cortex-M0处理
    发表于 10-08 16:46

    灵动微电子获得ARM® Cortex® -M0Cortex® -M3无限次授权

    次使用ARM® Cortex®-M0Cortex®-M3 CPU内核及IP工具包。基于该协议,灵动微电子可以在协议范围内不受授权次数限制的
    发表于 10-18 14:20

    STM32F103系统定时器学习笔记

    指正,如有侵权,联系删帖!**SysTick简介:SYSTick——系统定时器是属于Cortex-M3内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit 的向下递减的计数
    发表于 08-18 08:12

    ARM Cortex-M0+内核定时器

    慕课苏州大学.嵌入式开发及应用.第三章.基本模块.ARM Cortex-M0+内核定时器 (Systic0 目录3 基本模块3.1 ARM Cortex-M0+内核
    发表于 11-08 06:36

    具有Cortex-M4和Cortex-M0的不对称双核数字信号控制

    首款具有Cortex-M4和Cortex-M0的不对称双核数字信号控制;NXP 150 MHz,32位Cortex-M4 / Cortex-M0
    发表于 12-06 06:09

    ARM Cortex-M0设计启动评估用户指南

    Cortex-M0 DesignStart Eval为开发人员提供了一种简单的方法来模拟基于Cortex-M0处理的SoC设计。 它允许系统设计人员在模拟上进行设计和测试,然后使用
    发表于 08-18 07:58

    敏矽微电子Cortex-M0学习笔记07——串口通信详解

    敏矽微电子Cortex-M0学习笔记07——串口通信详解
    的头像 发表于 09-26 17:11 727次阅读
    敏矽<b class='flag-5'>微电子</b><b class='flag-5'>Cortex-M0</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>07——串口通信<b class='flag-5'>详解</b>

    敏矽微电子Cortex-M0学习笔记06——段式LCD液晶实例

    敏矽微电子Cortex-M0学习笔记06——段式LCD液晶实例
    的头像 发表于 09-26 17:10 458次阅读
    敏矽<b class='flag-5'>微电子</b><b class='flag-5'>Cortex-M0</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>06——段式LCD液晶实例

    敏矽微电子Cortex-M0学习笔记05——端口外部中断实例

    敏矽微电子Cortex-M0学习笔记05——端口外部中断实例
    的头像 发表于 09-26 17:10 446次阅读
    敏矽<b class='flag-5'>微电子</b><b class='flag-5'>Cortex-M0</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>05——端口外部中断实例

    敏矽微电子Cortex-M0学习笔记04——GPIO详解及应用实例

    敏矽微电子Cortex-M0学习笔记04——GPIO详解及应用实例
    的头像 发表于 09-26 17:07 600次阅读
    敏矽<b class='flag-5'>微电子</b><b class='flag-5'>Cortex-M0</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>04——GPIO<b class='flag-5'>详解</b>及应用实例

    敏矽微电子Cortex-M0学习笔记03——时钟系统设计例程

    敏矽微电子Cortex-M0学习笔记03——时钟系统设计例程
    的头像 发表于 09-26 17:06 485次阅读
    敏矽<b class='flag-5'>微电子</b><b class='flag-5'>Cortex-M0</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>03——时钟系统设计例程

    敏矽微电子Cortex-M0学习笔记02——Cortex-M0开发环境的建立及调试

    敏矽微电子Cortex-M0学习笔记02——Cortex-M0开发环境的建立及调试
    的头像 发表于 09-26 17:05 1139次阅读
    敏矽<b class='flag-5'>微电子</b><b class='flag-5'>Cortex-M0</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>02——<b class='flag-5'>Cortex-M0</b>开发环境的建立及调试

    敏矽微电子Cortex-M0学习笔记01——芯片简介

    敏矽微电子Cortex-M0学习笔记01——芯片简介
    的头像 发表于 09-26 17:03 528次阅读
    敏矽<b class='flag-5'>微电子</b><b class='flag-5'>Cortex-M0</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>01——芯片简介