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查看出现不一样的结果,到底以哪个为准?
还请指点,谢谢!