您好,TI:
我正在测试F2.8055万和F2.8054万M之间的通信,使用来自控制器的示例代码Suit: Example_2805xSci_FDLB_int。
测试F2.8055万本身不会将数据从Tx循环回Rx。 但我想将数据从F2.8055万传输到F 2.8054万 m ,然后F2.8054万M读取。
对于硬件连接:I已将F2.8055万 (GPIO28/SCIRXDA和GPIO29/SCITXDA)连接到F2.8054万M (GPIO28/SCITXDA和GPIO29/SCIRXDA)
因此,我采取了以下步骤:
I disabled Rx interrupts ISR from F2.8055万 (因为我只需要Tx)
已断开Tx从F2.8054万M中断ISR
禁用环回(SciaRegs.SCICCR.bit.LOOPBKENA =0;//从fifo_init禁用环回)
但是我无法从F2.8055万接收到F2.8054万M的数据,我想知道我错过了什么使它们相互通信?
我还在下面附上了示例代码:
void main (void) { UINT16 I; //步骤1. 初始化系统控制: // PLL,看门狗,启用外设时钟 //此示例函数可在F2805x_sysctrl.c文件中找到。 InitSysCtrl();// 步骤2. 初始化GPIO: //此示例函数可在F2805x_gPIC.c文件中找到, //说明了如何将GPIO设置为其默认状态。 // InitGpio();// 仅为SCI-A和SCI-B功能设置GP I/O //此函数位于F2805x_Sci.c InitSciGpio();// 步骤3中。 清除所有中断并初始化PIE矢量表: //禁用CPU中断 DINT; //将PIE控制寄存器初始化到其默认状态。 //默认状态是禁用所有PIE中断, 并清除标志//。 //此函数位于F2805x_PIECTRL.c文件中。 InitPieCtrl(); //禁用CPU中断并清除所有CPU中断标志: IER = 0x0000; IFR = 0x0000; //使用指向shell Interrupt // Service routines (ISR)的指针初始化PIE矢量表。 //这将填充整个表,即使在此 示例中未使用中断//。 这对于调试非常有用。 // shell ISR例程可在F2805x_DefaultIsr.C.中找到 //此函数可在F2805x_PieVect.c.中找到 本 例中使用的InitPieVectorTable();//中断被重新映射到此 文件中找到的// ISR函数。 EALLOW;//需要写入EALLOW保护寄存器 PieVectorTable.SCIRXINTA =&sciaRxFifoIsr; PieVectorTable.SCITXINTA =&sciaTxFifoIsr; EDIS;//要禁用写入EALLOW保护寄存器 ,需要执行此操作//步骤4。 初始化所有设备外设: scia_fifo_init();//初始化SCI-A //步骤5。 用户特定代码,启用中断: //初始化发送数据。 每次传输后,此数据 //将为 下一次传输更新(i = 0;I<2;I++) { sdataA[i]= i; } RDATA_pointA = sdataA[0]; //启用此示例所需的中断 PieCtrlRegs.PIECTRL.bit.ENPIE =1;//启用PIE块 PieCtrlRegs.PIEIER9.bit.INTx1=1; // PIE组9,INT1 PieCtrlRegs.PIEIER9.bit.INTx2=1; // PIE组9,INT2 IER = 0x100;//启用CPU INT EINT; //步骤6。 空闲循环。 只需坐下来永远循环(可选): for (;;); } void错误(void) { ASM(" ESTOP0");//测试失败!! 停止! 对于(;;);} 中断void sciaTxFifoIsr(void){ UINT16 I; 对于(i=0;i< 2;i++) { SciaRegs.SCITXBUF=sdataA[i]; //发送数据 } 对于(i=0;i< 2;i++) //增量发送下一个周期的数据 { sdataA[i]=(sdataA[i]+1)& 0x00FF; } SciaRegs.SCIFFTX.Bit.TXFFINTCLR=1;//清除SCI中断标志 PieCtrlRegs.PIEACK.all|=0x100; //问题PIE ACK } 中断void sciaRxFifoIsr(void){ UINT16 I; 对于(i=0;i<2;i++) { rdataA[i]=SciaRegs.SCIRXBUF.all;//读取数据 } 对于(i=0;i<2;i++) //检查收到的数据 { if (rdataA[i]!=((RDATA_pointA+I)& 0x00FF)) error(); } RDATA_pointA =(RDATA_pointA+1)和0x00FF; SciaRegs.SCIFFRX.Bit.RXFFOVRCLR=1;//清除溢出标志 SciaRegs.SCIFFRX.Bit.RXFFINTCLR=1;//清除中断标志 PieCtrlRegs.PIEACK.all|=0x100; //问题pie ack } void scia_fifo_init() { SciaRegs.sciccr.all =0x0007;// 1停止位,无回送 //无奇偶校验,8个字符位, //异步模式,空闲行协议 SciaRegs.SCICTL1.all =0x0003;//启用TX,RX,内部SCICLK, //禁用RX ERR,睡眠,TXWAKE SciaRegs.SCICT2.bit.TXINTENA =1; SciaRegs.SCICTL2.bit.RXKINTENA =1; SciaRegs.SCIHBAUD = 0x0000; SciaRegs.SCILBAUD = 0x0030;//SCI_PRD; SciaRegs.SCICCR.bit.LOOPBKENA =0;//启用回环 SciaRegs.SCIFFTX.All=0xC022; SciaRegs.SCIFFRX.All=0x0022; SciaRegs.SCIFCT.0x00All=SCISC23; SciaReGL.0 //从重置 SciaRegs.SCIFFTX.Bit.TXFIFOXRESET=1; SciaRegs.SCIFFRX.Bit.RXORESET=1;}//===================================================================================放弃SCI //没有更多。 //===========================================================================================================================================