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

使用28335中断接收数据的时候,接收大数据流进入中断次数不对。

使用28335中断接收数据的时候,一个一个的发送接收为正常的,例如发送01,接收为01。但是发送例如010203,接收为01FF,并且只会进入两次次中断。

interrupt void SCIARX_IRQn(void)
{
*PCData = ScibRegs.SCIRXBUF.all;
PCData++;
PieCtrlRegs.PIEACK.all |= 0x100; // Issue PIE ack
}

接收代码如上图,我需要添加什么来保证接收的正常吗?

EALLOW;
PieVectTable.SCIRXINTB = &SCIARX_IRQn;
EDIS;

InitScibGpio();
ScibRegs.SCICCR.all = 0x0007; // 1 stop bit, No loopback
ScibRegs.SCICTL1.all = 0x0003; // Relinquish SCI from Reset
ScibRegs.SCICTL2.bit.RXBKINTENA = 1; 

ScibRegs.SCIHBAUD =scihbaud; // 9600 baud @LSPCLK = 37.5MHz.
ScibRegs.SCILBAUD =scilbaud;
// SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop back

ScibRegs.SCIFFTX.bit.SCIFFENA = 0;
ScibRegs.SCICTL1.bit.SWRESET=1;//Relinquish SCI from Reset

PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
PieCtrlRegs.PIEIER9.bit.INTx3 = 1;
IER |= M_INT9;
EINT;
ERTM;

初始化如上

Green Deng:

像这样的通讯问题有很多潜在的原因:

首先,你能否确保该管脚已正确地MUX为SCIRX管脚?有关详细信息,请参阅TRM的"1.4.5 GPIO and Peripheral Multiplexing (MUX)"部分。这是最有可能的原因,因为没有分配GPIOA/GPIOB MUX寄存器,所以可能导致SCIRX接收0xFF(因为线路总是高电平,实际上没有接收任何数据)。

其次,如果MUX已正确分配给给定管脚的SCIRX,并且设备仍存在此问题,你可以尝试对RX线路进行blocking read(类似于C2000ware里面F280049的例程sci_ex2_interrupts.c):

SCI_readCharBlockingNonFIFO(uint32_t base)
{//// Check the arguments.//ASSERT(SCI_isBaseValid(base));//// Wait until a character is available in the receive FIFO.//while(!SCI_isDataAvailableNonFIFO(base)){}//// Return the character from the receive buffer.//return(uint16_t)(HWREGH(base + SCI_O_RXBUF) & SCI_RXBUF_SAR_M);
}

SCI_isDataAvailableNonFIFO函数会反复检查RXRDY位,以确保数据已被实际接收。这样可以确保每次接收到完整字节。有关更多详细信息,请参阅C2000Ware中的sci_ex2_interrupts.c例程(位于:\…\C2000Ware_版本号\driverlib\f28004x\examples\sci)。

最后,如果条件允许的话,可以用逻辑分析仪或者示波器监控引脚的输入和输出,确定通信是否按预期进行(检查输入波特率是否正确,是否接收到数据等)。

赞(0)
未经允许不得转载:TI中文支持网 » 使用28335中断接收数据的时候,接收大数据流进入中断次数不对。
分享到: 更多 (0)