打印

俩块2812串口通信问题

[复制链接]
1085|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dsp新手yu|  楼主 | 2014-9-15 09:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
wangch_sh| | 2014-9-15 10:37 | 只看该作者
接收端的程序有没有问题?

使用特权

评论回复
板凳
raoxianbin| | 2014-9-15 11:12 | 只看该作者
应该可以  可以把代码贴出来看下

使用特权

评论回复
地板
dsp新手yu|  楼主 | 2014-9-15 12:51 | 只看该作者
raoxianbin 发表于 2014-9-15 11:12
应该可以  可以把代码贴出来看下

上面是接收数据中断中的程序,下面是主程序。(这个程序和上位机是可以正常通信的)
interrupt void SCIRXINTA_ISR(void)     // SCI-A接收中断函数
{
          Sci_Get = SciaRegs.SCIRXBUF.all; //接收数据               
        i++;

    if(i==24)
        {
           Send_Flag=1; //有数据需要发送,置位标志
           i=0;
        }
       
    PieCtrl.PIEACK.all=0x0100;  //使得同组其他中断能够得到响应
    EINT;  //开全局中断vcc

}

/****************************************************************************
*
*名    称:SCITXINTA_ISR()
*
*功    能:发送中断函数
*
*入口参数:无
*
*出口参数:无
*
****************************************************************************/

interrupt void SCITXINTA_ISR(void)     // SCI-A发送中断函数
{
   if(Send_Flag==2)
   {       
       SciaRegs.SCITXBUF=Sci_Get[j]; //发送数据      
       j++;
           if(j==24)
           {
                 j=0; //由于第一个数据已经在接收中断里发送,这里从第2个数据开始发送
                Send_Flag=0; //数据发送完成,清标志位
           }
        }

    PieCtrl.PIEACK.all=0x0100;  //使得同组其他中断能够得到响应
    EINT;  //开全局中断
}

void main(void)
{
    InitSysCtrl();  //初始化系统函数

        DINT;
        IER = 0x0000;   //禁止CPU中断
        IFR = 0x0000;   //清除CPU中断标志
       
        InitPieCtrl();  //初始化PIE控制寄存器

        InitPieVectTable();  //初始化PIE中断向量表         
       
        InitGpio();  //初始化Gpio口
       
        InitPeripherals(); //初始化SCIA
       
    for(i = 0; i <24; i++)  //初始化数据变量
    {
            Sci_Get=0;
    }   
    i = 0;   
    Send_Flag = 0;

    PieCtrl.PIEIER9.bit.INTx1=1;  //使能PIE模块中的SCI接收中断
    PieCtrl.PIEIER9.bit.INTx2=1;  //使能PIE模块中的SCI发送中断

    IER|=M_INT9;  //开CPU中断

    EINT;  //开全局中断
    ERTM;  //开全局实时中断
           
        for(;;)
        {               
           if(Send_Flag==1)
           {
                        SciaRegs.SCITXBUF=Sci_Get[0];
                        j=1;
                    Send_Flag=2;
           }
        }
}




使用特权

评论回复
5
dsp新手yu|  楼主 | 2014-9-15 12:54 | 只看该作者
wangch_sh 发表于 2014-9-15 10:37
接收端的程序有没有问题?

我感觉程序应该没有没有问题,因为接收端和上位机可以正常通信。不过发送端我是烧到FLASH里面运行的。

使用特权

评论回复
6
raoxianbin| | 2014-9-15 14:23 | 只看该作者
dsp新手yu 发表于 2014-9-15 12:51
上面是接收数据中断中的程序,下面是主程序。(这个程序和上位机是可以正常通信的)
interrupt void SCIR ...

初步看了一下      Sci_Get = SciaRegs.SCIRXBUF.all; //接收数据               这个地方的Sci_Get 数组是没显示出来?      还有你说吧发送端的数据固化到flash中   用上位机调试过这部分吗?

使用特权

评论回复
7
raoxianbin| | 2014-9-15 21:52 | 只看该作者
还有   你这两块板子是一样的?    也就是电平形式是一样的吗?

使用特权

评论回复
8
dsp新手yu|  楼主 | 2014-9-16 09:02 | 只看该作者
raoxianbin 发表于 2014-9-15 21:52
还有   你这两块板子是一样的?    也就是电平形式是一样的吗?

嗯,俩块板子是一样的。我把俩板共地发现可以接收了,不知道为什么?

使用特权

评论回复
9
zhangmangui| | 2014-9-16 22:40 | 只看该作者
任何器件的SCI都是RX和TX相连,TX和RX相连通信的
如果要和上位机通信肯定是需要MAX232等转换
通信之间的所有肯定都需要共地的   

使用特权

评论回复
10
dsp新手yu|  楼主 | 2014-9-17 20:04 | 只看该作者
zhangmangui 发表于 2014-9-16 22:40
任何器件的SCI都是RX和TX相连,TX和RX相连通信的
如果要和上位机通信肯定是需要MAX232等转换
通信之间的所 ...

谢谢斑竹!

使用特权

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

本版积分规则

3

主题

19

帖子

1

粉丝