ZHCUBY2 April 2024 MSPM0C1104 , MSPM0L1105
为了让您更加熟悉 TI 生态系统并更好地开始使用 MSPM0,本节说明了基本应用程序的逐步迁移过程。
为了演示从 Microchip 器件移植到 MSPM0 的过程,本说明以现有 UART 示例为起点,来介绍将基本低功耗 UART 应用程序从 Microchip 8 位器件移植到 MSPM0 器件的步骤。此示例首先介绍具有 USART 模块的 Microchip ATtiny 和 ATmega 器件的 USART 示例。
迁移的第一步是为应用程序选择正确的 MSPM0 器件。为此,可使用本指南的米6体育平台手机版_好二三四系列部分选择 MSPM0 系列。可以使用米6体育平台手机版_好二三四选择工具将范围缩小至特定的器件。在选择 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 组合每个块。