微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > KL 系列 FAQ (六)——内核模块和TPM 模块

KL 系列 FAQ (六)——内核模块和TPM 模块

时间:10-02 整理:3721RD 点击:

8 内核模块

8.1 Systick 使用介绍?

问题:

想使用 KL25 的 Systick 时钟,但却找不到 Systick 的具体介绍文档?


答案:

Systick 时钟是 ARM Cortex 架构的可裁剪模块,存在于 NVIC 中(但大多数

IC 厂商都没有将其裁剪掉)。Kinetis 系列 MCU 的参考手册没有包含 Systick 的详

细介绍,但你可以通过 ARM 官网的 ARM Information Center 了解 Systick 时钟的寄

存器组成和具体介绍。


8.2 KL 系列 中 Systick 的可选时钟源有哪些?

问题:

KL 系列的 Systick 可选时钟源为哪些?分别为多少?

答案:

KL 系列的 Systick 时钟源可以通过内核的 systick 的控制状态寄存器中的

CLKSOURCE 位来选择,如果 CLKSOURCE=1, 则表示时钟选择为芯片内核 时钟;

如果 CLKSOURCE=0 ,则时钟由具体的 MCU 设计决定,kinetis 的 L 系列为 芯片内

核时钟除以 16。


8.3 Systick 的工作模式

问题:

Systick 是否可以作为普通的定时器使用?可以工作在哪些模式下?  

答案:

systick 是可以作为普通的定时器使用的,关于 systick 可以工作在哪些模式

下,由于 Systick 时钟都是由内核时钟或者内核时钟的 16 分之 1 决定,而内核时钟

的只能在 RUN 模式以及 VLPR 模式下可以工作,其他模式下都是关闭的。所以

systick 也只能工作在 RUN 模式以及 VLPR 模式下。


8.4 Systick 的参考代码

问题:

官方是否有关于 Systick 相关的代码?

答案:

目前虽然没有独立关于 systick 的工程,但是在官方的 KL25 的 sample code

中还是有关于 systick 的代码可以参考,比如在 KL25_SC 中的 low_power_demo 工

程的 low_power_demo.c 中就有关于 systick 的代码。关于 systick 代码的初始化,也


可以参考如下的代码:

void vfnPSYSTICK (void)

{

/* Set the core clk as clk so urce and pend the SysTick interrupt */

SYST_CSR |= SysTick_CSR_CLKSOURCE_MASK | SysTick_CSR_TICKINT_MASK;

/* set the reload value */

SYST_RVR = 0x000000FF;

/* Enable the SysTick */

SYST_CSR |= SysTick_CSR_ENABLE_MASK;


}


9 TPM 模块

9.1 TPM 频率配置

问题:

我用 PE 工具新建了一个关于 TPM 应用的工程,在工程中将 TPM 模块配置

成中心对齐 PWM 模式,所以我想知道 PWM 的频率设置与哪些寄存器有关?根据

用户手册给出的 TPM 输出 PW M 周期计算公式(如下图 1 所示),即 T= (MOD x

Time Step) / 2 。


但这与参考手册中关于 TPM 模块的 Up-Down Counting 计数模式(图 2 所示)相矛

盾。我觉得 PW M 周期计算公式为:T= (MOD x Time Step) × 2。



答案:

已确认图 1 所示的 TPM 周期计算公式为用户手册的文档错误,我会联系飞

思卡尔文档部门尽快予以修改,感谢你的问题。


9.2 TPM 模式配置


问题:

在设置 TPM 模块的时候,使用下面的操作一个寄存器,

TPM1_C1SC |= TPM_CnSC_ELSA_MASK;

TPM1_C1SC |= TPM_CnSC_ELSB_MASK;

运行第二句的时候,就不起作用了,为什么?


答案:

你需要这样操作:

TPM1_C1SC = TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK;

因为,根据 reference manual 中的一句话:“When switching from on e

channel mode to a different channel mode, the channel must first be disabled and this

must be acknowledged in the  LPTPM counter clock domain.”所以你上面的操作方式

会被视为一次模式切换,建议使用一条语句操作。


9.3 中心对齐(Center-aligned)PWM 生成

问题:

请问在 CW10.4 下,使用 PE 配置 TPM 输出 Center-aligned PWM,当工程编

译成功并烧录到 MCU 后,利用示波器观察输出的 PWM,发现并无任何的 PWM

波输出,这是怎么回事呢?

答案:

PE 生成的 TPM 代码有个 Bug,这将在下一版的 PE 中更正。你需要

将 Channel (n) Status and Control (TPMx_CnSC)寄存器相关代码改成如下配置:

/*TPM0_C0SC: ?=0,?=0,?=0,?=0,?=0,?=0,?=0,?=0,?=0,?=0,?=0,?=0,?=0,

?=0,?=0,?=0,?=0,?=0,?=0,?=0,?=0,?=0,?=0,?=0,CHF=0,CHIE=0,ELSB=1,E

LSA=0,?=0,DMA=0 */

TPM0_C0SC = (uint32_t)((TPM0_C0SC & (uint32_t)~(uint32_t)(

TPM_CnSC_CHF_MASK |

TPM_CnSC_CHIE_MASK |



TPM_CnSC_ELSA_MASK  |

TPM_CnSC_DMA_MASK |

0xFFFFFF02U

))  | (uint32_t)(

TPM_CnSC_ELSB_MASK

| TPM_CnSC_MSB_MASK

));

具体信息参看下图:




推荐阅读:

KL 系列 FAQ (五)

KL 系列 FAQ (四)

KL 系列 FAQ (三)

KL 系列 FAQ (二)
KL 系列 FAQ (一)


谢谢小编分享            

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top