打印

关于2812的sci测试程序

[复制链接]
4666|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xzl_grame|  楼主 | 2007-1-2 19:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用合众达的SCI测试程序进行SCI 测试时出现一个问题,就是我觉得程序应该是将从上位机发送过去的字符返回来,但我以运行程序,没有从上位机向dsp发送字符就可以从串口调试助手上看到DSP 发送过来一大堆字符。
而且即使我把程序停止掉 ,甚至dsp断电,上位机还是老是接收到字符。。不知道是什么原因,哪位大哥帮帮忙。。谢谢!!!
代码如下:
#include "DSP28_Device.h"
unsigned int Sci_VarRx[100];
unsigned int i,j;
unsigned int Send_Flag;

void main(void)
{

        /*初始化系统*/
        InitSysCtrl();

        /*关中断*/
        DINT;
        IER = 0x0000;
        IFR = 0x0000;

        /*初始化PIE中断*/
        InitPieCtrl();

        /*初始化PIE中断矢量表*/
        InitPieVectTable();        
        
        /*初始化SCIA寄存器*/
    InitSci();
    for(i = 0; i < 100; i++)
    {
            Sci_VarRx = 0;
    }
    i = 0;
    j = 0;
    Send_Flag = 0;
    
    #if SCIA_INT
        /*设置中断服务程序入口地址*/
        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

        /*开中断*/
        IER |= M_INT9;
        #endif
        EINT;   // Enable Global interrupt INTM
        ERTM;        // Enable Global realtime interrupt DBGM

        for(;
        {
                if((SciaTx_Ready() == 1) && (Send_Flag == 1))
                {
                        SciaRegs.SCITXBUF = Sci_VarRx;
                        Send_Flag = 0;
                        i++;
                        if(i == j)
                        {
                                i = 0;
                                j = 0;
                        }
                }
                
                
                #if !SCIA_INT
                if(SciaRx_Ready() == 1)
                {
                        Sci_VarRx[j] = SciaRegs.SCIRXBUF.all;
                        Send_Flag = 1;
                        j++;
                        if(j == 100)
                        {
                                j = 0;
                        }
                }
                #endif
        }

}         


//===========================================================================
// No more.
//===========================================================================



void InitSci(void)
{
        // Initialize SCI-A:
        *UART_MODE = 0x44;
        
        EALLOW;
        GpioMuxRegs.GPFMUX.all = 0x0030;
        EDIS;
        /* loopback   8 bit data */
        SciaRegs.SCICCR.all = 0x07;
        
        SciaRegs.SCICTL1.all = 0x03;
        SciaRegs.SCICTL2.all = 0x03;
        
        SciaRegs.SCIHBAUD = 0x00;
        SciaRegs.SCILBAUD = 0xF3;
        
        SciaRegs.SCICTL1.all = 0x23;
        
        PieCtrl.PIEIER9.bit.INTx1 = 1;
        PieCtrl.PIEIER9.bit.INTx2 = 1;
        //tbd...
        

        // Initialize SCI-B:

        //tbd...
}

/********************************************************************************
        name:        int SciaTx_Ready(void)
        input:        none
        output:        i        1:        ready
                        0:        busy
*********************************************************************************/

int SciaTx_Ready(void)
{
        unsigned int i;
        if(SciaRegs.SCICTL2.bit.TXRDY == 1)
        {
                i = 1;
        }
        else
        {
                i = 0;
        }
        return(i);
}

/********************************************************************************
        name:        int SciaRx_Ready(void)
        input:        none
        output:        i        1:        new data
                        0:        none
*********************************************************************************/

int SciaRx_Ready(void)
{
        unsigned int i;
        if(SciaRegs.SCIRXST.bit.RXRDY == 1)
        {
                i = 1;
        }
        else
        {
                i = 0;
        }
        return(i);
}


        
//===========================================================================
// No more.

相关帖子

沙发
STEAVEN| | 2007-1-2 21:04 | 只看该作者

多半是波特率问题

使用特权

评论回复
板凳
luyinkai| | 2007-1-8 10:22 | 只看该作者

干扰问题!

"甚至dsp断电,上位机还是老是接收到字符"

1,有可能是干扰问题,PC RS232的通信线太长

2,有可能你将RS232的RX和TX端接线搞反了,要确保PC端RS232的TXD端与DSP的RXD端连接,PC端的RXD端与DSP的TXD端正确连接.

使用特权

评论回复
地板
xzl_grame|  楼主 | 2007-1-8 16:33 | 只看该作者

多谢,我换一根串口线看看

好,多谢了。我试一试看看。

使用特权

评论回复
5
xzl_grame|  楼主 | 2007-1-8 17:50 | 只看该作者

字符显示时接收到的都是乱码,

换了一个串口线还是不行。。。不知道是什么原因啊

使用特权

评论回复
6
xzl_grame|  楼主 | 2007-1-8 17:59 | 只看该作者

还有

好像把仿真器的拔下来(热插拔)就可以,接上去后又不断往外发送数据(从串口调试精灵接收端看到)。

使用特权

评论回复
7
xzl_grame|  楼主 | 2007-1-11 10:23 | 只看该作者

有人知道吗?

对了,是DSP一上电就会发字符,断电就没有了。接到别人的电脑上也是这样,不知道怎么回事,没有哪位大虾知道啊??

使用特权

评论回复
8
xzl_grame|  楼主 | 2007-1-15 15:13 | 只看该作者

自己顶一下!

咋就没有人回复一下呢?都不知道吗?抑或是谁发个正确的sci2812的程序给我看看啊,感激不尽啊!xzl_grame@163.com

使用特权

评论回复
9
zj0203| | 2007-1-15 22:02 | 只看该作者

这个应该不是程序问题!

   这个应该不是程序问题,看了你的程序,好像在例程的基础上没有改动!
首先看看你的接口有没有搞错。我刚刚用例程试过了,没有问题!所以很有可能是其他原因造成的问题。

使用特权

评论回复
10
kunhu| | 2007-1-19 17:34 | 只看该作者

开关电源的问题

好像遇到过这个问题

因为我的仿真器和串口线通过开发板构成了电流的回路。

可以换开发板电源插头方向,换其他仿真器试试,

使用特权

评论回复
11
xzl_grame|  楼主 | 2007-1-23 19:26 | 只看该作者

电源插头方向怎么换啊?

楼上的说"可以换开发板电源插头方向"是什么意思啊???,仿真器只有一个怎么换啊,

使用特权

评论回复
12
jxf301| | 2007-1-26 21:03 | 只看该作者

搞好了没有

搞好了没有?如果硬件没有问题,软件是不难的。

使用特权

评论回复
13
hcl857256004| | 2015-4-7 19:18 | 只看该作者
请问你现在解决了吗?我现在也碰到这种问题了

使用特权

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

本版积分规则

3

主题

12

帖子

1

粉丝