编辑:CrazyRabbit
日期:2022年7月28日
本文是英飞凌官方培训的笔记摘录,入门篇第六节课。
1. 总述
STM主要包括了64位的Counter,还有两个比较器,时钟输入主要来源于f_STM,会产生两个比较中断,分别是Interrupt-0和Interrupt-1
**亮点:**可以产生OS的时钟基,同时产生触发事件;AURIX有多个STM模块,模块数量跟CPU数量一致,每个CPU可以用一个独立的STM作为时钟基
2. 64位计数器
STM有一个64位的计数器,时钟来源于f_STM,而f_STM的时钟源来自CCU(Clock Control Unit),即时钟控制单元。
System Timer可以通过7个32位宽度的寄存器来读取(如右图的Counter1~Counter7),这7个寄存器对应64位的Systerm Timer的不同范围。
由于计数器是64位宽度,所以需要进行两次读取加载指令(一次读32位)再拼接,两次加载指令期间,计数器仍在计数,所以可能会出现不匹配的现象。为了解决这个问题,引入了(Capture Register)捕捉寄存器。捕捉寄存器在低位被读取时保持高位的值,那么第二个加载指令直接读取捕捉寄存器中的值。
3. 灵活的中断服务请求
STM可以跟两个比较器寄存器的值进行比较,如果Match,则产生match事件。并且通过中断配置也可以产生对应的中断服务请求。
每个比较器都是通过两个参数来配置的:① START,开始比较的位 ② SIZE,比较的位数。
4. 系统集成
STM的时钟源来自于CCU,是在PLL使能后产生的;STM时钟分频需要用到两个模块:CCU和STM。
必须确保f_STM与f_SPB(系统外设总线)是整数倍关系,否则计数器值可能会错。
5. 应用案例
典型的应用案例是操作系统的时钟基的产生。在嵌入式多核系统中可能会跑多个操作系统。每个CPU可以跑单独的RTOS和单独的STM,产生独立的时钟基。