Other Parts Discussed in Thread: C2000WARE
你好,我将28034的LIN相关程序移植到280025之后发现数据接收不了,在28034的板子上是可以正常通讯的(28034和280025的板子都是自己设计的);280025上的相关配置如下:
//管脚与时钟配置
EALLOW;
CpuSysRegs.PCLKCR19.bit.LIN_A = 1;
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0; //GPIO28 (LIN TX)
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0; //GPIO29 (LIN RX)
GpioCtrlRegs.GPAQSEL2.bit.GPIO29 = 3;
GpioCtrlRegs.GPAQSEL2.bit.GPIO29 = 0x01;
GpioCtrlRegs.GPACTRL.bit.QUALPRD3 = 0x03;
GpioCtrlRegs.GPAGMUX2.bit.GPIO28 = 2;
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 2;
GpioCtrlRegs.GPAGMUX2.bit.GPIO29 = 2;
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 2;
EDIS;
//LIN寄存器配置
EALLOW;
LinaRegs.SCIGCR0.bit.RESET = 0;
LinaRegs.SCIGCR0.bit.RESET = 1;
LinaRegs.SCIGCR1.bit.SWnRST = 0;
LinaRegs.SCIPIO0.bit.RXFUNC = 1; //这两句在28034上是没有的,
LinaRegs.SCIPIO0.bit.TXFUNC = 1; //其他配置都与28034相同
LinaRegs.SCIGCR1.bit.SLEEP = 0;
LinaRegs.SCIFLR.bit.TXWAKE = 0;
LinaRegs.SCIFLR.bit.TXEMPTY = 1;
LinaRegs.SCIFLR.bit.TXRDY = 1;
//配置为数据接收
LinaRegs.SCIGCR1.bit.RXENA = 1;
LinaRegs.SCIGCR1.bit.TXENA = 0;
LinaRegs.SCIGCR1.bit.TIMINGMODE = 1; //Asynchronous Timing
LinaRegs.SCIGCR1.bit.CLK_MASTER = 1; //Enable SCI Clock
LinaRegs.SCIGCR1.bit.CONT = 1; //Continue on Suspend
LinaRegs.SCISETINT.bit.SETRXINT = 1;
LinaRegs.SCISETINT.bit.SETTXINT = 1;
LinaRegs.SCIFORMAT.bit.CHAR = 0x7;
LinaRegs.SCIGCR1.bit.SWnRST = 1;
EDIS;
实验时发送的数据帧:01 03 F0 08 00 01 36 C8
1.在28034的板子上调试时,查看寄存器的配置情况:

接收一帧数据后,接收寄存器的结果如下图所示(接收数据前RXENA和RXIN都是为1的):

2.在280025的板子上调试时,查看寄存器的配置情况:

然而查看Expressions中的寄存配置情况时却是这样的:

可以看到RXENA和RXIN都为0,但是在上一张图中(也就是查看Register)看到的却是有值的,这是什么情况?
当我发送跟28034测试时一样的数据帧,LinaRegs.SCIRD.bit.RD却没有任何变化;发送数据帧时通过测量GPIO29的输入情况如下图所示:

GPIO29确实是有数据输进去的,但是接收寄存器却没有任何值;结合前面的寄存器显示情况,是不是意味着寄存器配置失败?
结合数据手册关于LIN结构的框图

按照我的理解是,只要RXENA配置为1,SCIRD就应该能接收到数据才对。
然而通过Expressions和Registers查看出现不一样的结果,到底以哪个为准?
还请指点,谢谢!



