Thread 中讨论的其他器件:controlSUITE、
工具/软件:Code Composer Studio
您好! 我在通过 UART 接收数据时遇到了令人难以置信的麻烦。 我了解 UART 的工作原理、我在 MSP430上使用了以下系统。 我将就该问题提供尽可能多的信息:
我希望从 HC06接收几个字符。 我知道 HC06以9600波特发送信息、因为我的系统在 MSP430上工作。
目前、我没有收到任何中断。 我只是在主代码中的永久循环中。
我配置了 MUX_SEL=0和 CH_SEL=1 、因为我在 LaunchPad 上的 J1.3上使用 GPIO28、如下所示:
我已经减少了代码以显示如何设置 SCI。 其中包括:
#include "Main.h"//主 include 文件 <--这不是问题。
/***原型**** /
// CPU 计时器原型
_interrupt void sciaRxFifoIsr (void);
//全局变量
//--全局变量
char RXParseData[256];
void main (void)
{
//-- CPU 初始化
InitSysCtrl();//初始化 CPU (文件:sysctrl.c)
InitGpio();//初始化共享 GPIO 引脚(文件:gpio.c)
InitPieCtrl();//初始化并启用 PIE (文件:PIECTRL.c)
InitWatchdog();//初始化看门狗计时器(文件:watchdog.c)
//-- SCI
EALLOW;
/*为所选引脚启用内部上拉*/
//用户可以启用或禁用上拉。
//这将启用指定引脚的上拉电阻。
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;//为 GPIO28启用上拉(SCIRXDA)
/*将所选引脚的限定条件设置为仅异步*/
默认情况下、//输入与 SYSCLKOUT 同步。
//这将为所选引脚选择异步(无限定条件)。
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;//异步输入 GPIO28 (SCIRXDA)
/*使用 GPIO 寄存器配置 SCI-A 引脚*/
//这指定哪些可能的 GPIO 引脚将是 SCI 功能引脚。
GpioCtrlRegs.GPAMUX2.bit.GPIO28=1;//为 SCIRXDA 操作配置 GPIO28
EDIS;
//步骤3. 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
Dint;
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//此函数位于 F2806x_PIECTRL.c 文件中。
InitPieCtrl();
//禁用 CPU 中断并清除所有 CPU 中断标志:
IER = 0x0000;
IFR = 0x0000;
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 F2806x_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 F2806x_PieVect.c 中找到
InitPieVectTable();
//此示例中使用的中断被重新映射到
//此文件中的 ISR 函数。
EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.SCIRXINTA =&sciaRxFifoIsr;
EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的
//FIFO
SciaRegs.SCICCR.all =0x0007;// 1停止位,无回路
//无奇偶校验,8个字符位,
//异步模式,空闲线协议
SciaRegs.SCICTL1.all =0x0001;//启用 RX、内部 SCICLK、
//禁用 TX、RX ERR、睡眠、TXWAKE
SciaRegs.SCICTL2.bit.RXBKINTENA=1;
SciaRegs.SCIHBAUD = 0x0000;
SciaRegs.SCILBAUD = 0x0123;// 9600 baud -> 22.5MHz/(9600*8)-1
SciaRegs.SCIFFRX.All=0x0022;
SciaRegs.SCIFFCT.All=0x00;
SciaRegs.SCICTL1.all =0x0021;//从复位中撤回 SCI
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
//启用此示例所需的中断
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//启用 PIE 块
PieCtrlRegs.PIEIER9.bit.INTx1=1;// PIE 组9,INT1
PieCtrlRegs.PIEIER9.bit.INTx2=1;// PIE 组9,int2
IER = 0x100;//启用 CPU INT
EINT;
//--启用全局中断
asm (" CLRC INTM、DBGM");//启用全局中断和实时调试
int i;
对于(i=0;i<256;i++) RXParseData[i]= 0;
while (1)//无限循环-等待中断
{
}
}//end of main()
_interrupt void sciaRxFifoIsr (void)
{
uint16 i = 0;
PieCtrlRegs.PIEACX.All|=0x100;//发出 PIE ACK
while (i<=15)
{
RXParseData[i]=SciaRegs.SCIRXBUF.all;//读取数据
i++;
}
SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;//清除溢出标志
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;//清除中断标志
}
/***文件结尾 /
我将提供所需的任何其他信息。
如果您可以找到问题并帮助我解决此问题。 我将永远感激!
感谢您的观看!

