我写了如下代码进行配置(部分省略),想通过LIN中断实现数据收发,用串口助手发送指令,MCU无法收到,LinaRegs.SCIRD中无数据,但LinaRegs.SCIFLR.bit.RXRDY被置1,接收中断未进入,请问是什么原因?
GPIO配置:
void InitSciaGpio(void)
{
EALLOW;
ClkCfgRegs.LOSPCP.bit.LSPCLKDIV=4; //低速时钟8分频
//------------------------------------
// SCI模块复用,预留使用
//------------------------------------
GpioCtrlRegs.GPAPUD.bit.GPIO23 = 0; // Enable pull-up for GPIO23 (SCIRXDB)
GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0; // Enable pull-up for GPIO22 (SCITXDB)
GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 3; // Asynch input GPIO23 (SCIRXDB)
GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 3;
GpioCtrlRegs.GPAGMUX2.bit.GPIO22 = 2;
GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 1;
GpioCtrlRegs.GPAGMUX2.bit.GPIO23 = 2;
GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 1;
GpioCtrlRegs.GPBMUX1.bit.GPIO41 = 0; // Configure GPIO41, RTS
GpioCtrlRegs.GPBDIR.bit.GPIO41 = 1; // output
GpioDataRegs.GPBDAT.bit.GPIO41 = 0; // Receive
EDIS;
}
LIN配置:
LIN_initModule(LINA_BASE);
LinaRegs.SCIGCR1.bit.SWnRST = 0; //Into software reset
//SCI Configurations
LinaRegs.SCIGCR1.bit.COMMMODE = 0; //Idle-Line Mode
LinaRegs.SCIGCR1.bit.TIMINGMODE = 1; //Asynchronous Timing
LinaRegs.SCIGCR1.bit.PARITYENA = 0; //No Parity Check
LinaRegs.SCIGCR1.bit.PARITY = 0; //Odd Parity
LinaRegs.SCIGCR1.bit.STOP = 0; //One Stop Bit
LinaRegs.SCIGCR1.bit.CLK_MASTER = 1; //Enable SCI Clock
LinaRegs.SCIGCR1.bit.LINMODE = 0; //SCI Mode
LinaRegs.SCIGCR1.bit.SLEEP = 0; //Ensure Out of Sleep
LinaRegs.SCIGCR1.bit.MBUFMODE = 0; //Buffered Mode
LinaRegs.SCIGCR1.bit.RXENA = 1; //Enable RX
LinaRegs.SCIGCR1.bit.TXENA = 1; //Enable TX
//Ensure IODFT is disabled
LinaRegs.IODFTCTRL.bit.IODFTENA = 0x0;
//Set transmission length
LinaRegs.SCIFORMAT.bit.CHAR = 7; //Eight bits
LinaRegs.SCIFORMAT.bit.LENGTH = 0; //One bytes
Uint16 P;
//Set baudrate
LinaRegs.BRSR.bit.M = 0x9; // 120MHz,设置波特率为115200。
LinaRegs.BRSR.bit.SCI_LIN_PSL = 0x1F;//31;
LinaRegs.SCISETINT.bit.SETRXINT = 1;
LinaRegs.SCISETINT.bit.SETTXINT = 1;
LinaRegs.SCISETINTLVL.bit.SETRXINTOVO = 0;
LinaRegs.SCISETINTLVL.bit.SETTXINTLVL = 1;
LinaRegs.SCIGCR1.bit.SWnRST = 1; //bring out of software reset
//Disable write to protected registers
EDIS;
中断使能:
PieVectTable.LINA_0_INT = &LINAint0_Isr;//接收
PieVectTable.LINA_1_INT = &LINAint1_Isr;//发送
PieCtrlRegs.PIEIER8.bit.INTx10 = 1;
PieCtrlRegs.PIEIER8.bit.INTx10 = 1;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block,使能PIE模块
IER |= M_INT8;