TI CC13x2/CC26x2无线MCU IOC模块:引脚复用、低功耗与配置实战

发布时间:2026/7/26 22:47:46
TI CC13x2/CC26x2无线MCU IOC模块:引脚复用、低功耗与配置实战 1. 项目概述与IOC核心价值在嵌入式开发尤其是无线MCU领域引脚资源永远是稀缺品。当你面对一块集成了射频、传感器控制器和多个串行通信接口的复杂芯片时如何优雅地分配有限的物理引脚给十几个甚至几十个潜在的外设信号就成了硬件设计和软件架构的第一个拦路虎。德州仪器TI的CC13x2/CC26x2系列无线MCU给出的答案是一个高度灵活的I/O控制器IOC。这个模块远不止是一个简单的GPIO管理器它更像是一个位于物理引脚和内部功能模块之间的智能“交通枢纽”。我接触过不少MCU很多芯片的引脚功能是固定的或者只有有限的几种复用选项。一旦PCB画好某个UART引脚被占用想换到另一个引脚上几乎不可能只能改板。但在CC13x2/CC26x2上情况完全不同。它的IOC允许你将几乎任何外设功能UART、I2C、SPI/SSI、I2S甚至内部RF Core的控制信号映射到几乎任何可用的DIO数字I/O引脚上。这种灵活性带来的直接好处是硬件工程师在布局时可以优先考虑信号完整性和电源完整性而不是被固定的引脚功能束缚软件工程师在后期调试或功能变更时也拥有了巨大的调整空间。更重要的是IOC的设计紧密贴合了这些无线MCU的低功耗特性。它包含了一个常开AON域的部分确保即使在MCU主核和大部分外设掉电的睡眠模式下关键的唤醒事件如GPIO边沿检测依然能被可靠捕获从而在极低功耗下实现事件驱动的系统唤醒。理解IOC是玩转CC13x2/CC26x2并设计出高效、可靠、低功耗嵌入式系统的基石。无论你是正在评估选型还是已经上手开发深入掌握IOC的配置逻辑和技巧都能让你在项目推进中事半功倍。2. IOC架构与核心概念深度解析要驾驭IOC首先得把几个核心概念和它们之间的关系理清楚。这些概念在数据手册里可能散落在各处我这里把它们串起来并结合实际开发中的理解来讲。2.1 核心组件MCU IOC与AON IOCIOC模块在物理上分为两大块MCU IOC和AON IOC。你可以把它们想象成公司里的两个部门一个负责日常运营MCU域一个负责7x24小时的值班和安保AON域。MCU IOC是主控制器它管理着绝大部分的引脚功能映射和配置。我们常说的将UART TX映射到DIO5或者配置某个引脚为开漏输出、使能上拉电阻这些操作都是通过配置MCU IOC中的IOC:IOCFGn寄存器来完成的。它连接着MCU域的所有外设如GPIO模块、SSI、UART、I2C等。AON IOC则是一个特殊的存在。它属于“常开”电源域这意味着即使MCU主核和大部分外设为了省电而关闭AON IOC及其管理的部分功能依然在工作。它主要负责三件事JTAG引脚控制管理调试接口的TCK引脚确保在低功耗模式下调试器仍能连接如果使能。32kHz低频时钟SCLK_LF输出控制可以将芯片内部的32kHz时钟输出到某个DIO引脚给外部电路提供时钟源或者反过来从外部引脚输入32kHz时钟。处理来自AON外设和AUX域的信号例如连接传感器控制器AUX Domain的I/O信号到物理引脚。这种分工的妙处在于功耗管理。当系统进入深度睡眠时MCU域掉电但AON IOC还在运行。如果你配置了某个DIO的边沿检测唤醒功能这个检测电路是由AON IOC维持的。当指定边沿到来时AON IOC会产生一个唤醒事件触发整个MCU重新上电并恢复运行。这就实现了“睡眠中监听事件触发唤醒”的超低功耗场景。2.2 关键术语PORTID, DIO, GPIO这是最容易混淆的三个词必须彻底分清DIO (Digital I/O)这是物理引脚在逻辑上的编号。对于CC13x2/CC26x2最多有32个DIODIO0-DIO31。注意DIO31通常只支持外设I/O功能不支持GPIO功能即不能直接用软件读写。每个DIO都对应一个IOC:IOCFGn寄存器n为DIO编号这个寄存器决定了这个引脚当前“扮演”什么角色。PORTID这是内部外设功能信号的唯一标识符是一个数字编码。你可以把它理解为“功能身份证”。例如PORTID 0x10 (16) 代表UART0_TX这个信号0x0D (13) 代表I2C_MSSDA。IOC的核心工作就是通过配置IOC:IOCFGn.PORT_ID字段将某个PORTID功能指派给某个DIO引脚。GPIO这本身就是一个特殊的外设功能它的PORTID是0x00。当将一个DIO的PORT_ID配置为0x00时这个引脚就处于GPIO模式。此时对它的控制输出高低电平、读取输入状态需要通过GPIO模块的寄存器如DOUT31_0,DIN31_0,DOE31_0来进行。一个重要的思维转换不要认为一个引脚“本来就是GPIO”。在CC13x2/CC26x2上一个引脚在复位后是未定义的高阻态。你必须先通过IOC告诉它“你去扮演GPIO这个角色PORTID0”然后才能通过GPIO模块去操作它。同样如果你想用它做UART发送就告诉它“你去扮演UART0_TX这个角色PORTID0x10”。2.3 I/O引脚能力与配置矩阵不是所有DIO都生而平等。根据具体芯片型号CC1352R, CC1352P, CC2652R等和封装DIO的能力有差异。主要关注以下几点GPIO支持绝大多数DIO通常是DIO0-DIO30都支持GPIO功能。但务必查阅具体型号的数据手册例如CC1352R不支持DIO0-DIO2CC1352P不支持DIO0-DIO4。模拟功能部分DIO如DIO23-DIO30在7x7 QFN封装中具有模拟功能可以配置为ADC输入或模拟比较器输入。这通常在IOC:IOCFGn.IOMODE字段中有特殊设置。驱动强度所有DIO都支持2mA和4mA驱动能力。部分引脚通常是DIO0-DIO2以及DIO11-DIO13等额外支持8mA驱动用于驱动需要更大电流的器件如LED或MOSFET。驱动强度通过IOC:IOCFGn.IOSTR配置。AUX域连接传感器控制器AUX Domain有自己的一组信号AUXIO0-AUXIO31。这些信号可以路由到特定的DIO引脚上参见数据手册的映射表。当你想用超低功耗的传感器控制器来周期性地读取一个传感器并通过一个DIO通知主MCU时就会用到这个映射。配置一个引脚本质上是填写IOC:IOCFGn这个多功能“属性表”。除了最重要的PORT_ID你还需要设置IOMODE: 输入/输出模式推挽、开漏、开源是否反相。IE: 输入使能。即使配置为输出有时也需要使能输入以读取引脚状态或进行边沿检测。PULL_CTL: 上下拉电阻控制。HYST_EN: 输入迟滞比较器使能用于抗噪声。SLEW_RED: 压摆率控制降低开关速度以减少EMI。EDGE_DET和EDGE_IRQ_EN: 边沿检测类型和中断使能用于唤醒和事件触发。3. 从理论到实践引脚映射与配置详解理解了架构我们来看具体怎么操作。TI提供了底层驱动库DriverLib和更高层的SDK如TI SimpleLink SDK让配置变得简单。但知其然更要知其所以然我们结合寄存器操作和API来讲解。3.1 基础映射将外设功能分配到引脚这是IOC最核心的操作。假设我们的硬件设计将UART0的TX引脚连接到了DIO5RX连接到了DIO6。寄存器级操作 我们需要找到UART0_TX和UART0_RX对应的PORTID。查表或头文件可知UART0_TX的PORTID是0x10(16)UART0_RX是0x0F(15)。然后配置对应的IOC:IOCFGn寄存器。// 假设基地址定义 #define IOC_BASE 0x40081000 #define IOC_IOCFG5 (*(volatile uint32_t *)(IOC_BASE 0x14)) // DIO5配置寄存器偏移 #define IOC_IOCFG6 (*(volatile uint32_t *)(IOC_BASE 0x18)) // DIO6配置寄存器偏移 // 配置DIO5为UART0_TX 推挽输出默认驱动强度 // PORT_ID 0x10 (16), IOMODE 0 (普通推挽输出) IE0 (输出模式通常禁用输入) IOC_IOCFG5 (0x10 0) | (0x0 8); // PORT_ID在bit[6:0], IOMODE在bit[9:8] // 配置DIO6为UART0_RX 输入使能上拉电阻 // PORT_ID 0x0F (15), IOMODE 0, IE1 (输入使能), PULL_CTL 1 (上拉) IOC_IOCFG6 (0x0F 0) | (0x0 8) | (1 13) | (1 16);使用DriverLib API TI的驱动库封装了这些操作更安全便捷。#include ti/drivers/pin/PINCC26XX.h #include driverlib/ioc.h // 定义引脚ID通常SDK头文件已定义如IOID_5 #define UART0_TX_PIN IOID_5 #define UART0_RX_PIN IOID_6 // 使用IOCPortConfigureSet函数 // 函数原型void IOCPortConfigureSet(uint32_t ioid, uint32_t portId, uint32_t ioConfig); IOCPortConfigureSet(UART0_TX_PIN, IOC_PORT_UART0_TX, IOC_STD_OUTPUT); IOCPortConfigureSet(UART0_RX_PIN, IOC_PORT_UART0_RX, IOC_STD_INPUT | IOC_INPUT_PULLUP);这里的IOC_STD_OUTPUT和IOC_STD_INPUT是预定义好的配置宏包含了IOMODE,IE,PULL_CTL等常用设置的组合。你可以通过IOC_CURRENT_2MA | IOC_SLEW_DISABLE | ...这样的方式自定义组合。3.2 高级映射案例AUX域信号与RF Core控制信号1. 映射AUX域信号传感器控制器I/O传感器控制器AUX Domain有自己的I/OAUXIOx用于在MCU深度睡眠时独立工作。要将AUXIO1映射到DIO17作为数字输入需要两步#include driverlib/ioc.h #include driverlib/aux_wuc.h // AUX Domain相关 // 第一步在MCU IOC中将DIO17的功能设置为AUX_I/O (PORTID 0x08) IOCPortConfigureSet(IOID_17, IOC_PORT_AUX_IO, IOC_NO_IOPULL); // 第二步在AUX域中配置AUXIO1的模式和方向 // 首先确保能访问AUX域寄存器上电并启用时钟 AUXWUCEnable(); // 配置AUXIO1为数字输入模式 (IOMODE.IO1 0x01) HWREG(AUX_AIODIO0_BASE AUX_AIODIO_O_IOMODE) | (0x01 4); // AUXIO1在bit[5:4] // 使能AUXIO1的数字输入缓冲 HWREG(AUX_AIODIO0_BASE AUX_AIODIO_O_GPIODIE) | (1 1); // 使能AUXIO1 (bit1)2. 控制外部PA/LNA射频前端CC13x2/CC26x2内部RF Core可以输出4个通用控制信号RFC_GPO0-3常用于使能外部功率放大器PA或低噪声放大器LNA。默认RFC_GPO0用于LNA使能RFC_GPO1用于PA使能。// 将RFC_GPO0映射到DIO12用于控制LNA IOCPortConfigureSet(IOID_12, IOC_PORT_RFC_GPO0, IOC_IOMODE_NORMAL); // 此后RF协议栈如BLE-Stack或TI 15.4-Stack会在收发时自动控制该引脚电平。 // 你也可以通过RF Core API手动控制但这通常由协议栈管理。3.3 低功耗关键32kHz时钟输出与输入32kHz低频时钟SCLK_LF是整个低功耗系统的“心跳”。有时需要将它输出给外部电路如RTC芯片或从外部高精度晶振输入。#include driverlib/aon_ioc.h // 案例1将32kHz时钟输出到DIO2 // 首先将DIO2映射为AON_CLK32K功能 IOCPortConfigureSet(IOID_2, IOC_PORT_AON_CLK32K, IOC_STD_OUTPUT); // 然后使能AON IOC的时钟输出 AONIOC32kHzOutputEnable(); // 等价于设置 AON_IOC:CLK32KCTL.OE_N 0 // 案例2使用DIO3作为外部32kHz时钟输入例如连接外部手表晶振 // 配置DIO3为AON_CLK32K功能但作为输入。注意此时该引脚不能同时用于输出 IOCPortConfigureSet(IOID_3, IOC_PORT_AON_CLK32K, IOC_INPUT_PULLDOWN); // 根据外部电路选择上下拉 // 接着需要在AON时钟源选择寄存器中将LF时钟源切换到该DIO输入。 // 这通常涉及AON_WUC:OSCCFG等寄存器的配置具体请参考时钟系统章节。重要提示AON_CLK32K这个PORTID在同一时间对于一个给定的DIO只能用作输出或输入不能同时进行。系统设计时必须明确其用途。4. GPIO操作与边沿检测中断实战当引脚被配置为GPIO模式PORTID0后就交由GPIO模块管理了。GPIO模块提供了数据输入、输出、输出使能以及事件标志寄存器。4.1 GPIO基础操作输出、输入与翻转假设我们将DIO1和DIO2配置为GPIO其中DIO1为输出DIO2为输入带上拉。#include driverlib/gpio.h // 1. 通过IOC配置引脚模式 IOCPinTypeGpioOutput(IOID_1); // 内部调用了IOCPortConfigureSetPORTID0并设为输出 IOCPinTypeGpioInput(IOID_2); // 内部调用设为输入通常带上拉 // 2. 操作GPIO // 设置DIO1输出高电平 GPIO_writeDio(IOID_1, 1); // 或者使用更直观的宏如果SDK定义了 GPIO_setDio(IOID_1); // 读取DIO2的输入状态 uint32_t input_val GPIO_readDio(IOID_2); // 翻转DIO1的输出状态高变低低变高 GPIO_toggleDio(IOID_1); // 使用DOUTSET/DOUTCLR寄存器进行原子操作避免读-修改-写 // 设置DIO1假设DIO1是bit1 HWREG(GPIO_BASE GPIO_O_DOUTSET31_0) (1 1); // 清除DIO1 HWREG(GPIO_BASE GPIO_O_DOUTCLR31_0) (1 1); // 翻转DIO1 HWREG(GPIO_BASE GPIO_O_DOUTTGL31_0) (1 1);关键点GPIO_writeDio和GPIO_readDio等函数操作的是DOUT31_0和DIN31_0寄存器。但一个引脚的输出是否真正有效还取决于DOE31_0数据输出使能寄存器。IOCPinTypeGpioOutput函数通常会同时设置好DOE位。如果你手动配置IOC寄存器务必记得在需要输出时设置对应GPIO:DOE31_0寄存器的位。4.2 边沿检测与中断配置实现低功耗唤醒这是IOC结合AON IOC实现超低功耗的关键功能。你可以配置任何一个DIO需支持输入在检测到上升沿、下降沿或双边沿时产生一个事件这个事件可以触发CPU中断也可以直接唤醒处于睡眠状态的MCU。配置步骤配置IOC在对应DIO的IOC:IOCFGn寄存器中设置EDGE_DET选择检测哪种边沿和EDGE_IRQ_EN是否产生中断。配置GPIO事件标志事件产生后状态会记录在GPIO:EVFLAGS31_0寄存器中。使能CPU中断如果需要CPU介入处理需要使能GPIO中断通常是IRQ0向量号16。编写中断服务程序ISR在ISR中读取EVFLAGS31_0来判断是哪个引脚触发的事件并清除事件标志。#include driverlib/ioc.h #include driverlib/gpio.h #include driverlib/interrupt.h #define WAKEUP_PIN IOID_4 void configureEdgeDetectWakeup(void) { // 1. 配置DIO4为GPIO输入并使能上拉假设外部接按钮到地 IOCPinTypeGpioInput(WAKEUP_PIN); // 2. 配置IOC的边沿检测下降沿触发并使能中断 // 先获取当前配置再修改边沿检测相关位 uint32_t ui32Config IOCPortConfigureGet(WAKEUP_PIN); ui32Config ~IOC_EDGE_DET_MASK; // 清除原有边沿检测设置 ui32Config | IOC_FALLING_EDGE; // 设置为下降沿检测 ui32Config | IOC_INT_ENABLE; // 使能边沿检测中断 IOCPortConfigureSet(WAKEUP_PIN, IOC_PORT_GPIO, ui32Config); // 3. 清除可能存在的旧事件标志 GPIO_clearEvent(WAKEUP_PIN); // 4. 使能GPIO中断在NVIC中 GPIO_enableInt(WAKEUP_PIN); // 这个SDK函数可能封装了NVIC操作 // 或者直接操作NVIC IntEnable(INT_GPIO); // 使能GPIO总中断 IntPendClear(INT_GPIO); // 清除 pending 状态 // 5. 使能CPU总中断 IntMasterEnable(); } // GPIO中断服务程序 void gpioIsrHandler(void) { // 检查是哪个引脚产生的事件 if(GPIO_getEvent(WAKEUP_PIN)) { // 处理WAKEUP_PIN的事件例如设置一个标志位 g_ui32WakeupFlag 1; // 必须清除事件标志否则中断会持续触发 GPIO_clearEvent(WAKEUP_PIN); // 注意清除事件标志也可以通过禁用再使能边沿检测来实现见手册 // 但直接写EVFLAGS寄存器是最直接的方式。 } // ... 检查其他引脚 }低功耗场景下的关键细节唤醒源配置除了产生CPU中断GPIO边沿事件还可以配置为直接唤醒MCU通过AON事件总线。这通常在系统进入低功耗模式如Power_sleep()或Power_shutdown()前配置好。AON IOC会维持检测电路在事件发生时唤醒电源域。引脚状态与功耗在进入深度睡眠前务必正确配置未使用引脚。理想状态是将其设置为禁用输出和输入高阻态并禁止内部上下拉。如果悬空的引脚被配置为输入且使能了上下拉会形成一条微小的电流通路称为“寄生电流”增加静态功耗。通过IOC:IOCFGn.IE 0禁用输入缓冲器是关键一步。中断清除机制手册中提到除了写EVFLAGS寄存器还可以通过禁用再使能IOC:IOCFGn.EDGE_DET来清除事件。这在某些需要严格时序或防止软件误操作清除的场景下可能有用但一般直接写EVFLAGS更简单。5. 引脚配置的陷阱与最佳实践在实际项目中IOC和GPIO的配置看似直接但隐藏的“坑”不少。下面是我总结的几个常见问题和经验。5.1 配置顺序冲突与优先级问题同一个DIO你能否同时将其配置为UART TX和GPIO输出答案是否定的。IOC:IOCFGn.PORT_ID决定了引脚当前连接到的“数据源”。后一次的配置会覆盖前一次。但是输出使能DOE和输入使能IE是独立控制的。最佳实践初始化时统一配置在系统初始化阶段集中对所有用到的引脚进行IOC配置。避免在程序运行中随意更改一个已在使用中的引脚功能除非你有完整的上下文切换如关闭旧外设再配置新功能。外设驱动负责配置使用TI Driver API如UART_open()时驱动内部会调用IOCPortConfigureSet来配置所用引脚。不要在驱动初始化后又去手动修改这些引脚的IOC配置这会导致外设工作异常。GPIO与复用功能切换如果需要动态切换一个引脚在GPIO和某种外设功能之间正确的流程是a) 保存当前外设状态并关闭b) 重新配置IOCc) 操作GPIO或开启新外设。5.2 驱动强度与压摆率的选择驱动强度IOSTR2mA, 4mA, 8mA。不是越大越好。对于低速信号如I2C、UART在9600bps或轻负载如连接另一个CMOS输入2mA足够且有助于降低EMI和功耗。对于驱动LED、继电器或长线缆需要4mA甚至8mA。高驱动强度意味着更大的瞬态电流可能引起电源噪声。压摆率控制SLEW_RED使能后可以减缓信号边沿的上升/下降时间显著减少高频谐波辐射对通过EMC测试至关重要。对于任何频率高于1MHz的信号线如SPI时钟、高速UART如果板子空间紧张或没有良好的屏蔽建议使能压摆率控制。代价是增加了信号边沿时间可能限制最高通信速率需要根据实际时序评估。5.3 未使用引脚的处理这是影响系统整体功耗和稳定性的一个静默因素。处理原则是避免引脚浮空使其处于确定的、无功耗的状态。首选方案最低功耗将IOC:IOCFGn.IE(输入使能) 设为 0禁用输入缓冲器。将IOC:IOCFGn.PULL_CTL设为 0无上下拉。PORT_ID可以保持为0GPIO或任何值因为输出被禁用。将GPIO:DOE31_0对应位设为0输出禁用。这样引脚处于高阻态且没有内部电流路径。// 将未使用的DIO10配置为安全状态 uint32_t ui32SafeConfig IOC_IOMODE_HIZ | IOC_NO_IO_PULL | IOC_INPUT_DISABLE; IOCPortConfigureSet(IOID_10, IOC_PORT_GPIO, ui32SafeConfig); GPIO_setOutputEnableDio(IOID_10, GPIO_OUTPUT_DISABLE); // 确保输出禁用次选方案稳定状态如果硬件设计允许也可以将未使用的引脚通过外部电阻上拉或下拉到VDD或GND然后在软件中配置为带相应上下拉的输入模式。这能防止因静电感应导致的电平漂移但会有微小的上下拉电阻电流通常1μA。5.4 模拟功能引脚的特殊处理具有模拟功能的DIO如DIO23-DIO30当用作ADC输入时需要将IOC:IOCFGn.IOMODE设置为模拟模式具体值参考数据手册这会自动断开数字输入/输出路径防止数字噪声干扰模拟信号。切换回数字功能时必须重新配置为数字IOMODE。5.5 调试技巧排查引脚配置问题当你发现某个引脚不按预期工作时可以按以下顺序排查确认物理连接万用表检查连通性示波器/逻辑分析仪看信号。检查IOC配置在调试器中直接读取IOC:IOCFGn寄存器的值。验证PORT_ID是否正确IE输入使能位对吗做输入时必须为1。IOMODE对吗开漏输出需要外部上拉。PULL_CTL上下拉配置是否符合外部电路检查GPIO输出使能如果是输出读取GPIO:DOE31_0寄存器确认对应位是否为1。检查外设本身确认UART、I2C等外设已正确初始化和使能。一个引脚配置对了但外设模块没开时钟或没使能同样没信号。检查冲突是否有其他代码或另一个任务覆盖了你的IOC配置特别是使用RTOS时注意共享资源的保护。6. 寄存器概览与速查手册虽然我们鼓励使用DriverLib API以提高可移植性和可读性但理解寄存器布局对于深度调试和优化至关重要。这里对关键寄存器做一个总结性速查。6.1 MCU IOC配置寄存器 (IOC:IOCFG0-IOC:IOCFG31)每个DIO对应一个。地址偏移0x000 (n * 4)。位域名称描述常用值示例6:0PORT_ID功能映射核心。写外设PORTID。0x00: GPIO,0x0F: UART0_RX,0x10: UART0_TX,0x08: AUX_IO9:8IOMODEI/O模式。0: 推挽1: 开漏2: 开源4: 模拟输入特定引脚13IE输入使能。1使能。输出时也可使能以读取状态。1: 输入使能0: 输入禁用高阻16:14PULL_CTL上下拉控制。0: 无上下拉1: 上拉2: 下拉17SLEW_RED压摆率控制。1减小压摆率降EMI。1: 使能0: 禁用18HYST_EN输入迟滞使能。1使能增强抗噪声。1: 使能0: 禁用22:19IOSTR驱动强度。0: 自动基于电池电压1: 2mA2: 4-8 mA见手册26:24EDGE_DET边沿检测类型。0: 无1: 上升沿2: 下降沿3: 双边沿27EDGE_IRQ_EN边沿检测中断使能。1使能。1: 使能中断6.2 GPIO核心操作寄存器这些寄存器位于GPIO模块地址空间与DIO编号的位直接对应。寄存器名偏移量描述操作技巧DOUT31_00x80数据输出值。写1输出高写0输出低。直接读写整个寄存器可同时控制多个引脚。DIN31_00xC0数据输入值。读取引脚当前电平。读取前确保该引脚IOC配置中IE1。DOE31_00xD0数据输出使能。1使能输出0高阻态。输出操作的前提忘记使能是常见错误。DOUTSET31_00x90置位寄存器。写1的位对应DOUT位被置1。原子操作避免读-修改-写风险。DOUTCLR31_00xA0清零寄存器。写1的位对应DOUT位被清0。原子操作。DOUTTGL31_00xB0翻转寄存器。写1的位对应DOUT位取反。原子操作实现引脚电平快速翻转。EVFLAGS31_00xE0事件标志寄存器。边沿检测到的事件在此记录。读后写1清除。中断服务程序必须清除相应位。6.3 AON_IOC关键寄存器CLK32KCTL(偏移 0x10): 控制32kHz时钟输出使能 (OE_N位)。IOSTRMIN/MED/MAX(偏移 0x0, 0x4, 0x8): 内部用于驱动强度自动调整通常无需用户直接操作。掌握这些寄存器你就能在寄存器层面完全掌控CC13x2/CC26x2的每一个I/O引脚。结合TI提供的DriverLib你可以在保证开发效率的同时拥有解决最底层硬件问题的能力。IOC的灵活性是CC13x2/CC26x2系列MCU的一大亮点花时间理解它能在硬件设计、PCB布局和软件架构上带来巨大的回报尤其是在引脚资源紧张和低功耗要求严苛的物联网设备设计中。