主题中讨论的其他器件:MAX3232
工具/软件:Code Composer Studio
您好!
我使用 SCIA 从用于 GSM 通信的软件狗接收数据。 当处理器启动时、SCI RX 中断可与软件狗正常工作。 但是、当我卸下转换器并重新连接处理器时、它将停止工作。 我使用 max3232 IC 在处理器和软件狗之间进行通信。 在 DSO 上、我们观察到 RX 引脚 SCIA 上的300ms 脉冲(高-低-高)(这将是因为我在连接加密狗和加密狗时获取电源)。 在该 RX 中断停止工作后。 我还在代码中使用 ADC 中断和 SCIC 中断(TX 和 RX)、当我在 ADC 中断或 SCIC RX 中断中设置1us 的延迟时、SCIA RX 开始正常工作。(我逐一检查)。
我还通过调试器检查寄存器值、但值相同。 全局中断和 SCIA RX 中断标志也被清除(即使 SCIA RX 中断停止工作、ADC 中断也能正常工作)。
当我检查" rx_sci_a=SciaRegs.SCIRXBUF.All"值时、我得到35768。 这表示帧错误。 但我已经将其清除到 RX ISR 中。 此时、RX 中断停止工作。
所以我无法理解是什么问题。
这是 SCI RX 的初始化代码。
unsigned char rx_sci_a;
_interrupt void sciaRxFifoIsr (void)
{ // GSM 调制解调器: RS232
RX_SCI_A=SciaRegs.SCIRXBUF.ALL; //读取数据
SciaRegs.SCIFFCT.all = 0x00;
SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; //清除溢出标志
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; //清除中断标志
PieCtrlRegs.PIEACX.All= PIEACK_group9; //发出 PIE ACK
}
void init_serial_a (void){
init_scia_gpio();
EALLOW;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; //启用 PIE 块
PieCtrlRegs.PIEIER9.bit.INTx1 = 1; // PIE 组9,启用 INT1 Rx 中断
PieCtrlRegs.PIEIER9.bit.INTx2 = 1; // PIE 组9、INT2 TX 中断使能
EDIS;
scia_fifo_init();
}
void scia_fifo_init (void){
EALLOW;
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;
SciaRegs.SCIHBAUD.ALL = 0x0002; //9600
SciaRegs.SCILBAUD.ALL = 0x008B;
SciaRegs.SCICCR.bit.LOOPBKENA=0;//启用回路
SciaRegs.SCIFFTX.ALL = 0xC021;
SciaRegs.SCIFFRX.ALL = 0x0021;
SciaRegs.SCIFFCT.all = 0x00;
SciaRegs.SCICTL1.all = 0x0023; //从复位中撤回 SCI
SciaRegs.SCIFFTX.bit.TXFIFORESET = 1;
SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;
EDIS;
}