GPIO
SCI GPIO映射
GPIO43初始化:由CPU1控制、复用为SCI接收引脚、输入模式、标准推挽/浮空配置、异步输入限定模式
1 | // |
GPIO42初始化:由CPU1控制、复用为SCI发送引脚、输出模式、标准推挽/浮空配置、异步输出限定模式
1 | // |
GPIO函数功能说明
函数名 | 参数 | 返回值 | 功能说明 |
---|---|---|---|
GPIO_setMasterCore | pin : uint32_t (GPIO引脚号)core : GPIO_CoreSelect (控制器核心) |
void | 设置指定GPIO引脚由哪个核心控制。 core可选值: - GPIO_CORE_CPU1 - GPIO_CORE_CPU1_CLA1 - GPIO_CORE_CPU2 - GPIO_CORE_CPU2_CLA1 |
GPIO_setPinConfig | pinConfig : uint32_t (引脚配置值) |
void | 配置GPIO引脚的多路复用功能(配置值在pin_map.h中定义,如GPIO_43_SCIRXDA) |
GPIO_setDirectionMode | pin : uint32_t (GPIO引脚号)pinIO : GPIO_Direction (方向模式) |
void | 设置GPIO引脚方向模式。 pinIO可选值: - GPIO_DIR_MODE_IN - GPIO_DIR_MODE_OUT |
GPIO_setPadConfig | pin : uint32_t (GPIO引脚号)pinType : uint32_t (引脚类型) |
void | 设置GPIO引脚的电气特性。 pinType可选值: - GPIO_PIN_TYPE_STD - GPIO_PIN_TYPE_PULLUP - GPIO_PIN_TYPE_OD - GPIO_PIN_TYPE_INVERT(可组合使用) |
GPIO_setQualificationMode | pin : uint32_t (GPIO引脚号)qualification : GPIO_QualificationMode |
void | 设置输入限定模式。 qualification可选值: - GPIO_QUAL_SYNC - GPIO_QUAL_3SAMPLE - GPIO_QUAL_6SAMPLE - GPIO_QUAL_ASYNC |
串口
串口参数配置:115200、8、1、N,这个配置很简单,不做详细介绍
1 | // |
FIFO
SCIA FIFO配置
1 | SCI_enableModule(SCIA_BASE); |
枚举类型 SCI_TxFIFOLevel
定义了 SCI(串行通信接口)模块发送 FIFO 的中断触发水位线级别,用于配置何时触发发送 FIFO 中断
枚举值 | 值(十六进制) | 含义 | 典型应用场景 |
---|---|---|---|
SCI_FIFO_TX0 |
0x0000 |
FIFO 完全空时触发中断 | 高实时性要求,需立即补充数据 |
SCI_FIFO_TX1 |
0x0001 |
FIFO 剩余 15/16 满(即已发送1个字节)时触发 | 低延迟传输 |
SCI_FIFO_TX2 |
0x0002 |
FIFO 剩余 14/16 满时触发 | |
… | … | … | |
SCI_FIFO_TX15 |
0x000F |
FIFO 剩余 1/16 满(即已发送15个字节)时触发 | 平衡中断频率和响应速度 |
SCI_FIFO_TX16 |
0x0010 |
FIFO 完全满时触发中断 | 错误检测(通常避免使用) |
FIFO配置流程:
SCI_enableModule(SCIA_BASE)
- 使能SCI模块
- 这是使用SCI通信的第一步,必须先使能模块才能进行其他配置
SCI_resetChannels(SCIA_BASE)
- 复位SCI通道
- 清除所有通道相关的配置和状态
- 确保从一个干净的状态开始配置
SCI_enableFIFO(SCIA_BASE)
- 使能SCI的FIFO功能
- FIFO(First In First Out)缓冲区可以提高数据传输效率
- 允许在发送和接收时缓存多个数据
SCI_enableInterrupt(SCIA_BASE, (SCI_INT_RXFF | SCI_INT_TXFF))
- 使能FIFO相关的中断
SCI_INT_RXFF
: 接收FIFO中断,当接收FIFO达到设定水平时触发SCI_INT_TXFF
: 发送FIFO中断,当发送FIFO低于设定水平时触发- 使用位或运算(|)同时使能这两个中断
SCI_disableInterrupt(SCIA_BASE, SCI_INT_RXERR)
- 禁用接收错误中断
SCI_INT_RXERR
包括帧错误、溢出错误等- 在这个例子中不需要处理这些错误
SCI_setFIFOInterruptLevel(SCIA_BASE, SCI_FIFO_TX16, SCI_FIFO_RX16)
- 设置FIFO中断触发水平
SCI_FIFO_TX16
: 当发送FIFO中数据少于16个时触发中断SCI_FIFO_RX16
: 当接收FIFO中数据达到16个时触发中断- 这些值可以根据需要调整,以平衡实时性和系统负载
SCI_performSoftwareReset(SCIA_BASE)
- 执行SCI软件复位
- 清除所有配置和状态
- 确保之前的配置完全生效
SCI_resetTxFIFO(SCIA_BASE)
和SCI_resetRxFIFO(SCIA_BASE)
- 分别复位发送和接收FIFO
- 清空FIFO缓冲区
- 确保没有残留的旧数据
中断
发送和接收中断服务函数:SCI_clearInterruptStatus和Interrupt_clearACKGroup两个步骤是必要的
1 | // |
发送和接收中断使能
1 | // |
第一次发送传输时记得手动使能中断函数
1 | Interrupt_enable(INT_SCIA_TX); |
中断的配置流程:
Interrupt_initModule()
- 初始化外设中断扩展模块(PIE)
- 清除所有PIE寄存器
- 禁用CPU中断
- 这是配置中断系统的第一步,确保从一个干净的状态开始
Interrupt_initVectorTable()
- 初始化PIE中断向量表
- 将向量表中的所有中断向量指向默认的中断服务程序(ISR)
- 这确保了即使有未处理的中断,系统也不会崩溃
Interrupt_register(INT_SCIA_RX, sciaRXFIFOISR)
和Interrupt_register(INT_SCIA_TX, sciaTXFIFOISR)
- 将特定的中断与对应的中断服务程序(sciaRXFIFOISR和sciaTXFIFOISR)关联起来
INT_SCIA_RX
是SCI接收中断,关联到sciaRXFIFOISR
函数INT_SCIA_TX
是SCI发送中断,关联到sciaTXFIFOISR
函数- 这样当这些中断发生时,系统就知道该调用哪个函数来处理
Interrupt_enable(INT_SCIA_RX)
和Interrupt_enable(INT_SCIA_TX)
- 启用特定的中断
- 使能SCI接收和发送中断
- 只有被使能的中断才会触发对应的ISR
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9)
- 清除中断确认组9的中断标志
- 这确保之前可能存在的未处理中断不会立即触发
- 中断组9通常包含SCI相关的中断
- 第一次发送传输需要手动使能中断服务函数,如
Interrupt_enable(INT_SCIA_TX)
总结
controlSuite里边的SCI loopback例程不大靠谱,导入CCS里边后编译不成功,即使你折腾好运行也是有问题的,建议使用C2000里边的example