请从官网下载 TD4VM 技术参考手册,地址如下:
TDA4VM 技术参考手册地址
(freetech-MCU 底层软件- TDA4 内容交流与分享)
芯片上的控制模块控制芯片在不同场景下的顶层行为,控制模块的寄存器实现引脚复用配置,核间中断发出,外设时钟源选择等功能。
不同的芯片域存在不同的控制模块:
WKUP 域的控制模块为 WKUP_CTRL_MMR0,实现如下功能:
WKUP_CTRL_MMR0 的实现框图如下:
对上图的解释如下:
WKUP_CTRL_MMR_ACCESS_ERR_0
是访问错误中断,可以被 DMSC 处理或 MCU_R5F0/1 来处理,DMSC 处理时,中断号为26,MCU_R5F0/1 处理时,中断号为119。WKUP 域的绝大多数引脚都可以配置引脚功能,比如做为 GPIO引脚、UART 引脚等。
引脚复用寄存器为 CTRLMMR_WKUP_PADCONFIG0
~ CTRLMMR_WKUP_PADCONFIG93
.
引脚复用寄存器的位域定义可以查看技术手册的 5.1.3.3 章节。
具体引脚对应的配置寄存器请查看芯片数据手册。
为了防止软件对 WKUP_CTRL_MMR0 寄存器的误写,WKUP_CTRL_MMR0 寄存器区域存在一个区域写保护机制,在写某个 CTRL_MMR0 寄存器之前,我们需要先写 LOCKi_KICK0
寄存器,再写 LOCKi_KICK1
寄存器,来解锁该寄存器所在的区域写保护机制(i 即是区域索引)。
WKUP_CTRL_MMR0 区域分区以及解锁密钥如下:
WKUP_CTRL_MMR0 存在一个中断请求:WKUP_CTRL_MMR0_ACCESS_0
,这个中断请求能发送给 DMSC 与 MCU_R5F0/1 处理。
具体的中断使能与状态清除,以及错误定位,请参考5.1.3.3.1.3章节。
WKUP 域的时钟选择可以配置 MAIN 域 PLL 的时钟源与 WKUP 域外设的时钟源。能控制的功能如下:
WKUP_CTRL_MMR0 存在一组寄存器用于显示芯片功能状态:
CTRLMMR_WKUP_DEVICE_FEATURE0
- CTRLMMR_WKUP_DEVICE_FEATURE6
这些寄存器可以显示某一些外设功能与处理器核的使能状态。
该区域的寄存器显示了电源域状态信息
WKUP_CTRL_MMR0 存在一系列的寄存器,显示复位状态信息,并控制处理器核软件复位。
WKUP_CTRL_MMR0 存在 6个抖动周期设置寄存器,可以设置不同的抖动周期:
我们可以设置对应引脚的PADCONFIGx[13-11]
的 DEBOUNCE_SEL
位域,来选择合适的 DEOUNCE_CFG[1:6]
MCU 的控制器模块寄存器主要实现了下列功能:
在上图中:
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 的寄存器区域也存在 kick 写保护机制,与 WKUP_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_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 输入输出引脚都被指定(比如 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_CTRL_MMR0 模块存在专门的寄存器用于选择 MCU 域外设的参考时钟源:
MCU_CTRL_MMR0 模块存在两个专用寄存器,用于设置 MCU 域千兆以太网 MAC 芯片的 MAC 地址:
CTRLMMR_MCU_MAC_ID0
: 用于存储 MCU_CPSW0 的低32位;
CTRLMMR_MCU_MAC_ID1
: 用于存储 MCU_CPSW0 的高32位。
MAIN 域的控制模块 CTRL_MMR0 主要实现下列功能:
在上图中:
MAIN 域的外设引脚同样可以复用,可以设置为 GPIO, CAN 总线等外设引脚;每一个引脚都对应一个配置寄存器 CTRLMMR_PADCONFIG[0:172]
,具体哪个引脚对应哪个配置寄存器请查看芯片数据手册。
下面展示引脚配置寄存器的低16位(高16位看手册):
在上图中:
CTRL_MMR0 拥有写保护机制来防止对 CTRL_MMR0 寄存器的错误写行为。
为了实现对 CTRL_MMR0 寄存器的写,我们必须来写 LOCKn_KICK0
寄存器,再写 LOCKn_KICK1
寄存器,解锁分区 n 的写保护机制。
上锁只需要写任意值到 LOCKn_KICK0/1 寄存器即可。
写保护分区如下:
注意:为了确保所有寄存器实现了写保护,软件再解锁之后必须重新上锁;出于降低延迟的缘故,核间通信寄存器不受 KICK 机制保护。
CTRL_MMR0 模块存在一个中断,即访问错误中断,CTRL_MMR0_ACCESS_ERR_0
.
根据 CTRL_MMR0 的实现框图,CTRL_MMR0_ACCESS_ERR_0
可以被 MAIN 域的 A 核与 R核处理,也可以被 MAIN2MCU 中断路由器处理。
CTRL_MMR0 的核间通信寄存器用于生成软中断给 MAIN 域的处理器核。
CTRLMMR_IPC_SETx
:用于生成软中断给指定的 MAIN 域处理器核;
CTRLMMR_IPC_CLRx
:用于清除指定核的软中断状态。
与 MCU 域 Timer 一样,并不是所有的 Timer 都绑定了输入输出引脚。
当 Timer 配置为输入捕获时,我们通过 CTRLMMR_TIMER[0:7]_CTRL
来选择对应 Timer 的输入引脚;
当 Timer 配置为输出使能时,我们通过 CTRLMMR_TIMERIO[0:7]_CTRL
来选择对应 Timer 的输出引脚。
PWM 的控制与状态。看手册。
PRG_ICSSG 控制。看手册。
这些寄存器选择GMAC 芯片与 PHY 芯片的接口类型,比如RGMII:
看手册
看手册
看手册
该章节描述芯片上的电源管理架构。
芯片的电源管理架构建立在三个级别的电源控制上,分别对应各子系统(域)的时钟控制、电源控制、电压控制。
域是共享一个组资源的模块,比如共享时钟,共享电压源或者共享一个电源开关。
芯片上定义了一系列的电源域(PD),电源域中,提供给域的时钟与电源被 PSC 控制。
一个或多个 PD 可能共享一个电源供应,这个电源供应被称作电压域(VD)。
由于时钟与 PD 的切换可能过于复杂,所以 TI 提供了 DMSC 来简化芯片时钟与电源域的配置(使用 SCI 接口),对于顶层的电源管理应用,应该使用 DMSC 固件APIs。
PSC 被划分为全局的 PSC 与局部的 LPSC,对 PSC 的控制被实现在 DMSC 中。
每一个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 章节。
芯片集成了一个 WKUP 域,用于运行 TI 提供的固件,被称作 DMSC,DMSC 实现了电源管理,MCU 域与 MAIN 域通过 SCI 接口与 DMSC 通信实现电源管理。
从掉电到运行的一系列状态描述,看手册。
芯片存在一个功能叫做动态频率扩展,可以改变 ARM 核运行的频率。
芯片上存在温度传感器,具体看手册。
主要讲解了芯片的复位源,以及上电复位操作,为啥没有单独核的复位呢?通过 PSC 实现?
芯片存在多个时钟源以及时钟生成器:
芯片的时钟同样被分为两个 domain:WKUP/MCU 与 MAIN。
芯片 WKUP/MCU 域时钟框图如下:
MAIN 域与 WKUP/MCU 域顶层时钟框图请查看 5.4.1 章节。
芯片存在下列外部输入时钟源:
主要关注高频晶振与低频晶振即可。
高频晶振与低频晶振的频率应为下图所示:
芯片存在几个时钟引脚可以对外输出时钟:
详细描述看手册。
芯片上可以连接两个外部高频晶振 WKUP_HFOSC0 与 HFOSC0,还可以连接一个外部低频晶振 WKUP_LFOSC0,芯片内存存在一个 RC 振荡器 WKUP_RC_OSC_12M。
默认的,上电后只使能 WKUP_HFOSC0 晶振,HFOSC0 与 WKUP_LFOSC0 都不起振。
在 VM 中,控制 CTRLMMR_WKUP_LFXOSC_CTRL 可以使能 WKUP_LFOSC0.
在 VH 中,控制 0x43008014, 可以使能 HFOSC1.(这是 TI技术支持的回复,验证后可行)
芯片存在硬件电路来对WKUP_HFOSC0 时钟进行对齐检测,如果时钟停止翻转(因为时钟是方波)。
可以通过 CTRLMMR_WKUP_MCU_PLL_CLKSEL 的 BIT8 来使能这个检测功能。当检测到时钟故障时,会报错给 WKUP_ESM0(这是什么?),芯片会自动切换为 12M 内部 RC 振荡器。
PLL(锁相环)用于将低频时钟倍频至芯片需要的频率。
WKUP/MCU 域一个存在三个 PLL:
MCU/WKUP 域时钟树如下:
上图中, 只包含了 MCU_PLL0/1, MCU_PLL2 未列举出。
芯片的 MAIN 域存在20个 PLL:
MAIN 域 PLL 时钟树请查看技术手册第 5.4.5.2 章节。
MCU 域 PLL 参考时钟选择通过 CTRLMMR_WKUP_MCU_PLL_CLKSEL
BIT8 控制:
MAIN 域 PLL 的参考时钟源选择通过 CTRLMMR_WKUP_MAIN_PLLn_CLKSEL
的 bit0 控制:
只需要关注标准 PLL (PLLTS16FFCLAFRAC2),该 PLL 的结构框图如下:
PLL 的输入时钟为:FREF
PLL 的输出时钟如下:
PLL 又与 HSDIVIDER 相连,一个 PLL 可与最多 16 个分频器连接,每个分频器都对应一个时钟输出。
详细介绍看手册。
PLLCTRL0 使用 PLL 输出时钟作为参考时钟,可以重新进行倍频与分频:
PLL 与时钟相关配置操作,我们使用 SCI 接口完成,请查看 SCI 接口文档。