DSP28335之SCI接收8位字节数据
时间: 2023-08-16 09:10:34 浏览: 251
对于DSP28335,你可以使用其内置的SCI(串行通信接口)模块来接收8位字节数据。以下是一种简单的代码示例,演示了如何设置SCI模块并进行数据接收:
```c
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
void initSCI()
{
// 配置GPIO引脚用于SCI通信
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0; // 使能GPIO28上拉
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0; // 使能GPIO29上拉
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3; // 设置GPIO28为双边沿触发
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; // 配置GPIO28为SCIRXDA引脚
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; // 配置GPIO29为SCITXDA引脚
EDIS;
// 配置SCI模块
SciaRegs.SCICCR.all = 0x0007; // 8位数据,无奇偶校验,1个停止位
SciaRegs.SCICTL1.all = 0x0003; // 使能SCI接收和发送
SciaRegs.SCICTL2.bit.TXINTENA = 0; // 禁用发送中断
SciaRegs.SCICTL2.bit.RXBKINTENA = 0; // 禁用接收中断
SciaRegs.SCIHBAUD = 0x0000; // 设置波特率高字节
SciaRegs.SCILBAUD = 0x0027; // 设置波特率低字节
// 清除接收缓冲区中的数据
while (SciaRegs.SCIRXST.bit.RXRDY != 0)
{
volatile Uint16 temp = SciaRegs.SCIRXBUF.all;
}
}
Uint16 receiveByte()
{
while (SciaRegs.SCIRXST.bit.RXRDY != 1); // 等待接收到数据
return SciaRegs.SCIRXBUF.bit.SAR;
}
void main(void)
{
InitSysCtrl();
initSCI();
Uint16 receivedData = receiveByte();
// 处理接收到的数据
}
```
在这个示例中,首先通过配置GPIO引脚,将GPIO28配置为SCIRXDA引脚,用于接收数据。然后,配置SCI模块的控制寄存器和波特率寄存器,设置数据位数、校验位数、停止位数和波特率等参数。接下来,在`receiveByte`函数中,使用`SCIRXST`位来检查是否接收到了数据,如果有数据可用,则从`SCIRXBUF`寄存器读取接收到的数据。
你可以根据自己的需求修改代码,并根据需要添加错误检测和处理机制。希望这能帮到你!
阅读全文