我正在写一段F2809串口中断的代码,
for(;;)
{
scia_xmit(SendChar0); // Init send data
SendChar1= Value<<8; //Value & 0x00FF;
SendChar1=SendChar1>>8; // low 8-bit
scia_xmit(SendChar1);
SendChar2 =Value>>8; //Value & 0xFF00; // high 8-bit;
scia_xmit(SendChar2);
delay();
}
}
interrupt void sciaRxFifoIsr(void)
{
Uint16 a;
Uint16 ReceivedChar0;
Uint16 ReceivedChar1;
Uint16 ReceivedChar2;
a=++loop;
switch(a)
{
case 1 : Value=EPwm1Regs.TBCTR; break;
case 2 : ReceivedChar0 =SciaRegs.SCIRXBUF.all; break; // Read data
case 3 : ReceivedChar1 = SciaRegs.SCIRXBUF.all; // Read data
ReceivedChar2 =ReceivedChar1<<8 |ReceivedChar0; //(ReceivedChar1*256)+ReceivedChar0;
loop=0; break;
}
SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all=PIEACK_GROUP9; // Issue PIE ack
}
想问一下,当程序scia_xmit(SendChar0); 执行完之后会跳到中断里,,中断执行完之后程序会跳到SendChar1= Value<<8; 这一行继续执行么??我是这么想的,可是第二次中断RXBUF里的值不对,,有知道的么??谢谢
Johnson Chen1:
如果程序没有跑飞的,从中断出来应该是要执行SendChar1=SendChar1>>8; // low 8-bit,然后再发送第二个数据。
如果有问题的话,楼主可以检查一下程序是否跑的正常,SCI初始化有没有问题,是否使用了FIFO等。
我正在写一段F2809串口中断的代码,
for(;;)
{
scia_xmit(SendChar0); // Init send data
SendChar1= Value<<8; //Value & 0x00FF;
SendChar1=SendChar1>>8; // low 8-bit
scia_xmit(SendChar1);
SendChar2 =Value>>8; //Value & 0xFF00; // high 8-bit;
scia_xmit(SendChar2);
delay();
}
}
interrupt void sciaRxFifoIsr(void)
{
Uint16 a;
Uint16 ReceivedChar0;
Uint16 ReceivedChar1;
Uint16 ReceivedChar2;
a=++loop;
switch(a)
{
case 1 : Value=EPwm1Regs.TBCTR; break;
case 2 : ReceivedChar0 =SciaRegs.SCIRXBUF.all; break; // Read data
case 3 : ReceivedChar1 = SciaRegs.SCIRXBUF.all; // Read data
ReceivedChar2 =ReceivedChar1<<8 |ReceivedChar0; //(ReceivedChar1*256)+ReceivedChar0;
loop=0; break;
}
SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all=PIEACK_GROUP9; // Issue PIE ack
}
想问一下,当程序scia_xmit(SendChar0); 执行完之后会跳到中断里,,中断执行完之后程序会跳到SendChar1= Value<<8; 这一行继续执行么??我是这么想的,可是第二次中断RXBUF里的值不对,,有知道的么??谢谢
Andy Sun:
回复 Johnson Chen1:
我使用了FIFO,,这是SCI的初始化:
void scia_fifo_init() { SciaRegs.SCICCR.all =0x0087; // 1 stop bit, No loopback // No parity,8 char bits, // async mode, idle-line protocol SciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK, // Disable RX ERR, SLEEP, TXWAKE SciaRegs.SCICTL2.bit.TXINTENA =1; SciaRegs.SCICTL2.bit.RXBKINTENA =1; SciaRegs.SCIHBAUD = 0x0001; //9600=BAUD SciaRegs.SCILBAUD = 0x0044; // SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop back\
SciaRegs.SCIFFTX.all=0xC020; //SciaRegs.SCIFFTX.bit.SCIFFENA=0;// |=0xC020; SciaRegs.SCIFFRX.all=0x0021;//SciaRegs.SCIFFRX.bit.RXFFIENA=0;//|=0x0021; SciaRegs.SCIFFCT.all=0x00;
SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;//1 SciaRegs.SCIFFRX.bit.RXFIFORESET=1;//1 }
我现在又有个新问题,,我发送一次数据,执行了两次中断,为什么呢?我的SCI的初始化有问题么??谢谢
我正在写一段F2809串口中断的代码,
for(;;)
{
scia_xmit(SendChar0); // Init send data
SendChar1= Value<<8; //Value & 0x00FF;
SendChar1=SendChar1>>8; // low 8-bit
scia_xmit(SendChar1);
SendChar2 =Value>>8; //Value & 0xFF00; // high 8-bit;
scia_xmit(SendChar2);
delay();
}
}
interrupt void sciaRxFifoIsr(void)
{
Uint16 a;
Uint16 ReceivedChar0;
Uint16 ReceivedChar1;
Uint16 ReceivedChar2;
a=++loop;
switch(a)
{
case 1 : Value=EPwm1Regs.TBCTR; break;
case 2 : ReceivedChar0 =SciaRegs.SCIRXBUF.all; break; // Read data
case 3 : ReceivedChar1 = SciaRegs.SCIRXBUF.all; // Read data
ReceivedChar2 =ReceivedChar1<<8 |ReceivedChar0; //(ReceivedChar1*256)+ReceivedChar0;
loop=0; break;
}
SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all=PIEACK_GROUP9; // Issue PIE ack
}
想问一下,当程序scia_xmit(SendChar0); 执行完之后会跳到中断里,,中断执行完之后程序会跳到SendChar1= Value<<8; 这一行继续执行么??我是这么想的,可是第二次中断RXBUF里的值不对,,有知道的么??谢谢
user3832255:
回复 Andy Sun:
你现在的问题解决了吗??
我配置跟你一样,现在收发还是有些问题,在RAM里面运行正常,在flash里面运行就会出错。
TI中文支持网


