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

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。关系如下:

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

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

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

 2.1、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工具中的源码实现方式如下:

也可自写如下方式实现:

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

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

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

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

 2.2、STM定时功能 

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

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

  每个比较寄存器有一个起始位置配置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()则是用来设置一个闹钟。如下图:

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

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

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

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

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

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

    GPT12、CCU16以及GTM模块。

2.3、STM中断机制

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

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

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

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

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

3、MACL配置

3.1、时钟配置

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

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

3.2、McuHardwareResourceAllocation配置

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

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

3.3、ResourceM配置

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

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

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

3.4、STM模块配置

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sky丶日暮途远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值