请从官网下载 TD4VM 技术参考手册,地址如下:
(freetech-MCU 底层软件- TDA4 内容交流与分享)
第五章 芯片配置
5.1 控制模块
芯片上的控制模块控制芯片在不同场景下的顶层行为,控制模块的寄存器实现引脚复用配置,核间中断发出,外设时钟源选择等功能。
不同的芯片域存在不同的控制模块:
- WKUP 域:WKUP_CTRL_MMR0
- MCU 域:MCU_CTRL_MMR0
- MAIN 域:CTRL_MMR0.
5.1.1 WKUP 域控制模块 WKUP_CTRL_MMR0
WKUP 域的控制模块为 WKUP_CTRL_MMR0,实现如下功能:
- WKUP 域的引脚复用功能;
- WKUP_CTRL_MMR0 寄存器写保护功能;
- WKUP_CTRL_MMR0 错误中断;
- WKUP 域外设时钟选择;
- 设备功能支持特性;
- POK 模块:上电完成模块;
- 复位相关寄存器;
- PRG 模块:上电复位生成模块;
- 电压故障检测;
- I/O 解抖动控制
WKUP_CTRL_MMR0 的实现框图如下:
对上图的解释如下:
WKUP_CTRL_MMR_ACCESS_ERR_0
是访问错误中断,可以被 DMSC 处理或 MCU_R5F0/1 来处理,DMSC 处理时,中断号为26,MCU_R5F0/1 处理时,中断号为119。- WKUP_CTRL_MMR0 与 WKUP_CBASS0 系统互连相连,那么片上的其他核都能访问 WKUP_CTRL_MMR0 的寄存器。
- WKUP_CTRL_MMR0_FICLK 是 WKUP_CTRL_MMR0 所使用的参考时钟,由 WKUP_PLLCTRL0 锁相环生成的 MCU_SYSCLK0 提供,固定为 MCU_SYSCLK0 的6分频。
- WKUP_CTRL_MMR0 存在两个外部复位信号,WKUP_CTRL_MMR0_RST 由 LPSC0 的 MOD_G_RST 信号触发;WKUP_CTRL_MMR0_POR_RST 由 LPSC0 的 MOD_POR_RST 触发。
WKUP_CTRL_MMR0 引脚复用配置
WKUP 域的绝大多数引脚都可以配置引脚功能,比如做为 GPIO引脚、UART 引脚等。
引脚复用寄存器为 CTRLMMR_WKUP_PADCONFIG0
~ CTRLMMR_WKUP_PADCONFIG93
.
引脚复用寄存器的位域定义可以查看技术手册的 5.1.3.3 章节。
具体引脚对应的配置寄存器请查看芯片数据手册。
WKUP_CTRL_MMR0 寄存器写保护机制
为了防止软件对 WKUP_CTRL_MMR0 寄存器的误写,WKUP_CTRL_MMR0 寄存器区域存在一个区域写保护机制,在写某个 CTRL_MMR0 寄存器之前,我们需要先写 LOCKi_KICK0
寄存器,再写 LOCKi_KICK1
寄存器,来解锁该寄存器所在的区域写保护机制(i 即是区域索引)。
WKUP_CTRL_MMR0 区域分区以及解锁密钥如下:
WKUP_CTRL_MMR0 中断
WKUP_CTRL_MMR0 存在一个中断请求:WKUP_CTRL_MMR0_ACCESS_0
,这个中断请求能发送给 DMSC 与 MCU_R5F0/1 处理。
具体的中断使能与状态清除,以及错误定位,请参考5.1.3.3.1.3章节。
WKUP_CTRL_MMR0 时钟选择
WKUP 域的时钟选择可以配置 MAIN 域 PLL 的时钟源与 WKUP 域外设的时钟源。能控制的功能如下:
WKUP_CTRL_MMR0 芯片功能状态寄存器
WKUP_CTRL_MMR0 存在一组寄存器用于显示芯片功能状态:
CTRLMMR_WKUP_DEVICE_FEATURE0
- CTRLMMR_WKUP_DEVICE_FEATURE6
这些寄存器可以显示某一些外设功能与处理器核的使能状态。
POK 模块
该区域的寄存器显示了电源域状态信息
PRG 模块
WKUP_CTRL_MMR0 存在一系列的寄存器,显示复位状态信息,并控制处理器核软件复位。
I/O 解抖动设置
WKUP_CTRL_MMR0 存在 6个抖动周期设置寄存器,可以设置不同的抖动周期:
我们可以设置对应引脚的PADCONFIGx[13-11]
的 DEBOUNCE_SEL
位域,来选择合适的 DEOUNCE_CFG[1:6]
5.1.2 MCU 域控制模块 MCU_CTRL_MMR0
MCU 的控制器模块寄存器主要实现了下列功能:
- Kick 保护,寄存器写保护
- MCU_CTRL_MMR0 模块访问错误中断
- 核间通信中断
- timer I/O 复用
- 外设时钟复用与分频
- MCU_CPSW0 MAC 地址,千兆网卡地址
MCU_CTRL_MMR0 模块框图如下:
在上图中:
MCU_CTRL_MMR0_IPC_SET8_IPC_SET_IPCFG_0
是一个软件中断,发送给 DMSC 处理;MCU_CTRL_MMR0_ACCESS_ERR0 是 MCU_CTRL_MMR0 访问错误中断,可以路由给所有处理器核。MCU_CTRL_MMR0_IPC_SET0_IPC_SET_IPCFG_0
是一个软件中断,可以路由给 mcu_r5f0/1 处理;MCU_CTRL_MMR0_IPC_SET1_IPC_SET_IPCFG_0 是一个软件中断,可以路由给 mcu_r5f0/1 处理。- MCU_CTRL_MMR0 模块的时钟为 MCU_CTRL_MMR0_FICLK,是 WKUP_PLLCTRL0 生成 的 MCU_SYSCLK0 的6分频。
- MCU_CTRL_MMR0 与 MCU_CBASS0 连接,那么芯片上的 ARM 核都能访问。
MCU_CTRL_MMR0 写保护机制
MCU_CTRL_MMR0 的寄存器区域也存在 kick 写保护机制,与 WKUP_CTRL_MMR0 控制模块类似:
MCU_CTRL_MMR0 访问错误中断
按照上面的集成框图, MCU_CTRL_MMR0 存在一个访问错误中断 MCU_CTRL_MMR0_ACCESS_ERR_0,这个中断的使能,状态清除,错误定位由下列寄存器控制:
CTRLMMR_MCU_INTR_RAW_STAT
CTRLMMR_MCU_INTR_STAT_EN
CTRLMMR_MCU_INTR_EN_SET
CTRLMMR_MCU_INTR_EN_CLR
CTRLMMR_MCU_FAULT_ADDR
CTRLMMR_MCU_FAULT_TYPE
CTRLMMR_MCU_FAULT_ATTR
CTRLMMR_MCU_FAULT_CLR
MCU 域核间通信寄存器
MCU_CTRL_MMR0 模块存在一系列的核间通信寄存器,可以生成软中断给 MCU 域 R5F处理器:
CTRLMMR_MCU_IPC_SET0
,写 bit0 为1可以触发软件中断给 MCU_R5F0,向量号为 44;CTRLMMR_MCU_IPC_SET1
,写 bit0 为1可以触发软件中断给 MCU_R5F1,向量号为45;CTRLMMR_MCU_IPC_SET8
,写 bit0 为1可以触发软件中断给 DMSC,向量号为42;CTRLMMR_MCU_IPC_CLR0
,写 bit0 为1可以清除发送给MCU_R5F0的软件中断;CTRLMMR_MCU_IPC_CLR1
,写 bit0 为1可以清除发送给MCU_R5F1的软件中断;CTRLMMR_MCU_IPC_CLR8
,写 bit0 为1可以清除发送给DMSC的软件中断;
注意:处于降低延迟的原因,核间通信寄存器不受 kick 机制保护。
MCU Timer I/O 复用控制
不是所有的MCU Timer 输入输出引脚都被指定(比如 timer 配置为输入捕获时的输入引脚),我们需要通过 MCU timer I/O 复用寄存器来为 timer 选择一个 MCU_TIMER_IO[0:9]。
当MCU timer 配置为输入捕获时:我们需要使用 CTRLMMR_MCU_TIMER0_CTRL
~ CTRLMMR_MCU_TIMER9_CTRL
的其中一个来指定MCU Timer 的输入捕获引脚。
当MCU timer 配置为输出使能时:我们需要使用 CTRLMMR_MCU_TIMERIO0_CTRL
~ CTRLMMR_MCU_TIMERIO9_CTRL
的其中一个来指定 MCU Timer 的输出引脚。
MCU 域外设时钟复用与分频寄存器
MCU_CTRL_MMR0 模块存在专门的寄存器用于选择 MCU 域外设的参考时钟源:
MCU_CPSW0 MAC 地址寄存器
MCU_CTRL_MMR0 模块存在两个专用寄存器,用于设置 MCU 域千兆以太网 MAC 芯片的 MAC 地址:
CTRLMMR_MCU_MAC_ID0
: 用于存储 MCU_CPSW0 的低32位;
CTRLMMR_MCU_MAC_ID1
: 用于存储 MCU_CPSW0 的高32位。
5.1.3 MAIN 域控制模块 CTRL_MMR0
MAIN 域的控制模块 CTRL_MMR0 主要实现下列功能:
- MAIN 域芯片引脚复用配置;
- MAIN 域 CTRL_MMR0 写保护机制;
- CTRL_MMR0 访问错误中断;
- MAIN 域核间通信软中断
- MAIN 域 Timer I/O 复用控制
- PRU_ICSSG 控制
- MAIN 域外设时钟复用与控制
- 以太网端口操作控制
- PCIE 操作控制
- SERDES 通道功能控制
- DDRSS 动态频率改变
CTRL_MMR0 在 MAIN 域的集成如下图:
在上图中:
- 红框中的 CTRL_MMR0_IPC_SET16_IPC_SET_IPCFG_0 是触发给 MAIN 域 R5FSS0 的软件中断。
MAIN 域引脚复用配置
MAIN 域的外设引脚同样可以复用,可以设置为 GPIO, CAN 总线等外设引脚;每一个引脚都对应一个配置寄存器 CTRLMMR_PADCONFIG[0:172]
,具体哪个引脚对应哪个配置寄存器请查看芯片数据手册。
下面展示引脚配置寄存器的低4位(高4位看手册):
在上图中:
- Bit[3:0]-MUXMODE 位域用于选择引脚复用功能。
Main 域 Kick 写保护机制
CTRL_MMR0 拥有写保护机制来防止对 CTRL_MMR0 寄存器的错误写行为。
为了实现对 CTRL_MMR0 寄存器的写,我们必须来写 LOCKn_KICK0
寄存器,再写 LOCKn_KICK1
寄存器,解锁分区 n 的写保护机制。
上锁只需要写任意值到 LOCKn_KICK0/1 寄存器即可。
写保护分区如下:
注意:为了确保所有寄存器实现了写保护,软件再解锁之后必须重新上锁;出于降低延迟的缘故,核间通信寄存器不受 KICK 机制保护。
CTRL_MMR0 模块访问错误中断
CTRL_MMR0 模块存在一个中断,即访问错误中断,CTRL_MMR0_ACCESS_ERR_0
.
根据 CTRL_MMR0 的实现框图,CTRL_MMR0_ACCESS_ERR_0
可以被 MAIN 域的 A 核与 R核处理,也可以被 MAIN2MCU 中断路由器处理。
CTRL_MMR0 核间通信中断寄存器
CTRL_MMR0 的核间通信寄存器用于生成软中断给 MAIN 域的处理器核。
CTRLMMR_IPC_SETx
:用于生成软中断给指定的 MAIN 域处理器核;
CTRLMMR_IPC_CLRx
:用于清除指定核的软中断状态。
MAIN 域 Timer I/O 复用控制
与 MCU 域 Timer 一样,并不是所有的 Timer 都绑定了输入输出引脚。
当 Timer 配置为输入捕获时,我们通过 CTRLMMR_TIMER[0:7]_CTRL
来选择对应 Timer 的输入引脚;
当 Timer 配置为输出使能时,我们通过 CTRLMMR_TIMERIO[0:7]_CTRL
来选择对应 Timer 的输出引脚。
MAIN 域 EPWM/EQEP 控制与状态
PWM 的控制与状态。看手册。
PRG_ICSSG 控制寄存器
PRG_ICSSG 控制。看手册。
MAIN 域外设时钟源选择与分频寄存器
这些寄存器主要控制 MAIN 域外设时钟源选择:
以太网端口操作控制寄存器
这些寄存器选择GMAC 芯片与 PHY 芯片的接口类型,比如RGMII:
PCIE 操作控制寄存器
看手册
SERDES 通道功能控制寄存器
看手册
DDR 子系统动态频率改变寄存器
看手册
5.2 电源(power)
该章节描述芯片上的电源管理架构。
5.2.1 电源管理概述
芯片的电源管理架构建立在三个级别的电源控制上,分别对应各子系统(域)的时钟控制、电源控制、电压控制。
域是共享一个组资源的模块,比如共享时钟,共享电压源或者共享一个电源开关。
芯片上定义了一系列的电源域(PD),电源域中,提供给域的时钟与电源被 PSC 控制。
一个或多个 PD 可能共享一个电源供应,这个电源供应被称作电压域(VD)。
由于时钟与 PD 的切换可能过于复杂,所以 TI 提供了 DMSC 来简化芯片时钟与电源域的配置(使用 SCI 接口),对于顶层的电源管理应用,应该使用 DMSC 固件APIs。
5.2.2 电源管理子系统
电源系统模块
- POK 模块:位于 WKUP 域,负责检测电压是否正常。
- POR 模块:上电复位模块负责检测 VDDA_MCU 的电压水平,超过一定的电压值后触发上电复位
- PRG 模块:PRG 模块负责所有 POK 模块的使能或失能控制,以及中断屏蔽逻辑。
- PGD 模块:PGD 电源故障检测被用来检测小故障,当检测到电源故障时,输出高电平。
- VTM 模块:电压与热管理模块提供基于温度传感器的温度检测中断。
电源与休眠控制器 PSC
PSC 被划分为全局的 PSC 与局部的 LPSC,对 PSC 的控制被实现在 DMSC 中。
PSC 与 LPSCS
每一个PSC 包含一个全局的 GPSC 与一系列的 LPSC,PSC 可以关闭芯片上未使用的电源域,以及可以关闭未使用的外设时钟源。
通过 PSC,用户可以实现电源与时钟操作。
芯片包含两个 PSC,WKUP_PSC0 与 PSC0。
PSC 提供下列的功能:
- 提供软件接口控制模块电源开关;
- 提供软件接口控制模块时钟开关;
- 支持仿真功能:电源,时钟,复位。
全局的 GPSC 用于控制不同 PDs 的电源门控,LPSC 用于控制每一个模块的时钟门控。
芯片上 WKUP_PSC0 控制 WKUP/MCU 域外设与模块的时钟与电源门控,具体控制信息请参考
芯片技术手册 5.2.2.2.1.3.1 章节;
芯片上 PSC0 控制 MAIN 域外设与模块的时钟与电源门控,具体控制信息请参考
芯片技术手册 5.2.2.2.1.3.2 章节。
DMSC 实现
芯片集成了一个 WKUP 域,用于运行 TI 提供的固件,被称作 DMSC,DMSC 实现了电源管理,MCU 域与 MAIN 域通过 SCI 接口与 DMSC 通信实现电源管理。
5.2.3 设备功耗状态
从掉电到运行的一系列状态描述,看手册。
5.2.4 动态功耗管理
芯片存在一个功能叫做动态频率扩展,可以改变 ARM 核运行的频率。
5.2.5 热管理
芯片上存在温度传感器,具体看手册。
5.3 复位
主要讲解了芯片的复位源,以及上电复位操作,为啥没有单独核的复位呢?通过 PSC 实现?
5.4 时钟
5.4.1 概述
芯片存在多个时钟源以及时钟生成器:
- 外部晶振
- 内部晶振
- 锁相环
- 分频器
芯片的时钟同样被分为两个 domain:WKUP/MCU 与 MAIN。
芯片 WKUP/MCU 域时钟框图如下:
MAIN 域与 WKUP/MCU 域顶层时钟框图请查看 5.4.1 章节。
5.4.2 时钟输入
芯片存在下列外部输入时钟源:
- 高频晶振:WKUP_HFOSC0 与 HFOSC1
- 低频晶振:WKUP_LFOSC0
- …
主要关注高频晶振与低频晶振即可。
高频晶振与低频晶振的频率应为下图所示:
5.4.3 时钟输出
芯片存在几个时钟引脚可以对外输出时钟:
- MCU_SYSCLKOUT0
- MCU_OBSCLK0
- SYSCLKOUT0
- OBSCLK0, OBSCLK1, OBSCLK2
详细描述看手册。
5.4.4 芯片晶振
芯片上可以连接两个外部高频晶振 WKUP_HFOSC0 与 HFOSC0,还可以连接一个外部低频晶振 WKUP_LFOSC0,芯片内存存在一个 RC 振荡器 WKUP_RC_OSC_12M。
5.4.4.1 芯片使用的外部晶振
默认的,上电后只使能 WKUP_HFOSC0 晶振,HFOSC0 与 WKUP_LFOSC0 都不起振。
在 VM 中,控制 CTRLMMR_WKUP_LFXOSC_CTRL 可以使能 WKUP_LFOSC0.
在 VH 中,控制 0x43008014, 可以使能 HFOSC1.(这是 TI技术支持的回复,验证后可行)
5.4.4.2 时钟丢失检测
芯片存在硬件电路来对WKUP_HFOSC0 时钟进行对齐检测,如果时钟停止翻转(因为时钟是方波)。
可以通过 CTRLMMR_WKUP_MCU_PLL_CLKSEL 的 BIT8 来使能这个检测功能。当检测到时钟故障时,会报错给 WKUP_ESM0(这是什么?),芯片会自动切换为 12M 内部 RC 振荡器。
5.4.5 PLLs
PLL(锁相环)用于将低频时钟倍频至芯片需要的频率。
5.4.5.1 MCU/WKUP 域 PLL 概述
WKUP/MCU 域一个存在三个 PLL:
- MCU_PLL0 与 WKUP_PLLCTRL0 : 给 MCU_R5FSS 提供工作频率
- MCU_PLL1 : 为 MCU 域外设提供时钟
- MCU_PLL2 : 为 MCU 域千兆以太网交换机提供时钟
MCU/WKUP 域时钟树如下:
上图中, 只包含了 MCU_PLL0/1, MCU_PLL2 未列举出。
5.4.5.2 MAIN 域 PLL 概述
芯片的 MAIN 域存在20个 PLL:
- PLL0 与 PLLCTRL0: 主 PLL
- PLL1: 外设 PLL
- PLL2: 外设 PLL
- PLL3: CPSW9G PLL
- PLL4: AUDIO0 PLL
- PLL5: VIDEO PLL
- PLL6: GPU PLL
- PLL7: C7x PLL
- PLL8: ARM0 PLL
- PLL12: DDR PLL
- PLL13 :C66 PLL
- PLL14: R5FSS PLL
- PLL15: AUDIO1 PLL
- PLL16: DSS PLL0
- PLL17: DSS PLL1
- PLL18: DSS PLL2
- PLL19: DSS PLL3
- PLL23: DSS PLL7
- PLL24: MLB PLL
- PLL25: VISION PLL3
MAIN 域 PLL 时钟树请查看技术手册第 5.4.5.2 章节。
5.4.5.3 PLL 参考时钟
MCU 域 PLL 参考时钟选择通过 CTRLMMR_WKUP_MCU_PLL_CLKSEL
BIT8 控制:
MAIN 域 PLL 的参考时钟源选择通过 CTRLMMR_WKUP_MAIN_PLLn_CLKSEL
的 bit0 控制:
5.1.5.4 通用 PLL 概述
只需要关注标准 PLL (PLLTS16FFCLAFRAC2),该 PLL 的结构框图如下:
PLL 的输入时钟为:FREF
PLL 的输出时钟如下:
PLL 又与 HSDIVIDER 相连,一个 PLL 可与最多 16 个分频器连接,每个分频器都对应一个时钟输出。
5.4.5.5 芯片 PLL 指定信息
详细介绍看手册。
5.4.5.6 与 PLL 连接的 PLLCTRL0
PLLCTRL0 使用 PLL 输出时钟作为参考时钟,可以重新进行倍频与分频:
5.4.5.7~.4.5.10 PLL 配置操作
PLL 与时钟相关配置操作,我们使用 SCI 接口完成,请查看 SCI 接口文档。
文章评论