TC3xx系列芯片–STM模块介绍

TC3xx系列芯片–STM模块介绍STM 是 Aurix2GTC3xx 内部 63 位的系统定时器 提供最高 100MHz 精度的定时功能 每款芯片的模块数量与

大家好,欢迎来到IT知识分享网。

1、STM(System Timer)模块介绍

 STM是Aurix2G TC3xx内部63位的系统定时器,提供最高100MHz精度的定时功能,每款芯片的模块数量与

 CPU数量对应,比如TC389有4个核,同时具有STM0–STM3一共3个STM模块。STM模块具有如下特性:

 1、独立运行的64位计数器(100MHz下最大时间为5849年)

 2、支持64位计数值同步读取

 3、支持32位连续的特定位置读取,比如读取计数器第7到39位数据

 4、支持利用比较寄存器进行灵活的定时中断请求

 5、上电自动启动

 6、Application Reset后支持继续运转不归零(System Reset和PowerOn Reset后一定归零的)

2、STM模块功能介绍

 STM的时钟来自系统时钟,与CPU同源,最大支持100MHz,与系统时钟的倍数关系取决于STM分频寄存器

 SCU_CCUCONO.STMDIV。关系如下:

TC3xx系列芯片--STM模块介绍

芯片上电之后,根据时钟寄存器复位值,得出fPLL0也就是fSOURCE默认为100MHz,SCU_CCUCON0.STMDIV复位

 复位值为3,因此上电之后,在MCU时钟初始化及锁相环稳定之前,STM以默认频率33.3MHz启动并运行。

 但是我们MCU中一般将系统时钟fPLL0配置为300MHz,所以在时钟初始化之后STM以100MHz运行。

 2.1、STM计时功能

TC3xx系列芯片--STM模块介绍

  如上图每个STM模块内部是一个上电自动启动的64位系统时钟,提供不同的寄存器(STM_TIM0–STMTIM5

  和STM_CAP)以读取不同位置的32位时刻值。因为64数据在32位CPU中无法在一条指令内完成,因此

  STM模块提供了32位冻结功能:在TIM0到TIM5任一寄存器被读取时,STM会将此刻的高32位时刻值冻结

  一次到STM_CAP,因此通过先读取STM_TIM0在读取STM_CAP寄存器的方式,组成完成一致的64位时刻值

  代码实现如下:

  EB工具中的源码实现方式如下:

TC3xx系列芯片--STM模块介绍

也可自写如下方式实现:

TC3xx系列芯片--STM模块介绍

不推荐使用宏的方式写如下图:

TC3xx系列芯片--STM模块介绍

因为对于不同的编译器,同行语句的代码指令执行顺序不一定一致,若编译器先执行STM0_CAP.U,则

  执行顺序变为先读取高32位冻结时刻值,在读取低32位时刻值,则在0xFFFFFFFF这种低32位即将归零

  的临界时刻可能会读取出错误值。

 2.2、STM定时功能 

  STM中每个模块提供了两个32位比较寄存器,用来实现定时功能。比较寄存器可以与STM的64位计时器

  中任意位置的最大32位宽度的时刻值进行对比,当值匹配时产生对应的事件,触发中断。如下图:

TC3xx系列芯片--STM模块介绍

  每个比较寄存器有一个起始位置配置MSTART和位宽配置MSIZE。MSTART表示从64位计时器中哪一位

  开始比较,MSIZE表示比较的数据宽度。如上图中的Compare Register0的MSTART=10,MSIZE=17,

  表示从计时器的第10位往后取17位,与比较寄存器STM_CAP0的前17位进行比较,匹配则产生中断。

  因此若需设置定时功能,则需先读取当前时刻值,在根据定时需求设置比较寄存器的值,最终实

  现定时功能。例如当前时刻位0x1000(单位Tick),若要设置0x900Tick后触发中断,则需设置

  STM_CAP0=0x1900。

  EB工具中提供了相应接口Stm_EnableModule()Stm_EnableAlarm()。其中Stm_EnableModule()是

  进行STM内部比较寄存器和中断配置,Stm_EnableAlarm()则是用来设置一个闹钟。如下图:

TC3xx系列芯片--STM模块介绍

   这里需要注意的是如果设置连续触发,类似设置闹钟。比如在4点设置一个1小时闹钟那么需要设置

   5点触发,若到了5点还需要设置一个小时,因响应和操作时间,则可需要设置约为6点0分1秒,STM

   的连续触发是这种机制,并不像其它定时器的周期触发逻辑,而是在每次触发后,在定时器中断中

   重新装载比较寄存器的值,实现连续触发。在EB的MACL代码的Stm_Isr()中可以看到该逻辑:

TC3xx系列芯片--STM模块介绍

     因此,STM的比较中断逻辑适合作为EcuM或者Wdg的定时中断,不适合作为OS Counter的触发源,

    会产生累计误差。若需要实现精准连续的定时功能,则需要使用该芯片的其它外设模块,比如

    GPT12、CCU16以及GTM模块。

2.3、STM中断机制

每个STM模块有两个比较寄存器,同时每个STM模块有两个中断源,而且比较寄存器和中断源

的连接是可配的。示意图如下:

TC3xx系列芯片--STM模块介绍

由上图可知每个比较寄存器有一个CMPxEN使能开关,一个中断源选择开关CMPxOS,和一个中断

设置和清除开关CMPx_IR。CMPxEN设置为1则打开中断,CMPxOS设置为0或1则选择对应的中断

源,输出到中断模块IR中。

3、MACL配置

3.1、时钟配置

在Mcu->McuClockSettingConfig_0->General中配置STM时钟,这里设置所需频率值,工具会

自动计算出对应的SCU_CCUCON0.STMDIV。

TC3xx系列芯片--STM模块介绍

3.2、McuHardwareResourceAllocation配置

MACL中所有的硬件资源都需在MCU模块中进行分配,在Mcu->McuHardwareResourceAllocationConf_0

->McuStmAllocationCOnf中配置STM的硬件分配,如下图:

TC3xx系列芯片--STM模块介绍

3.3、ResourceM配置

Aurix2G MCAL中面向多核提供了一个硬件对于核的配置模块ResourceM,其本身不产生代码,但是配置

会影响其它模块生成代码;对STM模块,若用户使用定时器功能,则需要在ResourceM中配置硬件对

Cpu的分配,否则MACL代码中初始化会失败。如下图:

TC3xx系列芯片--STM模块介绍

3.4、STM模块配置

STM模块内部只有一个Dev,一个VersionApihe和一个ApiMode,Dev用于开发配置检查,ApiMode表示

对STM进行配置时需要处于什么样的用户权限。

TC3xx系列芯片--STM模块介绍

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/152451.html

(0)
上一篇 2024-11-26 14:33
下一篇 2024-11-26 14:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信