您好!
在 SCI-A/SCI-B/SCI-C 模块中、我们需要从外部源发送两个字符以通过中断获取数据。 是否有任何设置可接收单字符数据? 我的代码如下所示。
____________________________________________________________________________________________
void scia_Interrupt_Config (void)
{
EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.SCIRXINTA =&sciaRxFifoIsr;
PieVectTable.SCITXINTA =&sciaTxFifoIsr;
EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的
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;
}
____________________________________________________________________________________________
void scia_Port_Config (void)
{
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;//为 GPIO28启用上拉(SCIRXDA)
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0;//为 GPIO29启用上拉(SCITXDA)
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;//异步输入 GPIO28 (SCIRXDA)
GpioCtrlRegs.GPAMUX2.bit.GPIO28=1;//为 SCIRXDA 配置 GPIO28
GpioCtrlRegs.GPAMUX2.bit.GPIO29=1;//为 SCITXDA 配置 GPIO29
EDIS;
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO9=0;
GpioCtrlRegs.GPADIR.bit.GPIO9=1;
EDIS;
}
____________________________________________________________________________________________
void scia_Module_config (void)
{
SciaRegs.SCICCR.all = 0x0007;// 1停止位、无环回、无奇偶校验、8个字符位、异步模式、空闲线协议
SciaRegs.SCICTL1.all = 0x0003;//启用 TX、RX、内部 SCICLK、禁用 RX ERR、 睡眠、TXWAKE
SciaRegs.SCICTL2.bit.TXINTENA=1;
SciaRegs.SCICTL2.bit.RXBKINTENA=1;
Set_Baud_rate (9600);
SciaRegs.SCICCR.bit.LOOPBKENA=0;// 1;//启用回路
SciaRegs.SCIFFTX.ALL = 0xC022;
SciaRegs.SCIFFRX.ALL = 0x0022;
SciaRegs.SCIFFCT.all = 0x00;
SciaRegs.SCICTL1.all = 0x0023;//从复位中撤回 SCI
// SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;
}
____________________________________________________________________________________________
中断空 sciaTxFifoIsr (空)
{
if (SerialA.scia_BFR_PTR_TX<SerialA.scia_TX_count+1)
{
SciaRegs.SCITXBUF=SerialA.scia_BFR_TX[SerialA.scia_BFR_PTR_TX];
SerialA.scia_BFR_PTR_TX++;
SciaRegs.SCITXBUF=SerialA.scia_BFR_TX[SerialA.scia_BFR_PTR_TX];
SerialA.scia_BFR_PTR_TX++;
}
其他
{
SciaRegs.SCIFFTX.bit.TXFIFOXRESET =0;
SCIA_SET_RX();
}
SciaRegs.SCIFFTX.bit.TXFFINTCLR = 1;//清除 SCI 中断标志
PieCtrlRegs.PIEACK.ALL |= 0x100;//发出 PIE ACK
}
____________________________________________________________________________________________
中断空 sciaRxFifoIsr (空)
{
SerialA.scia_BFR_Rx[SerialA.scia_BFR_PTR_Rx]= SciaRegs.SCIRXBUF.all;//读取数据
if (SerialA.scia_BFR_PTR_Rx<scia_BFR_count) SerialA.scia_BFR_PTR_Rx++;
SerialA.scia_BFR_Rx[SerialA.scia_BFR_PTR_Rx]= SciaRegs.SCIRXBUF.all;//读取数据
if (SerialA.scia_BFR_PTR_Rx<scia_BFR_count) SerialA.scia_BFR_PTR_Rx++;
SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1;//清除溢出标志
SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;//清除中断标志
PieCtrlRegs.PIEACK.ALL |= 0x100;//发出 PIE ACK
}
____________________________________________________________________________________________
此致-
Sudip