TI中文支持网
TI专业的中文技术问题搜集分享网站

F28335的SCI 发送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,

我认为当向发送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:

讲的好

赞(0)
未经允许不得转载:TI中文支持网 » F28335的SCI 发送FIFO的问题,百思不得解
分享到: 更多 (0)