This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F28377S:禁用 SCI RX 中断

Guru**** 2540720 points
Other Parts Discussed in Thread: MAX3232

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/838196/ccs-tms320f28377s-sci-rx-interrupt-is-disabled

器件型号:TMS320F28377S
主题中讨论的其他器件: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;

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sam:

    我认为您要检查的其他错误位在 SCIRXST 寄存器中。  请注意、这些错误条件中的许多错误条件的复位机制只是复位模块。  请参阅 TRM 中的寄存器位说明:"表19-13. SCIRXST 寄存器字段说明"

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您重放。 我使用此代码来监视错误标志并重新初始化 SCI 寄存器。 谢谢你们的工作  

    if (((SciaRegs.SCIRXST.bit.RXERROR ==1)||(SciaRegs.SCIRXST.bit.FE ==1)){        

         init_serial_a();
         PieCtrlRegs.PIEIER9.bit.INTx1  = 1;
         PieCtrlRegs.PIEIER9.bit.INTx2  = 1;
         IER |= M_INT9;
      }