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.

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

Other Parts Discussed in Thread: C2000WARE

使用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;

初始化如上

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

    首先,你能否确保该管脚已正确地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)。

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