打印
[DSP编程]

2812的SCI-接受串口数据后响应中断给上位机发数据

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

void IO_function(void)
{
        EALLOW;
        //GpioMuxRegs.GPGMUX.all=SCI_IO;
        GpioMuxRegs.GPGMUX.bit.SCITXDB_GPIOG4=1;
    GpioMuxRegs.GPGMUX.bit.SCIRXDB_GPIOG5=1;
        EDIS;

}

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

void Scib_init(void)
{
        ScibRegs.SCIFFTX.all=0xE040;
        ScibRegs.SCIFFRX.all=0x2021;
        ScibRegs.SCIFFCT.all=0x0;
        ScibRegs.SCICCR.all =0x0007;                                                                          
        ScibRegs.SCICTL1.all =0x0003;                                                 
        ScibRegs.SCICTL2.all =0x0003;               
        ScibRegs.SCIHBAUD    =0x0001;  
        ScibRegs.SCILBAUD    =0x00E7;       
        ScibRegs.SCICTL1.all =0x0023;       
}


interrupt void scibrxfifoisr(void)
{
        receivedchar=ScibRegs.SCIRXBUF.all;
        receivedchar&=0xff;
        Scib_xmit(receivedchar);
        ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1;
        ScibRegs.SCIFFRX.bit.RXFFINTCLR=1;
        PieCtrlRegs.PIEACK.all|=0x100;

}
源程序如上,请高手解答!
当我在串口小助手中给dsp发十六进制数据02时,按照程序应该会进入中断,然后在中断函数中给串口小助手回应数据02.为什么没有?是没有进入中断吗?程序编译通过。附件中是寄存器的截图!

231.JPG (32.67 KB )

231.JPG

相关帖子

沙发
zhangmangui| | 2014-4-2 22:20 | 只看该作者
你在线仿真看看   在中断函数中打断点  看看能不能进入中断服务函数
还有办法就是在主函数中发送数据  看看调试助手中能不能收到

使用特权

评论回复
板凳
zhangmangui| | 2014-4-2 22:22 | 只看该作者
看看这个代码  参考一下

EX11_SCI_RS232.zip (371.38 KB)

使用特权

评论回复
地板
w-w-w|  楼主 | 2014-4-3 15:51 | 只看该作者
zhangmangui 发表于 2014-4-2 22:22
看看这个代码  参考一下

感谢版主的热心回答。我试了你给我的代码,在串口小助手上给dsp发FF FF FF FF(自动发送),它回过来的也就是一包一包的FF FF FF FF。我还想请教一些细节,就是我给dsp发的时候,它是在接受语句块里一个字节(FF)一个字节的接受,然后存储在scirxdata这个数组里,最后在发送语句块中一个字节一个字节的传上来吗?那为什么看起来是一包一包(连续几个字节)一起发上来?
下面分别是发送和接受语句
if((SciaTx_Ready() == 1) && (SendFlag == 1))
                {
                        SciaRegs.SCITXBUF = SCiRxData;
                        SendFlag = 0;
                        i++;
                        if(i==100){i=0;}
                //        if(i == j)
                //        {
                //                i = 0;
                //                j = 0;
                //        }
                }
               
                #if !SCIA_INT
                if(SciaRx_Ready() == 1)
                {
                        SCiRxData[j] = SciaRegs.SCIRXBUF.all;
                        SendFlag = 1;
                        j++;
                        if(j == 100)
                        {
                                j = 0;
                        }
                }
                #endif

使用特权

评论回复
5
w-w-w|  楼主 | 2014-4-3 15:58 | 只看该作者
zhangmangui 发表于 2014-4-2 22:22
看看这个代码  参考一下

我想请教的就是dsp没有使用fifo功能,当我发送一连串数据的时候,他能连续接受吗?或者它接受一个字节后,读出scirxbuf中的数据,TXRDY标志位自动清零,标志位sendflag置1,然后在发送语句中把这个字节发出去,再去接受下一个字节。但是在串口助手中看到的是一连串数据一下发上来。不太明白是怎么回事?

使用特权

评论回复
6
zhangmangui| | 2014-4-3 22:43 | 只看该作者
w-w-w 发表于 2014-4-3 15:58
我想请教的就是dsp没有使用fifo功能,当我发送一连串数据的时候,他能连续接受吗?或者它接受一个字节后 ...

不用fifo的话   你就一个一个字节发送     不可能一次送一串

使用特权

评论回复
7
zhangmangui| | 2014-4-3 22:45 | 只看该作者
w-w-w 发表于 2014-4-3 15:51
感谢版主的热心回答。我试了你给我的代码,在串口小助手上给dsp发FF FF FF FF(自动发送),它回过来的也 ...

如果不用接收FIFO的话   就是一个字节接收一次  
如果用FIFO的话  你可以设置让它多少个字节后触发去接收

使用特权

评论回复
8
w-w-w|  楼主 | 2014-4-5 15:58 | 只看该作者

使用特权

评论回复
9
linao| | 2014-4-11 21:52 | 只看该作者

使用特权

评论回复
10
weisuo2015| | 2016-3-22 19:32 | 只看该作者
SCIRXBUF寄存器不是有8为么,是不是发一个8位数据只用一次中断?

使用特权

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

本版积分规则

2

主题

6

帖子

1

粉丝