打印

28035 SCI

[复制链接]
2734|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cjystar|  楼主 | 2013-10-28 21:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
gp, pi, GPIO, ni, IO
我用28035的标准的SCI串口进行首发数据,为什么只能接收一个字节的数据呢,比如是发送1234接收的只是最后一个4444,我用了数组将其存储了。请高手帮忙看看,程序如下
#include "DSP2803x_Device.h"
#include "DSP2803x_Examples.h"

void GPIO_Init();
void SCIA_Init();
void delay_loop();
int SCIRx[100],Send_Flag,i,j;
void main(void)

{
          InitSysCtrl();
                 DINT;
           InitPieCtrl();
           IER = 0x0000;
           IFR = 0x0000;
           InitPieVectTable();

           GpioDataRegs.GPADAT.bit.GPIO29=1;
           GpioDataRegs.GPADAT.bit.GPIO9=1;
           for(i=0;i<100;i++)
           {
                   SCIRx[i]=0;

           }
           i=0;
           j=0;
           Send_Flag=0;

           PieCtrlRegs.PIEIER9.bit.INTx1=1;
         // PieCtrlRegs.PIEIER9.bit.INTx2=1;
           IER|=M_INT9;
           EINT;//开全局中断
           ERTM;//开全局实时中断

           GPIO_Init();
           SCIA_Init();

           while(1)
           {
                            if(Send_Flag==1)
                          {

                                    GpioDataRegs.GPADAT.bit.GPIO6=1;//禁止接收
                                    SciaRegs.SCICTL1.bit.RXENA=0;//禁止接收

                   GpioDataRegs.GPADAT.bit.GPIO9=0;
                                          delay_loop();
                                          GpioDataRegs.GPADAT.bit.GPIO9=1;//发送数据指示灯


                                   SciaRegs.SCITXBUF=SCIRx[j];

                                   delay_loop();
                                   j++;
                                   if(j==8)
                                {
                                        j=0;
                                        Send_Flag=0;
                                        GpioDataRegs.GPADAT.bit.GPIO6=0;//使能接收
                                        SciaRegs.SCICTL1.bit.RXENA=1;
                                }



                          }

                }





}

void GPIO_Init()
{
   EALLOW;
   GpioCtrlRegs.GPAPUD.bit.GPIO7=0;
   GpioCtrlRegs.GPAMUX1.bit.GPIO7=2;
   GpioCtrlRegs.GPAQSEL1.bit.GPIO7=3;

   GpioCtrlRegs.GPAPUD.bit.GPIO12=0;
   GpioCtrlRegs.GPAMUX1.bit.GPIO12=2;
   GpioCtrlRegs.GPAQSEL1.bit.GPIO12=3;

   GpioCtrlRegs.GPAMUX1.bit.GPIO6=0;
   GpioCtrlRegs.GPADIR.bit.GPIO6=1;

   GpioCtrlRegs.GPAMUX1.bit.GPIO9=0;
   GpioCtrlRegs.GPADIR.bit.GPIO9=1;

   GpioCtrlRegs.GPAMUX2.bit.GPIO29=0;
   GpioCtrlRegs.GPADIR.bit.GPIO29=1;

   EDIS;
}

void SCIA_Init()
{
        SciaRegs.SCICCR.bit.STOPBITS=0;
        SciaRegs.SCICCR.bit.PARITYENA=0;
        SciaRegs.SCICCR.bit.LOOPBKENA=0;
        SciaRegs.SCICCR.bit.ADDRIDLE_MODE=0;
        SciaRegs.SCICCR.bit.SCICHAR=7;
        SciaRegs.SCICTL1.bit.RXENA=1;
        SciaRegs.SCICTL1.bit.TXENA=1;
        SciaRegs.SCIHBAUD=0;
        SciaRegs.SCILBAUD=0xc2;
        SciaRegs.SCICTL2.bit.RXBKINTENA=1;//使能接收中断
        //SciaRegs.SCICTL2.bit.TXINTENA=1;//使能发送中断
        SciaRegs.SCICTL1.bit.SWRESET=1;
}


interrupt void SCIRXINTA_ISR(void)     // SCI-A
{
         GpioDataRegs.GPADAT.bit.GPIO6=0;//使能接收
        GpioDataRegs.GPADAT.bit.GPIO29=0;
        delay_loop();
        GpioDataRegs.GPADAT.bit.GPIO29=1;//接收数据指示灯


          SCIRx[i]=SciaRegs.SCIRXBUF.all;
          i++;
          if(i==8)
          {
                  Send_Flag=1;
                  i=0;
          }
        PieCtrlRegs.PIEACK.all=0x0100;
        EINT;//开全局中断

}


