文章目录
- 前言
- GPT
- GptChannelConfigSet
- GptChannelId
- GptChannelMode
- GptChannelTickFrequency
- GptChannelTickValueMax
- GptEnableWakeup
- GptNotification
- GptChannelClkSrcRef
- GptAssignedHwUnit
- GptConfigurationOfOptApiServices
- GptDeinitApi
- GptEnableDisableNotificationApi
- GptTimeElapsedApi
- GptTimeRemainingApi
- GptDriverConfiguration
- GptClockReferencePoint
- GPT的使用
- 总结
前言
GPT属于MCAL中比较常用且不是很复杂的模块。它初始化和控制微控制器内部的通用定时器(GPT)。Internal General Purpose Timer(s) 。一般用它作为定时器来触发指定的功能。对于Tc27x来说,一般会关联到GTM中的ATOM或TOM通道
GPT
GptChannelConfigSet
配置GPT通道
GptChannelId
一般配置通道会自动生成Id号
cfg配置:
GptChannelMode
GPT_CH_MODE_CONTINUOUS:到达目标时间后,计时器再次以值“0”继续运行
GPT_CH_MODE_ONESHOT:到达目标时间后,定时器自动停止(定时器过期)。
下面两张图很好的说明了两种模式的运行机制:
单次模式时调用Gpt_StartTimer后,到达目标时间时会保持,除非再次调用Gpt_StartTimer
连续模式时调用Gpt_StartTimer后会重复运行,除非调用Gpt_StopTimer
cfg配置:
GptChannelTickFrequency
定时器通道的滴答频率,单位为Hz。此处Tc27x不支持,因为频率在GTM模块中已经设定好了
cfg配置:
GptChannelTickValueMax
以tick为单位的最大值,计时器通道能够计数。随着下一次tick,计时器转到零。此处Tc27x不支持,因为频率在GTM模块中已经设定好了
cfg配置:
GptEnableWakeup
使能通道的唤醒功能。没有用过这个功能
cfg配置:
GptNotification
指向回调函数的函数指针(用于非唤醒通知)
在调用Gpt_StartTimer后到达对应时间,会触发该回调函数。在回调函数中可以继续调用Gpt_StartTimer以继续定时触发
cfg配置:
GptChannelClkSrcRef
配置关联的时钟
cfg配置:
GptAssignedHwUnit
配置关联的硬件通道
cfg配置:
需要确保配置的通道没有被占用,此处我们还使用了中断功能,需要配置对应的回调函数及OS中配置中断源
GptConfigurationOfOptApiServices
配置API函数
GptDeinitApi
使能Gpt_DeInit函数。
cfg配置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jYZnQ2W3-1673347479489)(https://files.mdnice.com/user/30966/fcdaa210-fb3a-41f6-be59-6a447fc5b6ee.png)]
GptEnableDisableNotificationApi
启用Gpt_EnableNotification和Gpt_DisableNotification,用来启用/禁止通道中断通知(与正常模式相关)。
cfg配置:
GptTimeElapsedApi
使能Gpt_GetTimeElapsed函数,该函数返回已经过的时间。
cfg配置:
GptTimeRemainingApi
使能Gpt_GetTimeRemaining函数,该函数返回到达目标时间之前剩下的时间。
cfg配置:
下图很好的说明了两个函数的作用:
GptDriverConfiguration
这里面的配置默认即可
GptClockReferencePoint
配置时钟
cfg配置:
此处我们的计数频率为选择的ATOM/TOM通道的频率,需要确认对应的频率,例如我们使用的是ATOM2的通道0,我们使用的时钟为
由CMU模块可知,CLK0分频系数为9,则此处我们使用的通道频率为100/(9+1)=10MHz.
GPT的使用
在初始化时,使用Gpt_EnableNotification函数使能通道的回调功能,使用Gpt_StartTimer开始计数
/** Start GPT */
Gpt_EnableNotification(GPT_CHANNEL);
Gpt_StartTimer(GPT_CHANNEL,GPT_TIMER);
此处的GPT_TIMER是计数的个数,例如,我们此处的频率为10MHz,计数为50000,则触发Notification的时间为0.005s,我们可以在Notification函数中再次调用Gpt_StartTimer,以达到周期触发的作用。
FUNC(void, CDD_E52141_CODE) Cbk_GptNotification(void)
{
Gpt_StartTimer(GPT_CHANNEL,GPT_TIMER);
}
总结
至此,MCAL中除了memory之外,其他常用功能都已经介绍完了。后面会继续更新memory相关的内容,包括Nvm,Memif,Fee,Fls等。
若你觉得本文对你有帮助,欢迎点赞,关注,收藏,转发~~~ 你的鼓励是对小弟的最大支持~~~ 建了一个WX公众h,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新