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

28377S在SYSBIOS里移植MODBUS,上位机通过串口发送数据,程序无法进入接收中断

一开始没有用SYSBIOS做,测试程序好用没有问题,发送的数据和返回的数据都是正确的。

改为用SYSBIOS后发现程序一直无法进入串口中断,首次调试的时候能进入串口接收中断。换了一块开发板(买的28377STI官方的开发板)重新下载程序,串口接收发送中断都无效了。程序能正常跑,就是无法进入串口中断,但是能进入定时器中断。

把代码传上来。在附件里。期待大家帮忙看看。刚接触SYSBIOS,不熟悉,出了错误调试很久也没有进展。

Seven Han:

建议调试时观察下receiver's error flags状态,数据手册SCIRXST register(RXERROR, BRKDT, FE, OE, PE),table 18-13

请参考下 C2000Ware 中F2837x SCI interrupt example 

一开始没有用SYSBIOS做,测试程序好用没有问题,发送的数据和返回的数据都是正确的。

改为用SYSBIOS后发现程序一直无法进入串口中断,首次调试的时候能进入串口接收中断。换了一块开发板(买的28377STI官方的开发板)重新下载程序,串口接收发送中断都无效了。程序能正常跑,就是无法进入串口中断,但是能进入定时器中断。

把代码传上来。在附件里。期待大家帮忙看看。刚接触SYSBIOS,不熟悉,出了错误调试很久也没有进展。

user5029276:

回复 Seven Han:

您好,我仿真查看了一下串口相关寄存器,都没有出现错误的标志位。中断标志也没有置位。看起来就像是串口没有反应。

不知道还有没有其他方法可以调试。

期待您的回答。

一开始没有用SYSBIOS做,测试程序好用没有问题,发送的数据和返回的数据都是正确的。

改为用SYSBIOS后发现程序一直无法进入串口中断,首次调试的时候能进入串口接收中断。换了一块开发板(买的28377STI官方的开发板)重新下载程序,串口接收发送中断都无效了。程序能正常跑,就是无法进入串口中断,但是能进入定时器中断。

把代码传上来。在附件里。期待大家帮忙看看。刚接触SYSBIOS,不熟悉,出了错误调试很久也没有进展。

Seven Han:

回复 user5029276:

您好,看描述似乎并没有跑串口程序,不知您工程中是如何调度这块任务的呢?

一开始没有用SYSBIOS做,测试程序好用没有问题,发送的数据和返回的数据都是正确的。

改为用SYSBIOS后发现程序一直无法进入串口中断,首次调试的时候能进入串口接收中断。换了一块开发板(买的28377STI官方的开发板)重新下载程序,串口接收发送中断都无效了。程序能正常跑,就是无法进入串口中断,但是能进入定时器中断。

把代码传上来。在附件里。期待大家帮忙看看。刚接触SYSBIOS,不熟悉,出了错误调试很久也没有进展。

user5029276:

回复 Seven Han:

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);里实现

BOOLxMBPortSerialInit( 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;}

以上是串口初始化配置

在仿真观察中这些寄存器的数值与我配置的数值一样。

我的程序里还有一个定时器中断,定时器中断就没有问题。

赞(0)
未经允许不得转载:TI中文支持网 » 28377S在SYSBIOS里移植MODBUS,上位机通过串口发送数据,程序无法进入接收中断
分享到: 更多 (0)