/*interrupt void SCITXINTA_ISR(void)     // SCI-A
{


          GpioDataRegs.GPADAT.bit.GPIO6=1;

        //SciaRegs.SCICTL2.bit.RXBKINTENA=0;
  if(Send_Flag==1)
  {

        SciaRegs.SCITXBUF=SCIRx[j];
            GpioDataRegs.GPADAT.bit.GPIO9=0;
                  delay_loop();
                  GpioDataRegs.GPADAT.bit.GPIO9=1;
        j++;
        if(j==8)
        {
                j=1;
                Send_Flag=0;

        }

  }

  PieCtrlRegs.PIEACK.all=0x0100;
  EINT;
  GpioDataRegs.GPADAT.bit.GPIO6=0;
  //SciaRegs.SCICTL2.bit.RXBKINTENA=1;
}*/

void delay_loop()
{
    short      i,j;
    for (i = 0; i < 1000; i++)
        for(j=0;j<100;j++);
}

相关帖子

沙发
zhangmangui| | 2013-10-28 22:12 | 只看该作者
为什么要=8呢   还有要循环8次呢  
发送一个字节  直接送入就好啦
如果发送1   buffer = 1就行了

使用特权

评论回复
板凳
cjystar|  楼主 | 2013-10-29 08:53 | 只看该作者
zhangmangui 发表于 2013-10-28 22:12
为什么要=8呢   还有要循环8次呢  
发送一个字节  直接送入就好啦
如果发送1   buffer = 1就行了 ...

谢谢你的回复,我是希望能够接收和发送8个字节,先用数组存储起来,再发回来,比如发送12345678,希望调试助手能收到12345678,但是现在调试助手收到的是88888888,只能是最后一个,不知道为什么,请大侠指点,是哪里出了问题,纠结了很长时间

使用特权

评论回复
地板
zhangmangui| | 2013-10-29 09:18 | 只看该作者
cjystar 发表于 2013-10-29 08:53
谢谢你的回复,我是希望能够接收和发送8个字节,先用数组存储起来,再发回来,比如发送12345678,希望调 ...

看到你接收8字节之后send_flag置一  
这时候才有发送  首先验证你上位机发送一个字节
是否能进入中断   还有就是你让循环中发送一个字符看看上位机接收是否正常

使用特权

评论回复
5
cjystar|  楼主 | 2013-10-29 09:51 | 只看该作者
zhangmangui 发表于 2013-10-29 09:18
看到你接收8字节之后send_flag置一  
这时候才有发送  首先验证你上位机发送一个字节
是否能进入中断    ...

嗯,我是想接收八个字节再发一次,将八个字节发送出来所以是在接收8此后Send_flag=1再发送。用数组先存起来,我试过了发送一个字节接一个是没有问题的,完全是可以接收发送的,就是在发送多个字节的时间出现问题,最后接到的只是最后一个字节感觉是好像前面的被覆盖了一样,在实际运用中不会只是只是发送和接收一个字节,我希望能够随意的接收和发送多个字节,好纠结啊,以前用别的单片机是可以收发多个字节的

使用特权

评论回复
6
cjystar|  楼主 | 2013-10-30 11:00 | 只看该作者
大神们帮忙看看啊:handshake

使用特权

评论回复
7
cjystar|  楼主 | 2013-10-31 09:02 | 只看该作者
问题已解决

使用特权

评论回复
8
拿起书本| | 2013-10-31 09:08 | 只看该作者
楼主是如何做到能随意接收和发送多个字节的,说出来大家学习一下啊……

使用特权

评论回复
9
cjystar|  楼主 | 2013-11-1 08:47 | 只看该作者
拿起书本 发表于 2013-10-31 09:08
楼主是如何做到能随意接收和发送多个字节的,说出来大家学习一下啊……

由于28035接收和发送的缓存只能是一个一个字节的发送和接收,因此就需设置一个数组将需要接收的字节存起来,在发送出去,其实我的问题是在接收的中断中的延时长了一点,导致错过前面的字节的接受,才导致发送12345678而接收的是88888888这个结果,希望大家以后能多多交流,共同进步

使用特权

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

本版积分规则

19

主题

80

帖子

1

粉丝