打印

请问2812里的SCI FIFO增强模式如何设置

[复制链接]
2717|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
thf2008|  楼主 | 2009-9-1 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我目前想用SCI FIFO模式和PC通讯,但老是调不通,归纳一下,主要是有一下问题:
1:当接收方式采用FIFO模式时,SciaRegs.SCIRXST.bit.RXRDY这个标志位是否还有用 ?我要读接收到的数据是否还是和普通模式下一样直接读SciaRegs.SCIRXBUF.all的数值,因为采用FIFO模式后,数据存到SCIRXBUF后应该是移到RX FIFO里去啊,但怎么读接收到的数据呢?
2:当发送方式采用FIFO模式时,是直接写数据到SCITXBUF里吗,如果这样,那TX FIFO有什么用呢?我看论坛上给的例子都是直接写数据到SCITXBUF里,但我自己调不通,但普通模式下是没有问题的。
3:没搞懂FIFO模式下接收和中断的机制,具体来说,TXFIFO和普通模式下的TXINT是否共用一个中断,RXFIFO和普通模式下的RXINT是否共用一个中断,即产生中断后都调用相同的中断处理函数?

    希望各位路过的高手能告诉我,或者提供一个确实运行可靠的例程给我,谢谢

相关帖子

沙发
linhai2009| | 2009-9-1 09:41 | 只看该作者
问题2:是直接把要发送的数据写入SCITXBUF中的,写入的数据再从TXBUF传到TXFIFO中。
个人感觉,FIFO就是一个缓冲的寄存器,比如你要发送16组数据,使用FIFO功能时,你可以一下连续写16组数据SCITXBUF,CPU会自动将这连续写入的16组数据发送到TXFIFO中等待发送出去(如发给PC),而如果不使用FIFO功能,只能先写1组数据到SCITXBUF,待这组数据发送完成后,在中断或查询发送状态位后再写第2组数据,依次类推。。。个人观点,不一定正确,仅供参考,如有错误,还请指正

使用特权

评论回复
板凳
thf2008|  楼主 | 2009-9-6 15:28 | 只看该作者
我做了个测试,发现在SCITXINTA_ISR和SCIRXINTA_ISR这两个中断处理函数里添加TXRDY和RXRDY标志位,即使用PC发送数据,似乎也不判断这两个标志位,就是说没PC上看不到有数据发送。

使用特权

评论回复
地板
thf2008|  楼主 | 2009-9-6 15:29 | 只看该作者
添加后程序如下:
interrupt void SCIRXINTA_ISR(void)     // SCI-A
{
        PieCtrl.PIEACK.bit.ACK9 = 1;                // 写1 将该中断清零
           if(SciaRegs.SCIRXST.bit.RXRDY == 1)
        {
                       for(i = 0;i < 8;i++)
               {
                    Sci_VarRx[i] = SciaRegs.SCIRXBUF.all;
               }
                }
        SciaRegs.SCIFFRX.bit.RXOVF_CLR = 1;                // Clear Overflow flag
        SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;        // Clear Interrupt flag
        EINT;
}

interrupt void SCITXINTA_ISR(void)     // SCI-A
{
        PieCtrl.PIEACK.bit.ACK9 = 1;
        if(SciaRegs.SCICTL2.bit.TXRDY == 1)
        {
                for(i = 0;i < 8;i++)
                {
                        SciaRegs.SCITXBUF = Sci_VarRx[i];
                }
        }
        SciaRegs.SCIFFTX.bit.TXINTCLR = 1;                //Clear SCI Interrupt flag
        EINT;
}

使用特权

评论回复
5
thf2008|  楼主 | 2009-9-6 15:29 | 只看该作者
另外还有个问题,请问FIFO模式下如何进中断。因为我用PC和2812通讯时,即使pc端不发数据给2812,2812也会发送初始化的数据给PC而且是循环发送,我对FIFO的工作模式还不大了解。我把主要的程序段贴出来,请各位高手指点。

使用特权

评论回复
6
thf2008|  楼主 | 2009-9-6 15:29 | 只看该作者
初始化的数据是:
for(i = 0; i < 100; i++)
    {
            Sci_VarRx[i] = 0x00 + i;
    }

初始化SCI FIFO的程序是:
void InitSci(void)
{
        // Initialize SCI-A:
        
        EALLOW;
        GpioMuxRegs.GPFMUX.all = 0x0030;
        EDIS;
        /* loopback   8 bit data */
        SciaRegs.SCICCR.all = 0x07;        // 1 bit stop, disable parity, idle mode, 8 bits data
        
        SciaRegs.SCICTL1.all = 0x03; // enable TX
        SciaRegs.SCICTL2.all = 0x03; //
        
        SciaRegs.SCIHBAUD = 0x00;
        SciaRegs.SCILBAUD = 0xA2;        // Baud Rate = 19200

        //SciaRegs.SCIHBAUD = 0x01;
        //SciaRegs.SCILBAUD = 0XE7;        // Baud Rate = 9600

        //配置FIFO增强模式
        SciaRegs.SCIFFTX.all = 0xC028;
        SciaRegs.SCIFFRX.all = 0x0028;
        SciaRegs.SCIFFCT.all = 0x0000;        
        
        SciaRegs.SCICTL1.all = 0x23;
        SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;
        SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;
        
        PieCtrl.PIEIER9.bit.INTx1 = 1;
        PieCtrl.PIEIER9.bit.INTx2 = 1;
        //tbd...
        // Initialize SCI-B:
        //tbd...
}

中断程序入口地址为:
/*设置中断服务程序入口地址*/
EALLOW;        // This is needed to write to EALLOW protected registers
PieVectTable.TXAINT = &SCITXINTA_ISR;
PieVectTable.RXAINT = &SCIRXINTA_ISR;
EDIS;   // This is needed to disable write to EALLOW protected registers

程序里的SCITXINTA_ISR和SCIRXINTA_ISR中断处理函数就是楼上我贴的。
我就是奇怪,我即使不在PC端发送数据,PC端也能接收到2812传过来的数据,就是Sci_VarRx[0]到Sci_VarRx[7]这8个数据,即00 01 02 03 04 05 06 07。但发送数据的程序段我都是放在中断里的啊,很奇怪。

使用特权

评论回复
7
linhai2009| | 2009-9-6 15:47 | 只看该作者
这个要请高手回答……

使用特权

评论回复
8
linhai2009| | 2009-9-6 15:50 | 只看该作者
或者你可以看一下官方的英文说明

13. TMS320F28x Serial Communications Interface (SCI) Periphe.pdf

193.94 KB

使用特权

评论回复
9
thf2008|  楼主 | 2009-9-16 01:00 | 只看该作者
好的,还是谢谢了

使用特权

评论回复
10
RUNNER| | 2010-1-21 21:14 | 只看该作者
这个fifo做的很烂,建议还是不要用了

使用特权

评论回复
11
god_like| | 2010-1-21 23:31 | 只看该作者
我也感觉到了,不过一般都很少用到那个

使用特权

评论回复
12
thf2008|  楼主 | 2010-1-22 00:01 | 只看该作者
呵呵,我的问题被挖起来了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

221

主题

2024

帖子

2

粉丝