主题中讨论的其他器件:C2000WARE
您好! 我想知道我是否正确设置了这个简单的 UART 程序。
我要做的就是在我接收某个内容时接收一个中断、并将我接收的内容存储在数组中。 我将会收到一些简单的字符串、例如"Go"、"Sttop"、 "Route 1"、"Route 2"、我将解析这些字符串。
我将以9600波特运行、半双工(只需接收)、我认为我不需要 FIFO (仍然不确定它的用途!)。
下面是我从一个示例项目开始提出的内容:
#include "DSP28x_Project.h"//器件头文件和示例 include 文件
#define CPU_FREQ 90E6
#define LSPCLK_FREQ CPU_FREQ/4
#define SCI_FREQ 100E3
#define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1
UINT16 RXParseData[256];//针对 SCI-A 接收到的数据
void main (void)
{
//步骤1. 初始化系统控制:
// PLL、安全装置、启用外设时钟
//此示例函数位于 F2806x_SYSCTRL.c 文件中。
InitSysCtrl();
//设置 UART RX 引脚->函数:void InitScibGpio()
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;//为 GPIO19启用上拉(SCIRXDB)
/*将所选引脚的限定条件设置为仅异步*/
默认情况下、//输入与 SYSCLKOUT 同步。
//这将为所选引脚选择异步(无限定条件)。
GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3;//异步输入 GPIO19 (SCIRXDB)
/*使用 GPIO 寄存器配置 SCI-B 引脚*/
//这指定哪些可能的 GPIO 引脚将是 SCI 功能引脚。
GpioCtrlRegs.GPAMUX2.bit.GPIO19=2;//为 SCIRXDB 运行配置 GPIO19
EDIS;
//结束设置 UART RX 引脚
SciaRegs.SCICCR.all =0x0007;// 1停止位,无回路
//无奇偶校验,8个字符位,
//异步模式,空闲线协议
SciaRegs.SCICTL1.all =0x0001;//启用 RX、SW 复位、
//禁用 TX、RX ERR、睡眠、TXWAKE
SciaRegs.SCICTL2.bit.RXBKINTENA=1;//启用接收器中断
SciaRegs.SCIHBAUD = 0x0000;
SciaRegs.SCILBAUD = SCI_PRD;//9600波特
SciaRegs.SCICTL1.all =0x0021;//从复位中撤回 SCI
//结束函数
}
/////////////////////////////////////////////////////////////// 中断服务例程//////////////////////////////////////////////////////////////////////////////////////////////////////////////// 这是正确的吗?
// INT9.3
_interrupt void SCIRXINTB_ISR (void) // SCI-B
{
uint16 i = 0;
while (i!= NULL)
{
RXParseData[i]=SciaRegs.SCIRXBUF.all;//读取数据
i++;
}
//要接收来自此 PIE 组的更多中断,请确认此中断
PieCtrlRegs.PIEACX.ALL = PIEACK_group9;
}
谢谢!
