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

DSP28335 SCI通讯问题

请教专家,我在使用SCI通讯时,发送采用普通查讯方式不中断,接收采用FIFO 增强功能 1字节就中断,在长时间通讯过程中偶尔会出现接收中断进不去的现像,请问有何办法解决,我没有使能RX ERR INT ENA,是否是通讯出错SCI接收中断就进不去了,如果这样,我使能RX ERR INT ENA 在中断接收里查RX ERROR位,如为1则先将 SW RESET清零 NOP 30后再将SW RESET置1来重新使能SCI,这样不管出现什么问题SCI都可以正常工作了吗?或者必须要重新上电复位?(使用的是例程序)

Eric Ma:

LOFTY,

从下面这张图可以看到,让RX FIFO功能使能后,即SCIFFENA,普通RX的中断就已经没有产生作用了。正常来讲,应该不会出现你说的这种问题,因为RXFFIL4−0设置为1,只要接收到1个字符,就可以进入FIFO rx中断。会不会是调试过程中没有接收到数据,或是数据受干扰了?

 

请教专家,我在使用SCI通讯时,发送采用普通查讯方式不中断,接收采用FIFO 增强功能 1字节就中断,在长时间通讯过程中偶尔会出现接收中断进不去的现像,请问有何办法解决,我没有使能RX ERR INT ENA,是否是通讯出错SCI接收中断就进不去了,如果这样,我使能RX ERR INT ENA 在中断接收里查RX ERROR位,如为1则先将 SW RESET清零 NOP 30后再将SW RESET置1来重新使能SCI,这样不管出现什么问题SCI都可以正常工作了吗?或者必须要重新上电复位?(使用的是例程序)

LOFTY DVRE:

回复 Eric Ma:

哦!也就是只要使能了SCIFFENA 接收和发送都是通过FIFO来进行的,至于发送和接收是否用中断方式,是可以分别设置的!普通的方式SCICTL2和SCIRXST都不起作用了?

请教专家,我在使用SCI通讯时,发送采用普通查讯方式不中断,接收采用FIFO 增强功能 1字节就中断,在长时间通讯过程中偶尔会出现接收中断进不去的现像,请问有何办法解决,我没有使能RX ERR INT ENA,是否是通讯出错SCI接收中断就进不去了,如果这样,我使能RX ERR INT ENA 在中断接收里查RX ERROR位,如为1则先将 SW RESET清零 NOP 30后再将SW RESET置1来重新使能SCI,这样不管出现什么问题SCI都可以正常工作了吗?或者必须要重新上电复位?(使用的是例程序)

Eric Ma:

回复 LOFTY DVRE:

LOFTY,

是的,如果你FIFO使能之后,你如果不设置中断的话,那么要查询FIFO的状态位了,而非是RXRDY。

Eric

请教专家,我在使用SCI通讯时,发送采用普通查讯方式不中断,接收采用FIFO 增强功能 1字节就中断,在长时间通讯过程中偶尔会出现接收中断进不去的现像,请问有何办法解决,我没有使能RX ERR INT ENA,是否是通讯出错SCI接收中断就进不去了,如果这样,我使能RX ERR INT ENA 在中断接收里查RX ERROR位,如为1则先将 SW RESET清零 NOP 30后再将SW RESET置1来重新使能SCI,这样不管出现什么问题SCI都可以正常工作了吗?或者必须要重新上电复位?(使用的是例程序)

LOFTY DVRE:

回复 Eric Ma:

这样的话也就是说接收不可能出错误导致无法进入FIFO接收中断!我接收是采用中断方式的,发送不中断,发送查TXFFST,但是就是出现时间久了有时就会有SCI好像当机了一样,必须重新上电void scib_loopback_init(){ ScibRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback 通讯控制寄存器 ScibRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,                                    ScibRegs.SCICTL2.bit.TXINTENA =1; ScibRegs.SCICTL2.bit.RXBKINTENA =1;  ScibRegs.SCIHBAUD    =0x0000; ScibRegs.SCILBAUD    =0x0028;//115200 ScibRegs.SCICCR.bit.LOOPBKENA =0; // Disable loop back  自测试模式禁用与使能如使能则发送引脚与接收引脚在内部相连 ScibRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset }

// Initalize the SCI FIFOvoid scib_fifo_init(){    ScibRegs.SCIFFTX.all=0xE040;    ScibRegs.SCIFFRX.all=0x0021;//0x00214 1个数据中断一次    ScibRegs.SCIFFCT.all=0x0;    ScibRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset    ScibRegs.SCIFFRX.bit.RXFIFORESET=1;//FIFO接收寄存器 写0复位FIFO指针到0保持复位状态

}

void scib_xmit(int b){    while (ScibRegs.SCIFFTX.bit.TXFFST != 0) {}    ScibRegs.SCITXBUF=b;    }

 

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