ZHCUBY2 April 2024 MSPM0C1104 , MSPM0L1105 , MSPM0L1227 , MSPM0L1227-Q1 , MSPM0L1228 , MSPM0L1228-Q1 , MSPM0L2227 , MSPM0L2227-Q1 , MSPM0L2228 , MSPM0L2228-Q1
本应用手册可协助您从 Microchip 的 8 位 AVR® MCU 平台迁移至德州仪器 (TI) 的 Arm® Cortex®-M0+ MSPM0 MCU 生态系统。本指南介绍了 MSPM0 开发和工具生态系统、内核架构、外设注意事项以及软件开发套件。目的是突出两个系列之间的差异,并利用现有的 Microchip AVR® 生态系统知识快速提升 MSPM0 系列 MCU 的性能。
MSP430™, TI E2E™, Code Composer Studio Theia™, LaunchPad™, EnergyTrace™, and BoosterPack™are TMs ofTI corporate name.
Arm® and Cortex®are reg TMs ofArm Limited (or its subsidiaries) in the US and/or elsewhere.
Other TMs
MSP430™ MCU 是 TI 的经典微控制器,已有近 30 年的历史。最新一代推出了 MSPM0 系列。MSPM0 微控制器 (MCU) 是 MSP 高度集成的超低功耗 32 位 MCU 系列的一员,基于增强型 Arm® Cortex®-M0+ 32 位内核平台。这些成本优化型 MCU 提供高性能模拟外设集成,支持扩展的工作温度范围并提供小尺寸封装。TI MSPM0 系列低功耗 MCU 包含具有不同模拟和数字集成度的器件,使工程师能够找到满足其工程需求的 MCU。MSPM0 MCU 系列将 Arm Cortex-M0+ 平台与超低功耗系统架构相结合,使系统设计人员能够在降低能耗的同时提高性能。
MSPM0 MCU 是 Microchip 8 位 AVR MCU 的替代产品,具有很强的竞争力。本应用手册通过比较器件功能和生态系统,有助于完成从这些 Microchip MCU 到 TI MSPM0 MCU 的迁移。
Microchip ATmega 169A/329A 系列 | Microchip ATmega 48/88/168 系列 | Microchip ATtiny 42x/82x 系列 | TI MSPM0 MSPM0Gx 系列 | TI MSPM0 MSPM0Lx 系列 | TI MSPM0 MSPM0Cx 系列 | |
---|---|---|---|---|---|---|
内核/频率 | AVR RISC 16MHz/20MHz | AVR RISC 20MHz | AVR RISC 20MHz | CM0+/32MHz-80MHz | CM0+/32MHz | CM0+/24MHz |
电源电压 | 1.8V 至 5.5V | 1.8V 至 5.5V | 1.8V 至 5.5V | 1.62V 至 3.6V | 1.62V 至 3.6V | 1.62V 至 3.6V |
温度 | -40°C 至 85°C | -40°C 至 85°C | -40°C 至 85°C | -40°C 至 125°C | -40°C 至 125°C | -40°C 至 125°C |
存储器 | 64KB 至 16KB | 16KB 至 4KB | 8KB 至 4KB | 128KB 至 32KB | 64KB 至 8KB | 16KB 至 8KB |
RAM | 高达 4KB | 高达 1KB | 高达 1KB | 高达 32KB | 高达 4KB | 1KB |
EEPROM | 高达 2KB | 高达 512B | 128B | 如果器件具有 < 32KB 闪存,则仿真容量高达 32KB 或整个闪存 | 如果器件具有 < 32KB 闪存,则仿真容量高达 32KB 或整个闪存 | 如果器件具有 < 32KB 闪存,则仿真容量高达 32KB 或整个闪存 |
GPIO(最大值) | 54/69 | 23 | 12 | 高达 60 | 高达 28 | 高达 18 |
模拟 | 1 个 15ksps、10 位 ADC 1 个比较器 |
1 个 15ksps、10 位 ADC 1 个比较器 |
1 个 375ksps、12 位 ADC 1 个比较器 |
2 个 4Msps、12 位 ADC 3 个高速比较器 2 个运算放大器 1 个通用放大器 1 个 12 位 DAC |
1 个 1.68Msps、12 位 ADC 1 个高速比较器 1 个通用放大器 2 个 OPA |
1 个 1.5Msps、12 位 ADC |
通信(最大值) | 1 个 SPI 1 个 I2C 1 个 UART |
1 个 SPI 1 个 I2C 1 个 UART |
1 个 SPI 1 个 I2C 2 个 UART |
2 个 SPI 2 个 I2C Fast+ 3 个 UART 1 个 UART -LIN 1 个 CAN-FD |
1 个 SPI 2 个 I2C Fast+ 1 个 UART 1 个 UART (LIN) |
1 个 SPI 2 个 I2C Fast+ 1 个 UART (LIN) |
计时器 | 2 个 8 位 1 个 16 位 |
2 个 8 位 1 个 16 位 |
1 个 16 位 Type A 2 个 16 位 Type B |
6 个 16 位、 1 个 32 位 |
4 个 16 位 | 3 个 16 位 |
高级计时器 | 否 | 否 | 否 | 2 个 16 位高级 | 否 | 否 |
硬件加速器 | 硬件 2 周期乘法器 | 硬件 2 周期乘法器 | 硬件 2 周期乘法器 | MATHACL | 不适用 | 不适用 |
安全性 | 否 | 否 | CRC | CRC、TRNG、AES256 | CRC | CRC |
低功耗 | 有效:250µA/MHz 待机 15µA |
有效:281µA/MHz 待机 2.5µA |
有效:455µA/MHz 待机 0.7µA |
有效:96µA/MHz 待机:1.5µA |
有效:71µA/MHz 待机:1µA |
有效:71µA/MHz 待机:1µA |
MSPM0 MCU 由广泛的硬件和软件生态系统提供支持,随附参考设计和代码示例,便于您快速开始设计。MSPM0 MCU 还具有在线资源、MSP Academy 培训支持和 TI E2E™ 支持论坛提供的在线支持。
Microchip | MSPM0 | |
---|---|---|
IDE | MPLAB X IDE | Code Composer Studio Theia™ IDE (CCS) |
软件配置 | MPLAB 代码配置器 | SysConfig |
独立编程 | MPLAB IPE | UniFlash |
显示/演示 GUI 编辑器 | MPLAV Garniby 图形编辑器 | GuiComposer |
MSPM0 SDK 提供软件 API、示例、文档和库,可帮助工程师在德州仪器 (TI) MSPM0+ 微控制器器件上快速开发应用程序。提供了各种示例来展示如何在每个受支持的器件上使用各功能区,这些示例可用作您开发自己的工程的起点。此外,MSPM0 SDK 中还包含交互式 MSP Academy 培训,以提供引导式学习路径。
示例文件夹分为 RTOS 和非 RTOS 子文件夹。这些文件夹包含每个 LaunchPad™ 开发套件的示例,并且按类别有序分类,例如较低级别的 DriverLib 示例、较高级别的 TI 驱动程序示例以及 GUI Composer、LIN、IQMath 等中间件示例等等。有关详细信息,请参阅 MSPM0 SDK 用户指南。
Code Composer Studio Theia IDE (CCS) 是与 Microchip MPLAB X IDE 等效的 TI 产品。CCS 是一款基于 Eclipse 的免费 IDE,支持 TI 的微控制器 (MCU) 和嵌入式处理器产品系列。CCS 包含一整套用于开发和调试嵌入式应用程序的工具,其中包含优化的 C/C++ 编译器、源代码编辑器、工程构建环境、调试器、性能评测工具和许多其他功能。CCS 可作为桌面或基于云的 IDE 提供。
CCS 集成了 SysConfig 的 MSPM0 器件配置和自动代码生成功能,并在集成式 TI Resource explorer 中集成了 MSPM0 代码示例和 Academy 培训。CCS 提供一体式开发工具体验。
除 CCS 之外,表 2-2 中列出的业界通用 IDE 也支持 MSPM0 器件。
IDE | MSPM0 |
---|---|
CCS | ✓ |
IAR | ✓ |
Keil | ✓ |
SysConfig 是一个直观而全面的图形实用程序集合,用于配置引脚、外设、无线电、子系统和其他组件。它是与 Microchips MPLAB 代码配置器等效的 TI 产品。SysConfig 可帮助您直观地管理、发现和解决冲突,以便您有更多时间创建差异化应用程序。该工具的输出包括 C 头文件和代码文件,这些文件可与 MSPM0 SDK 示例配合使用,或用于配置定制软件。SysConfig 集成在 CCS 中,但也可以用作独立的程序。
有关详细信息,请参阅 MSPM0 SysConfig 指南。
LaunchPad 开发套件是适用于 MSPM0 的唯一评估模块。LaunchPad 套件是易于使用的 EVM,其中包含在 MSPM0 上开始开发所需的一切内容。这包括一个板载调试探针,用于使用 EnergyTrace™ 技术进行编程、调试和测量功耗。MSPM0 LaunchPad 套件还具有板载按钮、LED 和温度传感器以及其他电路。40 引脚 BoosterPack™ 插件模块接头简化了快速原型设计,支持市面上的多种 BoosterPack 插件模块。您可快速添加无线连接、图形显示、环境检测等功能。
调试子系统 (DEBUGSS) 将串行线调试 (SWD) 两线制物理接口连接到器件内的多个调试功能。MSPM0 器件支持调试处理器执行情况、器件状态和电源状态(使用 EnergyTrace 技术)。图 2-3 显示了调试器的连接。
MSPM0 支持用于标准串行线调试的 XDS110 和 J-Link 调试器。
德州仪器 (TI) XDS110 专为 TI 嵌入式处理器而设计。XDS110 通过 TI 20 引脚连接器(带有用于 TI 14 引脚以及 Arm 10 引脚和 Arm 20 引脚的多个适配器)连接到目标板,并通过 USB2.0 高速 (480Mbps) 连接到主机 PC。它在单个仓体中支持更广泛的标准(IEEE1149.1、IEEE1149.7、SWD)。所有 XDS 调试探针都支持所有具有嵌入式跟踪缓冲器 (ETB) 的 Arm 和 DSP 处理器中的内核和系统跟踪。有关详细信息,请参阅 XDS110 调试探针。
J-Link 调试探针是优化调试和闪存编程体验的最常见的选择。这得益于其创纪录的闪存加载程序、高达 3MiB/s 的 RAM 下载速度以及在 MCU 闪存中设置无限数量断点的能力。J-Link 还支持各种 CPU 和架构,包括 Cortex M0+。有关详细信息,请访问 Segger J-Link 调试探针页面。
图 2-3 显示了连接到 MSPM0 目标的 XDS110 探针的主要功能区域和接口的简要示意图。
迁移的第一步是查看产品系列并选择最佳的 MSPM0 MCU。选择 MSPM0 MCU 后,选择开发套件。开发套件包括可供购买的 LaunchPad 套件和适用于目标插座板的设计文件。TI 还提供免费的 MSPM0 软件开发套件 (SDK),该套件在 TI Resource Explorer 中作为 Code Composer Studio Theia IDE 桌面版和云版组件提供。可使用本应用手册的外设部分来帮助将软件从 Microchip 器件移植到 MSPM0。最后,软件移植后,使用我们的调试工具下载并调试应用程序。
为了让您更加熟悉 TI 生态系统并更好地开始使用 MSPM0,本节说明了基本应用程序的逐步迁移过程。
为了演示从 Microchip 器件移植到 MSPM0 的过程,本说明以现有 UART 示例为起点,来介绍将基本低功耗 UART 应用程序从 Microchip 8 位器件移植到 MSPM0 器件的步骤。此示例首先介绍具有 USART 模块的 Microchip ATtiny 和 ATmega 器件的 USART 示例。
迁移的第一步是为应用程序选择正确的 MSPM0 器件。为此,可使用本指南的产品系列部分选择 MSPM0 系列。可以使用产品选择工具将范围缩小至特定的器件。在选择 Microchip ATtiny 或 ATmega 器件的替代器件时,只要选择正确的替换器件,MSPM0 器件就可以匹配几乎所有功能。务必确保所选的 MSPM0 具有可用于要迁移的代码的外设集。MSPM0 还提供许多引脚对引脚可扩展选项,从而能够轻松扩展到存储器更大或更小的器件,而无需更改系统中的任何其他内容。
在本示例中,我们选择了 MSPM0C1104 作为该应用的最佳器件。
使用评估模块 (EVM) 可以加快迁移过程。对于 MSPM0 MCU,LaunchPad 套件是最容易上手的硬件。LaunchPad 套件易于使用,因为它们附带内置编程器,旨在实现快速开发。
MSPM0C1104 具有可用于移植软件的 LaunchPad 开发套件 (LP-MSPM0C1104)。
在移植软件之前,必须选择并设置软件开发环境。节 2.1显示了 MSPM0 支持的所有 IDE。对于所选的任何 IDE,迁移和移植过程都是类似的。应使用最新版本的 MSPM0 SDK。
在本示例中,TI 的 CCS-Theia 是所选的 IDE。
准备好环境后,开始使用 MSPM0 SDK。如前所述,MSPM0 SDK 与 MPLAB Harmony 软件包类似。MSPM0 SDK 为软件开发提供了不同的层。对于与 Microchip 器件驱动程序等效的驱动程序,请查看 MSPM0 的 TI 驱动程序和 Driverlib 支持。大多数 MSPM0 用户发现 DriverLib 级别的软件最适合其应用程序,因此大多数 MSPM0 软件示例也基于 DriverLib。本示例使用 DriverLib。
移植工程时的一个选项是尝试使用等效的 MSPM0 DriverLib API 替换代码的每个部分,但这通常不是最简单的方法。通常,最好先了解被移植的应用程序代码。然后,从最接近的 MSPM0 示例工程开始,对其进行修改以匹配原始代码功能。下面将使用 MPLAB Discover 中的低功耗 UART 示例展示该过程。对于使用许多外设的更复杂的工程,通常会针对每个外设重复该过程。
以下说明来自 Microchip 的“USART 入门”用户指南中的示例工程。
The following code continually sends the string “Hello World!”. A string is sent character by character. The ‘USART0_sendString’ function calls the ‘USART0_sendCharacter’ function for each character in “Hello Word!” string. Before sending each character, the ‘USART0_sendChar’ function waits for the previous character transmission to be completed. This is done by polling the status register, until the data register empty flag, STATUS.DREIF, is set.
第一步是了解 MCU 的主要设置。这通常是时钟速度和电源策略。在本示例中,未指定通用时钟频率,因为唯一重要的设置是 UART 在低功耗停止 0 模式下工作。它指出低功耗 UART 时钟基于“HIS”或高速内部振荡器,这意味着没有使用外部晶体。UART 以 9600 波特运行,具有 8 个数据位、1 个起始位和停止位,无奇偶校验。没有使用硬件流控制。应用程序侧检查是否收到“S”或“s”并使 LED 闪烁。
下一步是了解 ATmega/ATtiny 和 MSPM0 的 UART 模块之间的任何差异,然后在 MSPM0 SDK 中找到最接近的示例。这可以通过参考节 4中的 UART 部分轻松完成。该部分重点介绍 UART 模块之间的差异以及指向与 UART 相关的 MSPM0 SDK 代码示例的链接。对于本示例,SDK 中最接近的示例可能是 uart_echo_interrupts_standby,其中“当器件处于待机模式时 UART RX/TX 使用中断回显”。
该 MSPM0 示例与要移植的工程类似,但不完全相同。此示例仅回传在器件的 TX 引脚上接收到的数据。对该 C 代码进行小幅调整即可与原始示例保持一致。
找到类似的示例后,打开 CCS 并导入代码示例,方法是转到 Project > Import CCS Projects... 并导航至 MSPM0 SDK 的示例文件夹。导入示例。以下是导入的 uart_echo_interrupts_standby 示例。这是一个 SysConfig 工程,因此主 C 文件很简单。它首先调用 SysConfig driverlib 初始化,这是 SysConfig 自动生成的用于配置器件的函数。然后它启用 UART 中断。最后,它进入睡眠状态,等待任何 UART 事务。如果接收到 UART 事务,它会以“Hello World!”进行响应。
要查看 SysConfig 配置,请打开.syscfg 文件,该文件默认在“SYSCTL”选项卡上打开。有关使用 SysConfig 的详细指南,请参阅 MSPM0 SDK 中的 SysConfig 指南。
此示例已设置 UART 外设,因此无需更改在此文件中找到的任何配置。如果需要,可以更改时钟源、时钟分频器、目标波特率等设置。在此迁移演示中,配置将保持不变。
该示例还使用了一些 Microchip 示例中不包含的 GPIO。这些 GPIO 仅用于调试目的,其中一个用于驱动 LED。可以在演示时保留这些内容,或者如果更合适的话,可以将其删除。
保存并重建工程后,SysConfig 会更新该示例的 ti_msp_dl_config.c 和 ti_msp_dl_config.h 文件。此时,已修改示例硬件配置,以匹配正在移植的原始软件的全部功能。唯一剩下的工作是应用程序级软件检查传入的 UART 字节,以切换 LED 并使用“Hello World!”进行响应。这可以通过编辑 uart_echo_interrupts_standby.c 文件中的少量代码来实现。
对应用程序代码进行了两处更改。首先,消息阵列必须进行初始化,以便器件可以正确响应 UART 消息。为此,在 gEchoData 初始化下方插入以下行:
static uint8_t gMessage[12] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!'};
第二步实际是使用 for 循环和 UART 发送函数的阻塞版本来处理数据发送,因此一次只发送一个字符,Tx 缓冲区中没有数据冲突。这通过将以下代码添加到 UART RX ISR 来实现:
for(int i = 0; i < 12; i++){
DL_UART_Main_transmitDataBlocking(UART_0_INST, gMessage[i]);
}
以下各图演示了该代码示例的正确功能。如第一个图所示,在 PC 上使用终端程序将 UART 字符发送到 LP-MSPM0C1104 时,器件会以“Hello World!”进行响应。
在第二个图中,逻辑分析仪的捕获结果显示了器件的 RX 和 TX 线路,其中显示了传入的字符和传出的“Hello World!”。
每收到一个字符时,板载 LED 都将亮起再熄灭。
软件移植成功!如果这只是许多外设的第一个外设,请继续重复该过程并使用 SysConfig 组合每个块。
ATmega/ATtiny 和 MSPM0 系列器件相互之间存在很大差异。这些 Microchip 器件使用专有的 8 位 CPU 内核,而 MSPM0 器件使用 ARM M0+ 32 位内核。下表简要概述了 MSPM0G 和 MSPM0L 系列与 ATtiny 和 ATmega 器件中 CPU 之间的一般功能比较。节 3.6.1比较了中断和异常以及它们在每款器件 M0 架构中包含的嵌套矢量中断控制器 (NVIC) 外设中的映射方式。
功能 | ATmega | ATtiny | MSPM0G | MSPM0L | MSPM0C |
---|---|---|---|---|---|
架构 | Microchip 8 位 AVR | Microchip 8 位 AVR | Arm Cortex-M0+ | Arm Cortex-M0+ | Arm Cortex-M0+ |
最大 MCLK | 16MH | 20MHz |
32MHz 至 80MHz |
32MHz | 24MHz |
CPU 指令缓存 | 无 | 无 | 4x64 位行(32 字节) | 2x64 位行(16 字节) | 无 |
处理器跟踪功能 | 否 | 否 | 是,集成微跟踪缓冲器 | 否 | 否 |
存储器保护单元 (MPU) | 否 | 否 | 是 | 否 | 否 |
系统计时器 (SYSTICK) | 否 | 否 | 是 - 24 位 | 是 - 24 位 | 否 |
NVM 预取 | 否 | 是 | 是 | 是 | 是 |
硬件乘法 | 是 | 是 | 是 | 是 | 否 |
硬件断点/观察点 | 0 | 2/0 | 4/2 | 4/2 | 4/2 |
引导例程存储器 | 闪存(系统存储器) | 闪存(系统存储器) | ROM | ROM | ROM |
引导加载程序存储器 | 闪存(系统存储器) | 闪存(系统存储器) | ROM | ROM | 否 |
引导加载程序接口支持(1)(2) | 适用于所有数据接口 | 适用于所有数据接口 | UART、I2C、 用户可扩展 |
UART、I2C、 用户可扩展 |
用户自定义 |
DMA | 否 | 否 | 是 - 7 通道 | 是 - 3 通道 | 是 - 1 通道 |
MSPM0 和 Microchip 8 位 MCU 系列器件具有非易失性闪存,用于存储可执行程序代码和应用程序数据。
特性 | ATmega | ATtiny | MSPM0G | MSPM0L | MSPM0C |
---|---|---|---|---|---|
闪存 | 4KB 至 64KB | 4KB 至 32KB | 128KB 至 32KB | 64KB 至 8KB | 16KB 至 8KB |
存储器组织 | 单个单元 | 单个单元 | 单个单元 | 单个单元 | 单个单元 |
闪存字大小 | 8 位 | 8 位 | 64 位加 8 个 ECC 位 | 64 位加 8 个 ECC 位 | 64 位加 8 个 ECC 位 |
编程分辨率 | 8 位 | 8 位 | 单字、32 位、16 位或 8 位(字节) | 单字、32 位、16 位或 8 位(字节) | 单字、32 位、16 位或 8 位(字节) |
擦除 | 页擦除 芯片擦除(所有组) |
页擦除 芯片擦除(所有组) |
扇区擦除 = 1KB 组擦除(最大 256KB) |
扇区擦除 = 1KB 组擦除(最大 256KB) |
扇区擦除 = 1KB 组擦除(最大 256KB) |
写保护 | 是 | 是 | 是,静态和动态 | 是,静态和动态 | 是,静态和动态 |
读保护 | 否 | 否 | 是 | 是 | 是 |
闪存读取操作 | 8 位 | 8 位 | 64 位闪存字大小加 8 个 ECC 位 | 64 位闪存字大小加 8 个 ECC 位 | 64 位闪存字大小加 8 个 ECC 位 |
闪存写入操作 | 8 位 | 8 位 | 64 位闪存字大小加 8 个 ECC 位 | 64 位闪存字大小加 8 个 ECC 位 | 64 位闪存字大小加 8 个 ECC 位 |
纠错码 (ECC) | 否 | 否 | 对于 64 位为 8 位 | 对于 64 位为 8 位 | 对于 64 位为 8 位 |
预取 | 否 | 是 | 是 | 是 | 否 |
CPU 指令缓存 | 不适用 | 不适用 | 四个 64 位缓存行、8 条 32 位指令或 16 条 16 位指令 | 两个 64 位缓存行、4 条 32 位指令或 8 条 16 位指令 | MSPM0Cxx:无缓存 |
除了上表中列出的闪存功能外,MSPM0 闪存还具有以下功能:
闪存用于存储应用程序代码和数据、器件引导配置以及 TI 在出厂时预编程的参数。闪存分为一个或多个存储体,每个存储体中的存储器进一步映射到一个或多个逻辑存储区域,并分配有系统地址空间以供应用程序使用。
大多数 MSPM0 器件会实现单个闪存组 (BANK0)。在具有单个闪存组的器件上,一个正在进行的编程/擦除操作会暂停对闪存的所有读取请求,直到操作完成并且闪存控制器已经释放了对组的控制。在具有多个闪存组的器件上,一个组上的编程/擦除操作也会暂停向正在执行编程/擦除操作的组发出的读取请求,但不会暂停向另一个组发出的读取请求。因此,存在多个组可实现以下应用案例:
根据每个组中存储器所支持的功能,每个组中的存储器映射到一个或多个逻辑区域。有四个区域:
具有一个存储体的器件在 BANK0(唯一存在的存储体)上实现 FACTORY、NONMAIN 和 MAIN 区域,并且数据区域不可用。具有多个存储体的器件也在 BANK0 上实现 FACTORY、NONMAIN 和 MAIN 区域,但包括可实现 MAIN 或 DATA 区域的其他存储体(BANK1 至 BANK4)。
NONMAIN 是闪存的专用区域,用于存储 BCR 和 BSL 用于引导器件的配置数据。该区域不用于任何其他目的。BCR 和 BSL 都具有配置策略,这些策略可以保留为默认值(在开发和评估期间是典型值),也可以通过更改编程到 NONMAIN 闪存区域中的值来针对特定用途进行修改(在生产编程期间是典型值)。
MSPM0 和 Microchip 8 位 AVR MCU 系列器件具有用于存储应用程序数据的 SRAM。
功能 | ATmega | ATtiny | MSPM0G | MSPM0L | MSPM0C |
---|---|---|---|---|---|
SRAM 存储器 | 512B 至 1KB | 512B 至 3KB | 32KB 至 16KB | 4KB 至 2KB | 1KB |
部分器件包括 SRAM 奇偶校验和 ECC。有关更多详细信息,请参阅器件特定数据表。 | |||||
访问分辨率 | 字节 | 字节 | 字节、半字(16 位)或全字(32 位) | ||
奇偶效验检查 | 否 | 否 | 是 | 是 | 否 |
MSPM0 MCU 包含低功耗高性能 SRAM,可在器件支持的 CPU 频率范围内实现零等待状态访问。除代码之外,SRAM 存储器还可用于存储易失性信息,例如调用栈、堆和全局数据。SRAM 内容在运行、睡眠、停止和待机工作模式下完全保留,但在关断模式下会丢失。提供了一种写保护机制,允许应用程序以 1KB 的分辨率对低 32KB SRAM 进行动态写保护。在 SRAM 小于 32KB 的器件上,器件为整个 SRAM 提供了写保护。在将可执行代码放入 SRAM 时写保护很有用,因为它可以针对 CPU 或 DMA 无意覆盖代码提供一定程度的保护。将代码放置在 SRAM 中可以通过实现零等待状态操作和降低功耗来提高关键循环的性能。
与 Microchip 32 位器件类似,MSPM0 器件具有极低工作电压,并具有相应的模块,可通过将器件或器件的某些部分保持在复位状态来确保器件正常启动。表 3-4 比较了这两个系列的实现方式以及哪些模块控制整个系列的上电过程和复位。
ATmega | ATtiny | MSPM0 器件 | ||
---|---|---|---|---|
控制上电和复位的模块 | 电源管理器模块、系统控制器和复位模块 | 欠压检测器、复位控制器 | 控制加电和复位的模块 | PMCU(电源管理和时钟单元) |
基于电压电平的复位 | ||||
POR(上电复位) | 完整的器件复位。上电时发生第一级电压释放。断电时具有最低电压电平。 | POR(上电复位) | 完整的器件复位。上电时发生第一级电压释放。断电时具有最低电压电平。 | |
电平可配置的 BOR(欠压复位) | 用于触发复位或中断的可编程阈值 | 可配置 BOR(欠压复位) | 可配置为复位或中断,具有不同的电压阈值。 |
Microchip 器件定义了多个不同的复位类型,而 MSPM0 器件具有多个不同级别的复位状态。对于 MSPM0 器件,复位级别具有设定的顺序,当一个级别被触发时,所有后续级别都会被复位,直到器件被释放至运行模式。表 3-5 显示了 Microchip 8 位 AVR MCU 器件中的复位类型。表 3-6 简要说明了 MSPM0 复位状态。图 3-1 显示了所有 MSPM0 复位状态之间的关系。
ATmega 和 ATtiny 复位类型 | |||
---|---|---|---|
复位源 | 电源复位 | 用户复位 | |
复位名称 | 上电复位、欠压检测复位 | 外部复位 | WDT 复位、软件复位、统一编程和调试接口复位 |
MSPM0 复位状态(1) | |
---|---|
POR | 典型的触发器:POR 电压电平、SW 触发、NRST 保持低电平的时长 >1s。复位会关断存储器,重新启用 NRST 和 SWD,触发 BOR |
BOR | 典型的触发器:POR 或 BOR 电压电平、退出关断模式。复位 PMU、VCORE 和相关逻辑。触发 BOOTRST。 |
引导复位 (BOOTRST) | 典型的触发器:BOR 或软件触发、致命时钟故障、NRST 保持低电平的时长 <1s。执行引导配置例程。复位大多数内核逻辑和寄存器,包括 RTC、时钟和 IO 配置。(2)SRAM 下电上电,并且内容丢失。触发 SYSRST。 |
系统复位 (SYSRST) | 典型的触发器:BOOTRST、BSL 进入或退出、看门狗计时器、软件触发、调试子系统。复位 CPU 状态和除 RTC、LFCLK、LFXT 和 SYSOSC 频率校正环路之外的所有外设。器件在退出时进入运行模式。 |
仅 CPU 复位 (CPURST) | 仅限软件和调试子系统触发器。仅复位 CPU 逻辑。外设状态不受影响。 |
RTC 和相关时钟通过 BOOTRST、BOR 或 POR 复位。(2) |
Microchip 8 位 AVR MCU 和 MSPM0 都包含提供主时钟的内部振荡器。这些时钟可被分频,从而为其他时钟提供源并被分配到多个外设上。
ATMega | ATtiny | MSPM0 |
---|---|---|
校准后的内部 RC 8MHz | OSC20M | SYSOSC(1) |
全摆幅晶体 | 不适用 | HFXT |
外部 | 外部 | HFCLK_IN(数字时钟) |
内部 128kHz RC | OSCULP32K | LFOSC -32kHz |
低频晶体 | XOSC32K | LFXT - 32kHz |
不适用 | 不适用 | LFCLK_IN |
低功耗晶体 | 不适用 | LFXT - 32kHz |
ATmega | ATtiny | MSPM0G | MSPM0L/C |
---|---|---|---|
不适用 | OSC20M | SYSOSC |
SYSOSC |
不适用 | 不适用 | SYSPLLCLK1 | 不适用 |
不适用 | 不适用 | SYSPLLCLK0 | 不适用 |
不适用 | 不适用 | SYSPLLCLK2x(1) | 不适用 |
CLK_cpu | CLK_CPU | BUSCLK(2) | BUSCLK(2) |
CLK_cpu |
CLK_CPU |
BUSCLK(2) | BUSCLK(2) |
CLK_flash | CLK_CPU | BUSCLK(2) | BUSCLK(2) |
CLK_adc | CLK_PER | SYSOSC/ULPCLK/HFCLK | SYSOSC/ULPCLK/HFCLK |
CLK_io |
CLK_PER |
BUSCLK(2) | BUSCLK(2) |
CLK_async | CLK_RTC | LFCLK | 不适用 |
外设 | ATmega | ATtiny 系列 | MSPM0G | MSPM0L/C |
---|---|---|---|---|
RTC | CLK_async | CLK_RTC | LFCLK(LFOSC、LFXT) | 不适用 |
UART | CLK_io | CLK_PER | BUSCLK、ULPCLK、MFCLK、LFCLK | BUSCLK、ULPCLK、MFCLK、LFCLK |
SPI | CLK_io | CLK_PER | BUSCLK、MFCLK、LFCLK | BUSCLK、ULPCLK、MFCLK、LFCLK |
I2C | CLK_io | CLK_PER | BUSCLK、MFCLK | BUSCLK、ULPCLK、MFCLK、LFCLK |
ADC | CLK_adc | CLK_PER | ULPCLK、HFCLK、SYSOSC | SYSOSC/ULPCLK |
计时器 | CLK_io | CLK_PER | BUSCLK、MFCLK、LFCLK | BUSCLK、ULPCLK、MFCLK、LFCLK |
LPTIM 1/2 (TIMG0/1) | CLK_async | CLK_PER | LFCLK、ULPCLK、LFCLK_IN | LFCLK |
每个器件系列的器件特定 TRM 都有一个时钟树,可帮助使时钟系统可视化。Sysconfig 可以帮助您选择时钟分频以及为外设提供源。
MSPM0 MCU 提供五种主要工作模式(电源模式),可根据应用要求优化器件功耗。这些模式按照功耗从高到低排列如下:RUN、SLEEP、STOP、STANDBY 和 SHUTDOWN。CPU 会在运行模式中执行代码。外设中断事件可将器件从睡眠、停止或待机模式唤醒至运行模式。关断模式会完全禁用内部内核稳压器,以更大限度地降低功耗,并且只能通过 NRST、SWD 或某些 IO 上的逻辑电平匹配来实现唤醒。运行、睡眠、停止和待机模式还包括多个可配置的策略选项(例如,RUN.x),用于平衡性能与功耗。
为了进一步平衡性能和功耗,MSPM0 器件实现了两个电源域:PD1(用于 CPU、存储器和高性能外设)和 PD0(用于低速、低功耗外设)。在运行和睡眠模式下,PD1 始终通电,但在所有其他模式下会禁用。PD0 在运行、睡眠、停止和待机模式下始终通电。PD1 和 PD0 在关断模式下都会禁用。
导航至 SDK 安装目录,在 examples > nortos > LP name > driverlib 中找到低功耗模式代码示例
Microchip 8 位 AVR 器件具有类似的工作模式。表 3-10 简要比较了 Microchip 器件和 MSPM0 器件。
Microchip ATmega 系列 | Microchip ATtiny 系列 | MSPM0 | ||||
---|---|---|---|---|---|---|
模式 | 说明 | 模式 | 说明 | 模式 | 说明 | |
运行 | 提供完整的时钟和外设 | 运行 | 提供完整的时钟和外设 | 运行 | 0 | 提供完整的时钟和外设 |
1 | SYSOSC 处于设定的频率;CPUCLK 和 MCLK 限制为 32kHz | |||||
2 | SYSOSC 被禁用;CPUCLK 和 MCLK 限制为 32kHz | |||||
空闲 | CPU 停止,但所有外设保持启用 | 空闲 | CPU 停止,但所有外设保持启用 | 睡眠 | ||
ADC 降噪 | CPU 禁用,仅启用某些外设 | 不适用 | 不适用 | 不适用 | ||
待机 | 与断电相同,但 OSC 保持启用状态 | STANDBY | CPU 停止;外设单独启用 | 睡眠 | 0 | 不对 CPU 计时 |
1 | 与运行 1 相同,但不对 CPU 计时 | |||||
2 | 与运行 2 相同,但不对 CPU 计时 | |||||
停止 | 0 | 睡眠 0 + PD1 被禁用 | ||||
1 | 睡眠 1 + SYSOSC 档位切换至 4MHz | |||||
2 | 睡眠 2 + ULPCLK 限制为 32kHz | |||||
节能 | 与断电相同,但可以启用计时器/计数器 2 | 断电 | BOD、WDT 和 PIT(RTC 的一个组件)处于活动状态 | 待机 | 0 | 具有 BOR 功能的最低功耗;所有 PD0 外设都可以接收 32kHz 的 ULPCLK 和 LFCLK;RTC 可用于 RTCCLK |
1 | 只有 TIMG0 和 TIMG1 可以接收 32kHz 的 ULPCLK 或 LFCLK;RTC 可用于 RTCCLK | |||||
断电 | CPU 停止,无时钟 | 不适用 | 不适用 | 关断 | 没有时钟、BOR 或 RTC。内核稳压关闭。PD1 和 PD0 被禁用。退出触发复位级别 BOR。 |
如表 3-10 所示,在低功耗工作模式下,MSPM0 外设或外设模式的可用性或运行速度可能会受到限制。有关具体详细信息,请参阅特定于 MSPM0 器件的数据表中的“不同工作模式下支持的功能”表,例如:
MSPM0L134x、MSPM0L130x 混合信号微控制器数据表
MSPM0 器件的另一项功能是某些外设能够执行异步快速时钟请求。这使 MSPM0 器件能够处于低功耗模式,在该模式下外设未处于活动状态,但仍然能够触发或激活外设。当异步快速时钟请求发生时,MSPM0 器件能够快速将内部振荡器提升至更高的速度和/或暂时使其进入更高的工作模式以处理即将发生的操作。这允许通过计时器、比较器、GPIO 和 RTC 快速唤醒 CPU;接收 SPI、UART 和 I2C;或触发 DMA 传输和 ADC 转换,同时在最低功耗模式下睡眠。有关异步时钟请求实现以及外设支持和用途的具体详细信息,请参阅器件特定 MSPM0 TRM 中相应的章节。
与 Microchip 器件类似,MSPM0 器件在执行等待事件 __WFE(); 或等待中断 __WFI(); 指令时会进入低功耗模式。低功耗模式由当前电源策略设置决定。器件电源策略由驱动程序库函数设置。以下函数调用将该电源策略设置为待机 0。
DL_SYSCTL_setPowerPolicySTANDBY0();
STANDBY0 可替换为选择的工作模式。有关管理电源策略的 driverlib API 的完整列表,请参阅 MSPM0 SDK DriverLib API 指南的这一部分。另请参阅以下代码示例,这些示例演示了如何进入不同的工作模式。每个 MSPM0 器件都有类似的示例。