F28335上SCIA采用发送和接收FIFO时,发现不管发送中断级别设为多少,只要往SciaRegs.SCITXBUF中写入数据,数据会立即发送出去。在此弄不明白的是发送中断级别设置有什么用?为什么设置发送中断级别没有效(没有打开FIFO发送中断)。为什么不是向SciaRegs.SCITXBUF中写入达到发送中断级别设置个数的数据后,再一次发送出去?但是接收中断级别有效,只有接收到设置的fifodepth才会进入接收fifo中断。
以下是我的初始化代码:
unsigned int InitScia_Fifo(unsigned int parity, unsigned int stop, unsigned int baud, unsigned int fifodepth)
{ unsigned int status;
unsigned int baud_RL,baud_RH;
switch(parity)
{
case 0: //无校验
SciaRegs.SCICCR.bit.PARITYENA=0;
status=0;
break;
case 1: //.奇校验
SciaRegs.SCICCR.bit.PARITYENA=1;
SciaRegs.SCICCR.bit.PARITY=0;
status=0;
break;
case 2: //偶校验
SciaRegs.SCICCR.bit.PARITYENA=1;
SciaRegs.SCICCR.bit.PARITY=1;
status=0;
break;
default:
status=1;
break;
}
switch(stop)
{
case 0:
SciaRegs.SCICCR.bit.STOPBITS=0;
status=0;
break;
case 1:
SciaRegs.SCICCR.bit.STOPBITS=1;
status=0;
break;
default:
status=1;
break;
}
SciaRegs.SCICCR.bit.LOOPBKENA = 0;
SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0;
SciaRegs.SCICCR.bit.SCICHAR = 7; //SCICCR register set over
switch(baud)
{
case 0:
baud_RH=0x01;
baud_RL=0xe7;
status=0;
break;
case 1:
baud_RH=0x00;
baud_RL=0xf3;
status=0;
break;
case 2:
baud_RH=0x00;
baud_RL=0x00;
status=0;
break;
case 3:
baud_RH=0x00;
baud_RL=0x50;
status=0;
break;
case 4:
baud_RH=0x00;
baud_RL=0x28;
status=0;
break;
default:
status=1;
break;
} SciaRegs.SCIHBAUD =baud_RH;
SciaRegs.SCILBAUD =baud_RL; //发送FIFO的设置 SciaRegs.SCICTL1.bit.TXENA = 1; SciaRegs.SCIFFTX.bit.SCIRST = 1;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFTX.bit.SCIFFENA = 1;
SciaRegs.SCIFFTX.bit.TXFFIENA = 0; //不使能FIFO发送中断
SciaRegs.SCIFFTX.bit.TXFFIL = 8; //设置发送FIFO长度
SciaRegs.SCICTL2.bit.TXINTENA = 0; SciaRegs.SCIFFCT.bit.FFTXDLY = 3; //设置FIFO发送延迟为3个串口波特率周期
//接收FIFO的设置
SciaRegs.SCICTL1.bit.RXENA = 1; //使能SCI接收
SciaRegs.SCICTL2.bit.RXBKINTENA = 0; //禁能RXRDY/BRKDT产生的中断 SciaRegs.SCICTL1.bit.RXERRINTENA = 1; //使能接收错误中断 //FIFO中断使能,FIFO 8个时产生中断
SciaRegs.SCIFFRX.bit.RXFFIENA = 1; //使能接收FIFO功能
SciaRegs.SCIFFRX.bit.RXFFIL = fifodepth; //设置接收FIFO中断级别
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 0;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFRX.bit.RXFIFORESET =0;
SciaRegs.SCIFFRX.bit.RXFIFORESET =1; SciaRegs.SCICTL1.bit.SWRESET = 1; return status;}
发送的函数为:
void scia_xmit(unsigned int a)
{
SciaRegs.SCITXBUF = a;}
Eric Ma:
YJJ,
我认为当向发送FIFO写数据的时候,我认为数据是马上就随着所设的波特率发送的。
你可以用这样的语句来写发送的数据, 这在FIFO不使能的情况下是不可以这么做的。
for(i=0;i<8;i++)
SciaRegs.SCITXBUF = a;
而即使你使能FIFO发送中断,当你在中断服务函数里面写8个数据,当写的那个时候,数据也立即发送了,并不会等8个数据都写到FIFO的时候才发送。只会等到FIFO的数据小于或等于FIFO level的时候,才会又一次进入中断。
Eric
F28335上SCIA采用发送和接收FIFO时,发现不管发送中断级别设为多少,只要往SciaRegs.SCITXBUF中写入数据,数据会立即发送出去。在此弄不明白的是发送中断级别设置有什么用?为什么设置发送中断级别没有效(没有打开FIFO发送中断)。为什么不是向SciaRegs.SCITXBUF中写入达到发送中断级别设置个数的数据后,再一次发送出去?但是接收中断级别有效,只有接收到设置的fifodepth才会进入接收fifo中断。
以下是我的初始化代码:
unsigned int InitScia_Fifo(unsigned int parity, unsigned int stop, unsigned int baud, unsigned int fifodepth)
{ unsigned int status;
unsigned int baud_RL,baud_RH;
switch(parity)
{
case 0: //无校验
SciaRegs.SCICCR.bit.PARITYENA=0;
status=0;
break;
case 1: //.奇校验
SciaRegs.SCICCR.bit.PARITYENA=1;
SciaRegs.SCICCR.bit.PARITY=0;
status=0;
break;
case 2: //偶校验
SciaRegs.SCICCR.bit.PARITYENA=1;
SciaRegs.SCICCR.bit.PARITY=1;
status=0;
break;
default:
status=1;
break;
}
switch(stop)
{
case 0:
SciaRegs.SCICCR.bit.STOPBITS=0;
status=0;
break;
case 1:
SciaRegs.SCICCR.bit.STOPBITS=1;
status=0;
break;
default:
status=1;
break;
}
SciaRegs.SCICCR.bit.LOOPBKENA = 0;
SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0;
SciaRegs.SCICCR.bit.SCICHAR = 7; //SCICCR register set over
switch(baud)
{
case 0:
baud_RH=0x01;
baud_RL=0xe7;
status=0;
break;
case 1:
baud_RH=0x00;
baud_RL=0xf3;
status=0;
break;
case 2:
baud_RH=0x00;
baud_RL=0x00;
status=0;
break;
case 3:
baud_RH=0x00;
baud_RL=0x50;
status=0;
break;
case 4:
baud_RH=0x00;
baud_RL=0x28;
status=0;
break;
default:
status=1;
break;
} SciaRegs.SCIHBAUD =baud_RH;
SciaRegs.SCILBAUD =baud_RL; //发送FIFO的设置 SciaRegs.SCICTL1.bit.TXENA = 1; SciaRegs.SCIFFTX.bit.SCIRST = 1;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFTX.bit.SCIFFENA = 1;
SciaRegs.SCIFFTX.bit.TXFFIENA = 0; //不使能FIFO发送中断
SciaRegs.SCIFFTX.bit.TXFFIL = 8; //设置发送FIFO长度
SciaRegs.SCICTL2.bit.TXINTENA = 0; SciaRegs.SCIFFCT.bit.FFTXDLY = 3; //设置FIFO发送延迟为3个串口波特率周期
//接收FIFO的设置
SciaRegs.SCICTL1.bit.RXENA = 1; //使能SCI接收
SciaRegs.SCICTL2.bit.RXBKINTENA = 0; //禁能RXRDY/BRKDT产生的中断 SciaRegs.SCICTL1.bit.RXERRINTENA = 1; //使能接收错误中断 //FIFO中断使能,FIFO 8个时产生中断
SciaRegs.SCIFFRX.bit.RXFFIENA = 1; //使能接收FIFO功能
SciaRegs.SCIFFRX.bit.RXFFIL = fifodepth; //设置接收FIFO中断级别
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 0;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFRX.bit.RXFIFORESET =0;
SciaRegs.SCIFFRX.bit.RXFIFORESET =1; SciaRegs.SCICTL1.bit.SWRESET = 1; return status;}
发送的函数为:
void scia_xmit(unsigned int a)
{
SciaRegs.SCITXBUF = a;}
YJJ:
回复 Eric Ma:
Thank you Eric!
我的测试证实了你说的可以直接这样做:
for(i=0;i<8;i++)
SciaRegs.SCITXBUF = a;
但是使能FIFO发送中断的时候,如果发送FIFO中啥也没有,“FIFO的数据小于或等于FIFO level的时候,才会又一次进入中断”,那么程序会一遍又一遍进入fifo发送中断?我的测试结果是会重复进入中断。那么这个中断有什么用?我现在的程序中没有打开发送fifo中断。
F28335上SCIA采用发送和接收FIFO时,发现不管发送中断级别设为多少,只要往SciaRegs.SCITXBUF中写入数据,数据会立即发送出去。在此弄不明白的是发送中断级别设置有什么用?为什么设置发送中断级别没有效(没有打开FIFO发送中断)。为什么不是向SciaRegs.SCITXBUF中写入达到发送中断级别设置个数的数据后,再一次发送出去?但是接收中断级别有效,只有接收到设置的fifodepth才会进入接收fifo中断。
以下是我的初始化代码:
unsigned int InitScia_Fifo(unsigned int parity, unsigned int stop, unsigned int baud, unsigned int fifodepth)
{ unsigned int status;
unsigned int baud_RL,baud_RH;
switch(parity)
{
case 0: //无校验
SciaRegs.SCICCR.bit.PARITYENA=0;
status=0;
break;
case 1: //.奇校验
SciaRegs.SCICCR.bit.PARITYENA=1;
SciaRegs.SCICCR.bit.PARITY=0;
status=0;
break;
case 2: //偶校验
SciaRegs.SCICCR.bit.PARITYENA=1;
SciaRegs.SCICCR.bit.PARITY=1;
status=0;
break;
default:
status=1;
break;
}
switch(stop)
{
case 0:
SciaRegs.SCICCR.bit.STOPBITS=0;
status=0;
break;
case 1:
SciaRegs.SCICCR.bit.STOPBITS=1;
status=0;
break;
default:
status=1;
break;
}
SciaRegs.SCICCR.bit.LOOPBKENA = 0;
SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0;
SciaRegs.SCICCR.bit.SCICHAR = 7; //SCICCR register set over
switch(baud)
{
case 0:
baud_RH=0x01;
baud_RL=0xe7;
status=0;
break;
case 1:
baud_RH=0x00;
baud_RL=0xf3;
status=0;
break;
case 2:
baud_RH=0x00;
baud_RL=0x00;
status=0;
break;
case 3:
baud_RH=0x00;
baud_RL=0x50;
status=0;
break;
case 4:
baud_RH=0x00;
baud_RL=0x28;
status=0;
break;
default:
status=1;
break;
} SciaRegs.SCIHBAUD =baud_RH;
SciaRegs.SCILBAUD =baud_RL; //发送FIFO的设置 SciaRegs.SCICTL1.bit.TXENA = 1; SciaRegs.SCIFFTX.bit.SCIRST = 1;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFTX.bit.SCIFFENA = 1;
SciaRegs.SCIFFTX.bit.TXFFIENA = 0; //不使能FIFO发送中断
SciaRegs.SCIFFTX.bit.TXFFIL = 8; //设置发送FIFO长度
SciaRegs.SCICTL2.bit.TXINTENA = 0; SciaRegs.SCIFFCT.bit.FFTXDLY = 3; //设置FIFO发送延迟为3个串口波特率周期
//接收FIFO的设置
SciaRegs.SCICTL1.bit.RXENA = 1; //使能SCI接收
SciaRegs.SCICTL2.bit.RXBKINTENA = 0; //禁能RXRDY/BRKDT产生的中断 SciaRegs.SCICTL1.bit.RXERRINTENA = 1; //使能接收错误中断 //FIFO中断使能,FIFO 8个时产生中断
SciaRegs.SCIFFRX.bit.RXFFIENA = 1; //使能接收FIFO功能
SciaRegs.SCIFFRX.bit.RXFFIL = fifodepth; //设置接收FIFO中断级别
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 0;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFRX.bit.RXFIFORESET =0;
SciaRegs.SCIFFRX.bit.RXFIFORESET =1; SciaRegs.SCICTL1.bit.SWRESET = 1; return status;}
发送的函数为:
void scia_xmit(unsigned int a)
{
SciaRegs.SCITXBUF = a;}
Eric Ma:
回复 YJJ:
YJJ,
当FIFO数据小于或等于发送FIFO level时,就会进入中断,如果中断使能的话。在这个中断里面,你就可以把要发送的数据又加载在FIFO里面,让它继续发送。如果数据发送完了,你在中断里面直接关掉FIFO就可以了。
Eric
F28335上SCIA采用发送和接收FIFO时,发现不管发送中断级别设为多少,只要往SciaRegs.SCITXBUF中写入数据,数据会立即发送出去。在此弄不明白的是发送中断级别设置有什么用?为什么设置发送中断级别没有效(没有打开FIFO发送中断)。为什么不是向SciaRegs.SCITXBUF中写入达到发送中断级别设置个数的数据后,再一次发送出去?但是接收中断级别有效,只有接收到设置的fifodepth才会进入接收fifo中断。
以下是我的初始化代码:
unsigned int InitScia_Fifo(unsigned int parity, unsigned int stop, unsigned int baud, unsigned int fifodepth)
{ unsigned int status;
unsigned int baud_RL,baud_RH;
switch(parity)
{
case 0: //无校验
SciaRegs.SCICCR.bit.PARITYENA=0;
status=0;
break;
case 1: //.奇校验
SciaRegs.SCICCR.bit.PARITYENA=1;
SciaRegs.SCICCR.bit.PARITY=0;
status=0;
break;
case 2: //偶校验
SciaRegs.SCICCR.bit.PARITYENA=1;
SciaRegs.SCICCR.bit.PARITY=1;
status=0;
break;
default:
status=1;
break;
}
switch(stop)
{
case 0:
SciaRegs.SCICCR.bit.STOPBITS=0;
status=0;
break;
case 1:
SciaRegs.SCICCR.bit.STOPBITS=1;
status=0;
break;
default:
status=1;
break;
}
SciaRegs.SCICCR.bit.LOOPBKENA = 0;
SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0;
SciaRegs.SCICCR.bit.SCICHAR = 7; //SCICCR register set over
switch(baud)
{
case 0:
baud_RH=0x01;
baud_RL=0xe7;
status=0;
break;
case 1:
baud_RH=0x00;
baud_RL=0xf3;
status=0;
break;
case 2:
baud_RH=0x00;
baud_RL=0x00;
status=0;
break;
case 3:
baud_RH=0x00;
baud_RL=0x50;
status=0;
break;
case 4:
baud_RH=0x00;
baud_RL=0x28;
status=0;
break;
default:
status=1;
break;
} SciaRegs.SCIHBAUD =baud_RH;
SciaRegs.SCILBAUD =baud_RL; //发送FIFO的设置 SciaRegs.SCICTL1.bit.TXENA = 1; SciaRegs.SCIFFTX.bit.SCIRST = 1;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFTX.bit.SCIFFENA = 1;
SciaRegs.SCIFFTX.bit.TXFFIENA = 0; //不使能FIFO发送中断
SciaRegs.SCIFFTX.bit.TXFFIL = 8; //设置发送FIFO长度
SciaRegs.SCICTL2.bit.TXINTENA = 0; SciaRegs.SCIFFCT.bit.FFTXDLY = 3; //设置FIFO发送延迟为3个串口波特率周期
//接收FIFO的设置
SciaRegs.SCICTL1.bit.RXENA = 1; //使能SCI接收
SciaRegs.SCICTL2.bit.RXBKINTENA = 0; //禁能RXRDY/BRKDT产生的中断 SciaRegs.SCICTL1.bit.RXERRINTENA = 1; //使能接收错误中断 //FIFO中断使能,FIFO 8个时产生中断
SciaRegs.SCIFFRX.bit.RXFFIENA = 1; //使能接收FIFO功能
SciaRegs.SCIFFRX.bit.RXFFIL = fifodepth; //设置接收FIFO中断级别
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 0;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFRX.bit.RXFIFORESET =0;
SciaRegs.SCIFFRX.bit.RXFIFORESET =1; SciaRegs.SCICTL1.bit.SWRESET = 1; return status;}
发送的函数为:
void scia_xmit(unsigned int a)
{
SciaRegs.SCITXBUF = a;}
guo sheng zhu:
回复 Eric Ma:
请问 是关掉FIFO发送中断吗?
F28335上SCIA采用发送和接收FIFO时,发现不管发送中断级别设为多少,只要往SciaRegs.SCITXBUF中写入数据,数据会立即发送出去。在此弄不明白的是发送中断级别设置有什么用?为什么设置发送中断级别没有效(没有打开FIFO发送中断)。为什么不是向SciaRegs.SCITXBUF中写入达到发送中断级别设置个数的数据后,再一次发送出去?但是接收中断级别有效,只有接收到设置的fifodepth才会进入接收fifo中断。
以下是我的初始化代码:
unsigned int InitScia_Fifo(unsigned int parity, unsigned int stop, unsigned int baud, unsigned int fifodepth)
{ unsigned int status;
unsigned int baud_RL,baud_RH;
switch(parity)
{
case 0: //无校验
SciaRegs.SCICCR.bit.PARITYENA=0;
status=0;
break;
case 1: //.奇校验
SciaRegs.SCICCR.bit.PARITYENA=1;
SciaRegs.SCICCR.bit.PARITY=0;
status=0;
break;
case 2: //偶校验
SciaRegs.SCICCR.bit.PARITYENA=1;
SciaRegs.SCICCR.bit.PARITY=1;
status=0;
break;
default:
status=1;
break;
}
switch(stop)
{
case 0:
SciaRegs.SCICCR.bit.STOPBITS=0;
status=0;
break;
case 1:
SciaRegs.SCICCR.bit.STOPBITS=1;
status=0;
break;
default:
status=1;
break;
}
SciaRegs.SCICCR.bit.LOOPBKENA = 0;
SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0;
SciaRegs.SCICCR.bit.SCICHAR = 7; //SCICCR register set over
switch(baud)
{
case 0:
baud_RH=0x01;
baud_RL=0xe7;
status=0;
break;
case 1:
baud_RH=0x00;
baud_RL=0xf3;
status=0;
break;
case 2:
baud_RH=0x00;
baud_RL=0x00;
status=0;
break;
case 3:
baud_RH=0x00;
baud_RL=0x50;
status=0;
break;
case 4:
baud_RH=0x00;
baud_RL=0x28;
status=0;
break;
default:
status=1;
break;
} SciaRegs.SCIHBAUD =baud_RH;
SciaRegs.SCILBAUD =baud_RL; //发送FIFO的设置 SciaRegs.SCICTL1.bit.TXENA = 1; SciaRegs.SCIFFTX.bit.SCIRST = 1;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFTX.bit.SCIFFENA = 1;
SciaRegs.SCIFFTX.bit.TXFFIENA = 0; //不使能FIFO发送中断
SciaRegs.SCIFFTX.bit.TXFFIL = 8; //设置发送FIFO长度
SciaRegs.SCICTL2.bit.TXINTENA = 0; SciaRegs.SCIFFCT.bit.FFTXDLY = 3; //设置FIFO发送延迟为3个串口波特率周期
//接收FIFO的设置
SciaRegs.SCICTL1.bit.RXENA = 1; //使能SCI接收
SciaRegs.SCICTL2.bit.RXBKINTENA = 0; //禁能RXRDY/BRKDT产生的中断 SciaRegs.SCICTL1.bit.RXERRINTENA = 1; //使能接收错误中断 //FIFO中断使能,FIFO 8个时产生中断
SciaRegs.SCIFFRX.bit.RXFFIENA = 1; //使能接收FIFO功能
SciaRegs.SCIFFRX.bit.RXFFIL = fifodepth; //设置接收FIFO中断级别
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 0;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFRX.bit.RXFIFORESET =0;
SciaRegs.SCIFFRX.bit.RXFIFORESET =1; SciaRegs.SCICTL1.bit.SWRESET = 1; return status;}
发送的函数为:
void scia_xmit(unsigned int a)
{
SciaRegs.SCITXBUF = a;}
zhiyongbasic:
回复 Eric Ma:
这样单纯的发送是不可靠的;最好能加入是否可以写入SCITXBUF寄存器的判断,否则会丢失数据;尤其是在波特率比较大的时候;
另外使用内置晶振的时候,波特率会有误差,这个判断会有更直接且明显的影响。
F28335上SCIA采用发送和接收FIFO时,发现不管发送中断级别设为多少,只要往SciaRegs.SCITXBUF中写入数据,数据会立即发送出去。在此弄不明白的是发送中断级别设置有什么用?为什么设置发送中断级别没有效(没有打开FIFO发送中断)。为什么不是向SciaRegs.SCITXBUF中写入达到发送中断级别设置个数的数据后,再一次发送出去?但是接收中断级别有效,只有接收到设置的fifodepth才会进入接收fifo中断。
以下是我的初始化代码:
unsigned int InitScia_Fifo(unsigned int parity, unsigned int stop, unsigned int baud, unsigned int fifodepth)
{ unsigned int status;
unsigned int baud_RL,baud_RH;
switch(parity)
{
case 0: //无校验
SciaRegs.SCICCR.bit.PARITYENA=0;
status=0;
break;
case 1: //.奇校验
SciaRegs.SCICCR.bit.PARITYENA=1;
SciaRegs.SCICCR.bit.PARITY=0;
status=0;
break;
case 2: //偶校验
SciaRegs.SCICCR.bit.PARITYENA=1;
SciaRegs.SCICCR.bit.PARITY=1;
status=0;
break;
default:
status=1;
break;
}
switch(stop)
{
case 0:
SciaRegs.SCICCR.bit.STOPBITS=0;
status=0;
break;
case 1:
SciaRegs.SCICCR.bit.STOPBITS=1;
status=0;
break;
default:
status=1;
break;
}
SciaRegs.SCICCR.bit.LOOPBKENA = 0;
SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0;
SciaRegs.SCICCR.bit.SCICHAR = 7; //SCICCR register set over
switch(baud)
{
case 0:
baud_RH=0x01;
baud_RL=0xe7;
status=0;
break;
case 1:
baud_RH=0x00;
baud_RL=0xf3;
status=0;
break;
case 2:
baud_RH=0x00;
baud_RL=0x00;
status=0;
break;
case 3:
baud_RH=0x00;
baud_RL=0x50;
status=0;
break;
case 4:
baud_RH=0x00;
baud_RL=0x28;
status=0;
break;
default:
status=1;
break;
} SciaRegs.SCIHBAUD =baud_RH;
SciaRegs.SCILBAUD =baud_RL; //发送FIFO的设置 SciaRegs.SCICTL1.bit.TXENA = 1; SciaRegs.SCIFFTX.bit.SCIRST = 1;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFTX.bit.SCIFFENA = 1;
SciaRegs.SCIFFTX.bit.TXFFIENA = 0; //不使能FIFO发送中断
SciaRegs.SCIFFTX.bit.TXFFIL = 8; //设置发送FIFO长度
SciaRegs.SCICTL2.bit.TXINTENA = 0; SciaRegs.SCIFFCT.bit.FFTXDLY = 3; //设置FIFO发送延迟为3个串口波特率周期
//接收FIFO的设置
SciaRegs.SCICTL1.bit.RXENA = 1; //使能SCI接收
SciaRegs.SCICTL2.bit.RXBKINTENA = 0; //禁能RXRDY/BRKDT产生的中断 SciaRegs.SCICTL1.bit.RXERRINTENA = 1; //使能接收错误中断 //FIFO中断使能,FIFO 8个时产生中断
SciaRegs.SCIFFRX.bit.RXFFIENA = 1; //使能接收FIFO功能
SciaRegs.SCIFFRX.bit.RXFFIL = fifodepth; //设置接收FIFO中断级别
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 0;
SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
SciaRegs.SCIFFRX.bit.RXFIFORESET =0;
SciaRegs.SCIFFRX.bit.RXFIFORESET =1; SciaRegs.SCICTL1.bit.SWRESET = 1; return status;}
发送的函数为:
void scia_xmit(unsigned int a)
{
SciaRegs.SCITXBUF = a;}
user4764048:
回复 Eric Ma:
讲的好