TI中文支持网
TI专业的中文技术问题搜集分享网站

F28377S的SCI通讯

您好:

初始化

void InitSciC(void)
{
 ScicRegs.SCICCR.all =0x0007;  // 1位停止位,无奇偶校验,禁止回送检测(如果使能
          // 回送检测,则发送引脚和接收引脚在dsp内部被连接,
          // 空闲线协议模式,8位数据位。
 ScicRegs.SCICTL1.all =0x0003;  // 使能发送器,接收器

 ScicRegs.SCIHBAUD.all = 0x00;   //19200波特率
 ScicRegs.SCILBAUD.all = 0xF3;
 //ScicRegs.SCIHBAUD.bit.BAUD = 0x00;
 //ScicRegs.SCILBAUD.bit.BAUD = 0xF3;

// ScicRegs.SCICTL2.all =0x0003;
 ScicRegs.SCICTL2.bit.TXINTENA =1; //使能TXRDY中断
 ScicRegs.SCICTL2.bit.RXBKINTENA =1; //使能RXRDY/BRKDT中断

 //当FIFO接收字数大于等于3时,产生FIFO接收中断
    //在FIFO的寄存器SCIFFRX中,RXFFST4~0 >= RXFFIL4~0时接收中断才会发生
    //在TX的过程中也是一样。
 ScicRegs.SCIFFRX.all= 0xE061;
 //ScibRegs.SCIFFCT.all = 0x0;
 //ScicRegs.SCIFFRX.all=0x2044;
 ScicRegs.SCICTL1.bit.SWRESET = 1;

}

interrupt void SCIC_RX_isr(void)
{
 //若规定时间内接收数据没有达到8字节,应该清空接收缓冲区
    //unsigned int SCIC_rxdCount_Timer = 0;
 //每次进串口中断清零    SCIC_rxdCount_Timer =0;
    SCIC_rxdCount_Timer = 0;
 //50us interrupt 里边 : SCIC_rxdCount_Timer ++;
 SCIC_RxdBuffer[SCIC_rxdCount] = ScicRegs.SCIRXBUF.all;
 SCIC_rxdCount++;
 //这里判断地址,并判断功能码
 //因为主机指令全部为8个字节,所以只要  地址和功能码  符合,即默认是8个字节的指令
    if(SCIC_rxdCount == 8)     //应校验指令的合法性,防止是其他从机回送数据流的干扰
 {
      RxdLen=8;
   SCIC_flg_Rxd_Complete = 1;
 }
 if(SCIC_rxdCount > 10)
 {
  SCIC_rxdCount = 10;        //防止溢出
 }
 ScicRegs.SCIFFRX.bit.RXFIFORESET=0; //重置接收中断FIFO
 ScicRegs.SCIFFRX.bit.RXFIFORESET=1;
 ScicRegs.SCIFFRX.bit.RXFFINTCLR=1;
 PieCtrlRegs.PIEACK.all=PIEACK_GROUP8;
}

在中断函数中SCIC_rxdCount一直到不了8,数据读取一直存在问题,不知道怎么解决。麻烦大家看看。

mangui zhang:下载controlsuite参考里面的例程建议开始先别使用FIFO
进行简单的读写操作 理解相关寄存器

您好:

初始化

void InitSciC(void)
{
 ScicRegs.SCICCR.all =0x0007;  // 1位停止位,无奇偶校验,禁止回送检测(如果使能
          // 回送检测,则发送引脚和接收引脚在dsp内部被连接,
          // 空闲线协议模式,8位数据位。
 ScicRegs.SCICTL1.all =0x0003;  // 使能发送器,接收器

 ScicRegs.SCIHBAUD.all = 0x00;   //19200波特率
 ScicRegs.SCILBAUD.all = 0xF3;
 //ScicRegs.SCIHBAUD.bit.BAUD = 0x00;
 //ScicRegs.SCILBAUD.bit.BAUD = 0xF3;

// ScicRegs.SCICTL2.all =0x0003;
 ScicRegs.SCICTL2.bit.TXINTENA =1; //使能TXRDY中断
 ScicRegs.SCICTL2.bit.RXBKINTENA =1; //使能RXRDY/BRKDT中断

 //当FIFO接收字数大于等于3时,产生FIFO接收中断
    //在FIFO的寄存器SCIFFRX中,RXFFST4~0 >= RXFFIL4~0时接收中断才会发生
    //在TX的过程中也是一样。
 ScicRegs.SCIFFRX.all= 0xE061;
 //ScibRegs.SCIFFCT.all = 0x0;
 //ScicRegs.SCIFFRX.all=0x2044;
 ScicRegs.SCICTL1.bit.SWRESET = 1;

}

interrupt void SCIC_RX_isr(void)
{
 //若规定时间内接收数据没有达到8字节,应该清空接收缓冲区
    //unsigned int SCIC_rxdCount_Timer = 0;
 //每次进串口中断清零    SCIC_rxdCount_Timer =0;
    SCIC_rxdCount_Timer = 0;
 //50us interrupt 里边 : SCIC_rxdCount_Timer ++;
 SCIC_RxdBuffer[SCIC_rxdCount] = ScicRegs.SCIRXBUF.all;
 SCIC_rxdCount++;
 //这里判断地址,并判断功能码
 //因为主机指令全部为8个字节,所以只要  地址和功能码  符合,即默认是8个字节的指令
    if(SCIC_rxdCount == 8)     //应校验指令的合法性,防止是其他从机回送数据流的干扰
 {
      RxdLen=8;
   SCIC_flg_Rxd_Complete = 1;
 }
 if(SCIC_rxdCount > 10)
 {
  SCIC_rxdCount = 10;        //防止溢出
 }
 ScicRegs.SCIFFRX.bit.RXFIFORESET=0; //重置接收中断FIFO
 ScicRegs.SCIFFRX.bit.RXFIFORESET=1;
 ScicRegs.SCIFFRX.bit.RXFFINTCLR=1;
 PieCtrlRegs.PIEACK.all=PIEACK_GROUP8;
}

在中断函数中SCIC_rxdCount一直到不了8,数据读取一直存在问题,不知道怎么解决。麻烦大家看看。

user5177434:

回复 mangui zhang:

解决了。是因为时钟匹配的问题。谢谢你。

赞(1)
未经允许不得转载:TI中文支持网 » F28377S的SCI通讯
分享到: 更多 (0)