打印
[DSP编程]

DSP SCIFIFO的编程问题求解答???

[复制链接]
1424|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
w-w-w|  楼主 | 2014-4-8 19:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "DSP281x_Device.h"                    
#include "DSP281x_Examples.h"
//#define SCI_IO 0x0030
void IO_function(void);
void Scia_init(void);
void Scia_xmit(int a);
interrupt void sciarxfifoisr(void);
Uint16 receivedchar=0;
void main(void)
{
       
        InitSysCtrl();
        IO_function();
        DINT;
        InitPieCtrl();
        IER=0x0000;
        IFR=0x0000;
        InitPieVectTable();
        EALLOW;
        PieVectTable.RXAINT=&sciarxfifoisr;
        EDIS;
        PieCtrlRegs.PIECRTL.bit.ENPIE=1;
        PieCtrlRegs.PIEIER9.bit.INTx1=1;
        IER=0x100;
        EINT;
        ERTM;
        Scia_init();
        for(;;)
        {}

}

void IO_function(void)
{
        EALLOW;
        GpioMuxRegs.GPFMUX.all=0x0030;
        EDIS;

}

void Scia_xmit(int a)
{
    SciaRegs.SCITXBUF=a;
        SciaRegs.SCITXBUF=(a&0xff);
        while(SciaRegs.SCICTL2.bit.TXRDY!=1){};
}

void Scia_init(void)
{
        SciaRegs.SCIFFTX.all=0xE040;
        SciaRegs.SCIFFRX.all=0x2021;
        SciaRegs.SCIFFCT.all=0x0;
        SciaRegs.SCICCR.all =0x0007;                                                                          
        SciaRegs.SCICTL1.all =0x0003;                                                 
        SciaRegs.SCICTL2.all =0x0003;               
        SciaRegs.SCIHBAUD    =0x0001;  
        SciaRegs.SCILBAUD    =0x00E7;       
        SciaRegs.SCICTL1.all =0x0023;
        SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
        SciaRegs.SCIFFRX.bit.RXFIFORESET=1;       
}


interrupt void sciarxfifoisr(void)
{
        receivedchar=SciaRegs.SCIRXBUF.all;
        receivedchar&=0xff;
        Scia_xmit(receivedchar);
        SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;
        SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;
        PieCtrlRegs.PIEACK.all|=0x100;
}
来自于TMS320F2812原理及其C语言程序开发:p183(串口中断接受程序)
程序描述:在for空循环语句中,当串口小助手给DSP发送数据时,DSP会响应接受中断(中断的fifo级别位是1),即当接受数据量为1时响应中断。在中断函数中加入了发送函数,即在中断中向串口小助手发送接收到的数据。
程序运行结果:运行有问题,每发下去一个数据,会在一次中断响应过程中发回两个同样的数据。
分析原因结果:
1、当把fifo级别反复设置成3或者15时,reset DSP,然后重新load program之后,串口小助手需要一直发送3或者15个数据到DSP的fifo,才能响应中断,每次中断发送两个相同的数据。这时,fifo的指针就会偏移一位,下次再接受数据,再一次响应中断。
2、在sci_xmit函数处设置断点,在最后一行设置断点,响应中断的时候,会在发送函数执行中发送一个数据,在最后一行执行完到第二次响应中断期间会再次发送一个数据。这就是两个相同数据产生的过程。

到底为什么会在中断的执行过程中产生两个相同的数据?求大神解答,感激不尽

相关帖子

沙发
zhangmangui| | 2014-4-8 21:56 | 只看该作者
设置为3或15   接收fifo中的到3或15个字节后就会中断  这个是可以理解的
从中断函数看  中断中应该接收并上传PC端的应该是最后一个字节吧

使用特权

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

本版积分规则

2

主题

6

帖子

1

粉丝