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

2019-07-15 17:52发布

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 。 1.jpg 但这与参考手册中关于 TPM 模块的 Up-Down Counting 计数模式(图 2 所示)相矛盾。我觉得 PW M 周期计算公式为:T= (MOD x Time Step) × 2。 2.jpg
答案:已确认图 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,ELSA=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 )); 具体信息参看下图: 3.jpg

推荐阅读:KL 系列 FAQ (五)KL 系列 FAQ (四)KL 系列 FAQ (三)KL 系列 FAQ (二)
KL 系列 FAQ (一)

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。