#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;
       &nbsp ieCtrlRegs.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函数处设置断点,在最后一行设置断点,响应中断的时候,会在发送函数执行中发送一个数据,在最后一行执行完到第二次响应中断期间会再次发送一个数据。这就是两个相同数据产生的过程。
到底为什么会在中断的执行过程中产生两个相同的数据?求大神解答,感激不尽 |