英飞凌TriCore架构的MCU系统定时器

自上次分享了在英飞凌TriCore架构的MCU上移植FreeRTOS后,后台有不少人咨询关于系统时基的事情,今天就来介绍下这个STM。

摘要

本篇文档主要用来介绍英飞凌基于AURIX-2G TriCore 1.6.2架构的 TC3xx系列STM定时器的使用

STM介绍

STM(System Timer) 是为高精度和长周期的全局系统定时应用而设计,是一个向上递增计数器,有很多特点: 自由运行的64位计数器,64位可以同时被读取,64位计数器中的不同32位可以被同时读取,基于比较匹配可以产生灵活的中断服务请求,应用复位后可以自动启动运行,从下图的结构中就可以看出。

d83dd7875219c8f15a95775b52e4d26b.png

STM是一个递增计数器,工作频率为fSTM。清除STMxDIS。复位后,STM启动并立即开始计数。正常运行时是不能操作计数器内容,只能读取。由于STM的宽度为64位,因此不可能用一条指令读取其全部内容。它必须是读取两个加载指令。由于计时器会在两次加载操作之间继续计数,因此读取的两个值是有可能不一致(由于可能从定时器的低部分溢出到两个读操作之间的高部分)。所以为了能够同时连续独处STM的值,采取捕获寄存器(CAP)的办法。因此,CAP将定时器的高半部分保持在完全相同的位置读取低半部分的时间。然后,第二个读取操作将读取CAP的内容以获取完整的计时器值。更多关于STM的详细内容大家可以参考手册第二部分第27章

98fb90aad4801598af7266c7837f16af.png

系统时基

既然STM系统定时器有这么多好处,我们在做开发的时候,不管是裸机还是基于RTOS都可以选用这个STM来作为系统的心跳或者叫时基,在上次给大家分享的在TC33x上移植FreeRTOS,就是基于STM来作为系统的内核心跳SysTick。并且定义为1ms的心跳周期。STM始终fSTM为100Mhz,具体如下

6e5ff3461feb6875e2237c1cca69fb76.png

STM的中断会调用freeRTOS的API函数 vPortSystemTickHandler(); 实现系统时基。大家有兴趣的可以去研究下vPortSystemTickHandler();内部内容源码,这个都是开源的。

6a58aea0703848f0ddaacd5fe8b28fc1.png

在移植好的工程里创建任务,开启调度器,就可以了,这里主要要弄清楚这个STM是怎么和FreeRTOS关联起来的,以及如何创建任务。包括任务间的交互,数据传递等。

总结

本文通过STM来实现FreeRTOS的时基运行,需要掌握STM的运行原理和配置,中断服务等。关于这个STM的学习,大家有也可以参考官方的例程和文档,有什么问题也可以在评论区留言。

2a0ec86abf90adc93a08ba98fd8552b3.png

6d8dcaa1f56b93c3f68d273fb57f68e5.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值