您好,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
//没有更多。
//===========================================================================================================================================