一开始没有用SYSBIOS做,测试程序好用没有问题,发送的数据和返回的数据都是正确的。
改为用SYSBIOS后发现程序一直无法进入串口中断,首次调试的时候能进入串口接收中断。换了一块开发板(买的28377STI官方的开发板)重新下载程序,串口接收发送中断都无效了。程序能正常跑,就是无法进入串口中断,但是能进入定时器中断。
把代码传上来。在附件里。期待大家帮忙看看。刚接触SYSBIOS,不熟悉,出了错误调试很久也没有进展。
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.
一开始没有用SYSBIOS做,测试程序好用没有问题,发送的数据和返回的数据都是正确的。
改为用SYSBIOS后发现程序一直无法进入串口中断,首次调试的时候能进入串口接收中断。换了一块开发板(买的28377STI官方的开发板)重新下载程序,串口接收发送中断都无效了。程序能正常跑,就是无法进入串口中断,但是能进入定时器中断。
把代码传上来。在附件里。期待大家帮忙看看。刚接触SYSBIOS,不熟悉,出了错误调试很久也没有进展。
您好,我仿真查看了一下串口相关寄存器,都没有出现错误的标志位。中断标志也没有置位。看起来就像是串口没有反应。
不知道还有没有其他方法可以调试。
期待您的回答。
您好,看描述似乎并没有跑串口程序,不知您工程中是如何调度这块任务的呢?
Int main()
{
InitPeripheralClocks();
InitGpio();
LED_INIT();
Log_info0("Hello world\n");
eMBInit(MB_RTU, 0x11, 0x05, 115200, MB_PAR_NONE);
eMBEnable();
/*
* Start BIOS.
* Begins task scheduling.
*/
BIOS_start(); /* does not return */
return(0);
}
这是main函数 串口初始化在eMBInit(MB_RTU, 0x11, 0x05, 115200, MB_PAR_NONE);里实现
BOOL
xMBPortSerialInit( UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits, eMBParity eParity )
{
GPIO_SetupPinMux(90, GPIO_MUX_CPU1, 6);
GPIO_SetupPinOptions(90, GPIO_INPUT, GPIO_PUSHPULL);
GPIO_SetupPinMux(89, GPIO_MUX_CPU1, 6);
GPIO_SetupPinOptions(89, GPIO_OUTPUT, GPIO_ASYNC);
ScicRegs.SCICCR.bit.ADDRIDLE_MODE = 0;//选择通信协议,选择空闲模式,此模式兼容RS232协议
ScicRegs.SCICCR.bit.LOOPBKENA = 0;//自测试模式使能位:为1使能,为0禁用
ScicRegs.SCICCR.bit.PARITY = 0;//奇偶校验位选择位:0为奇校验,1为偶校验
ScicRegs.SCICCR.bit.PARITYENA = 0;//奇偶校验位使能:为1使能,为0禁用
ScicRegs.SCICCR.bit.SCICHAR = 7;//该配置选择SCI的一个字符的长度可配置为1到8位(单位bit)
ScicRegs.SCICCR.bit.STOPBITS = 0;//停止位的配置: 0 1位停止位 1 2位停止位
//SCIC控制寄存器的配置
ScicRegs.SCICTL1.bit.RXENA = 1;//SCI接收器使能位
ScicRegs.SCICTL1.bit.RXERRINTENA = 0;//SCI接受中断错误使能
ScicRegs.SCICTL1.bit.SLEEP = 0;//睡眠模式使能位
//ScicRegs.SCICTL1.bit.SWRESET = 0;//SCI软件复位
ScicRegs.SCICTL1.bit.TXENA = 1;//SCI发送器使能位
ScicRegs.SCICTL1.bit.TXWAKE = 0;//SCI发送器唤醒模式选择位,具体的不是太明白
//-------------------------------------------------------------------
ScicRegs.SCICTL2.bit.RXBKINTENA = 0;//接收中断使能
ScicRegs.SCICTL2.bit.TXINTENA = 0;
ScicRegs.SCIHBAUD.all = 0x0002;
ScicRegs.SCILBAUD.all = 0x008B;
//ScicRegs.SCICTL1.bit.SWRESET = 1;
//以下代码是配置SCI的接收数据的FIFO和发送数据的FIFO
//-------------------接收数据的FIFO配置
ScicRegs.SCIFFRX.bit.RXFFIENA = 1;//使能接收中断
ScicRegs.SCIFFRX.bit.RXFIFORESET = 0;//复位接收器的FIFO
ScicRegs.SCIFFRX.bit.RXFIFORESET = 1;
ScicRegs.SCIFFRX.bit.RXFFIL = 0x01;//接受1个字节之后产生一个中断
//---------------------发送数据的FIFO配置
ScicRegs.SCIFFTX.bit.SCIRST = 0;//复位SCIC模块
ScicRegs.SCIFFTX.bit.SCIRST = 1;//复位SCIC模块
ScicRegs.SCIFFTX.bit.SCIFFENA = 1;//使能FIFO功能
ScicRegs.SCIFFTX.bit.TXFFIENA = 1;
ScicRegs.SCIFFTX.bit.TXFIFORESET = 0;
ScicRegs.SCIFFTX.bit.TXFIFORESET = 1;
ScicRegs.SCIFFTX.bit.TXFFINTCLR = 1;
ScicRegs.SCIFFTX.bit.TXFFIL = 0x01;//发送完一个字节产生中断
return TRUE;
}
以上是串口初始化配置
在仿真观察中这些寄存器的数值与我配置的数值一样。
我的程序里还有一个定时器中断,定时器中断就没有问题。