wei3890836 发表于 2014-8-7 16:27

28023 SCI 小问题 求助

大家好,我结合TI的DSP28023例程,写了一个串口通信,查询方式的,可惜用串口助手发送数据时,之前好好的,现在收不到了,我把程序放出来,大家帮我看看,是不是哪里错了,没错的话估计是板子的事情
#include "DSP28x_Project.h"   // Device Headerfile and Examples Include File

// Prototype statements for functions found within this file.
void scia_echoback_init(void);
void scia_xmit(int a);

// Global counts used in this example
Uint16 ReceivedChar;

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

// User specific code:

    ReceivedChar = 0;
    scia_echoback_init();// Initialize SCI for echoback
    scia_xmit();
   
   for(;;)
    {
       while(SciaRegs.SCIRXST.bit.RXRDY==1){}      
       ReceivedChar = SciaRegs.SCIRXBUF.all;            
       scia_xmit(ReceivedChar);      
    }

}

void scia_echoback_init()
{
   
        SciaRegs.SCIHBAUD   =0x0000;// 9600 baud @LSPCLK = 12.5 MHz (50 MHz SYSCLK)
           SciaRegs.SCILBAUD   =0x00A1;
   
    SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,No loopback
                                 // No parity,8 char bits,
                                 // async mode, idle-line protocol
    SciaRegs.SCICTL1.all =0x0003;// enable TX, RX, internal SCICLK,
                                 // Disable RX ERR, SLEEP, TXWAKE
    SciaRegs.SCICTL2.all =0x0003;   

    SciaRegs.SCICTL1.all =0x0023;// Relinquish SCI from Reset
}

// Transmit a character from the SCI
void scia_xmit(int a)
{
    while(SciaRegs.SCICTL2.bit.TXRDY == 1){}
    SciaRegs.SCITXBUF=a;

}

it_yrj 发表于 2014-8-7 16:41

楼主的while()没有发挥相关的作用吧?具体是用来判断什么的不太了解,就是觉得有些奇怪,帮顶了

wei3890836 发表于 2014-8-7 16:54

it_yrj 发表于 2014-8-7 16:41 static/image/common/back.gif
楼主的while()没有发挥相关的作用吧?具体是用来判断什么的不太了解,就是觉得有些奇怪,帮顶了 ...

// Prototype statements for functions found within this file.
void scia_echoback_init(void);
void scia_xmit(int a);

// Global counts used in this example
Uint16 ReceivedChar;

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

// User specific code:

    ReceivedChar = 0;
    scia_echoback_init();// Initialize SCI for echoback
    scia_xmit();

       while(SciaRegs.SCIRXST.bit.RXRDY==1)
   {      
       ReceivedChar = SciaRegs.SCIRXBUF.all;            
       scia_xmit(ReceivedChar);      
   }

}

void scia_echoback_init()
{
   
      SciaRegs.SCIHBAUD   =0x0000;// 9600 baud @LSPCLK = 12.5 MHz (50 MHz SYSCLK)
         SciaRegs.SCILBAUD   =0x00A1;
   
    SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,No loopback
                                 // No parity,8 char bits,
                                 // async mode, idle-line protocol
    SciaRegs.SCICTL1.all =0x0003;// enable TX, RX, internal SCICLK,
                                 // Disable RX ERR, SLEEP, TXWAKE
    SciaRegs.SCICTL2.all =0x0003;   

    SciaRegs.SCICTL1.all =0x0023;// Relinquish SCI from Reset
}

// Transmit a character from the SCI
void scia_xmit(int a)
{
    while(SciaRegs.SCICTL2.bit.TXRDY == 1)
{
    SciaRegs.SCITXBUF=a;
}
}

这次对了,刚才发错版本了,谢谢提醒

wangch_sh 发表于 2014-8-7 17:35

一次也收不到吗?感觉最多收到一次。

wei3890836 发表于 2014-8-7 17:38

wangch_sh 发表于 2014-8-7 17:35 static/image/common/back.gif
一次也收不到吗?感觉最多收到一次。

收不到,我在scia_xmit();前面加了个while(1),也不行

wangch_sh 发表于 2014-8-7 17:47

换块板子试试。

raoxianbin 发表于 2014-8-7 18:34

改成void scia_xmit(int a)
{
      SciaRegs.SCITXBUF=a;
while(SciaRegs.SCICTL2.bit.TXRDY != 1){}


}试试

zhangmangui 发表于 2014-8-7 21:37

wei3890836 发表于 2014-8-7 16:54 static/image/common/back.gif
// Prototype statements for functions found within this file.
void scia_echoback_init(void);
void...

程序中scia_xmit();这句有什么意义吗   没有传递参数不会有问题吗
你在线调试吧    全速运行之后把ReceivedCharadd to watch查看一下
看看有没有收到你下发的数据   
你把下面代码改改
void scia_xmit(int a)
{
    while(SciaRegs.SCICTL2.bit.TXRDY == 1)
{
    SciaRegs.SCITXBUF=a;
}
}
改为:
void scia_xmit(int a)
{
    while(SciaRegs.SCICTL2.bit.TXRDY == 1){;}
    SciaRegs.SCITXBUF=a;
}

wei3890836 发表于 2014-8-13 15:31

狠心买了一块dsp28027开发板和仿真器,刚到货,着急试了一下TI的SCI没有中断的例程,居然还是发送出去接收不到,难道这个例程不可用吗?现在彻底迷糊了,有没有用过2802x的同学交流一下啊

zhangmangui 发表于 2014-8-13 20:53

wei3890836 发表于 2014-8-13 15:31 static/image/common/back.gif
狠心买了一块dsp28027开发板和仿真器,刚到货,着急试了一下TI的SCI没有中断的例程,居然还是发送出去接收 ...

那就重点检查一下   你的PC机端看看有没有问题
短接PC机端的收发引脚   自发自收看看能不能收到

wei3890836 发表于 2014-8-13 22:19

zhangmangui 发表于 2014-8-13 20:53 static/image/common/back.gif
那就重点检查一下   你的PC机端看看有没有问题
短接PC机端的收发引脚   自发自收看看能不能收到 ...

版主你好,我把串口的发送接收端通过导线连接后,用助手发送接收,没问题。我现在想到一个问题,软件TI官网的,硬件是开发板,按理说问题都不大,那问题应该出现在我的操作上,操作有什么经验之谈需要注意的吗?开发板原来Flash已经有一个LED程序,当我上电后,自行闪烁,这时我把SCI的程序烧写到ram中,灯停止闪烁。是说将要执行ram中的程序了吗,那Flash中程序出于什么状态?这么操作可行吗?辛苦大家了

zhangmangui 发表于 2014-8-13 22:22

wei3890836 发表于 2014-8-13 22:19 static/image/common/back.gif
版主你好,我把串口的发送接收端通过导线连接后,用助手发送接收,没问题。我现在想到一个问题,软件TI官 ...

把代码写到RAM中 后LED程序肯定就不会执行了   开始执行SCI代码
烧写到FLASH后   上电重启   看看    LED不执行了就说明烧写SCI代码成功了

wei3890836 发表于 2014-8-13 22:39

zhangmangui 发表于 2014-8-13 22:22 static/image/common/back.gif
把代码写到RAM中 后LED程序肯定就不会执行了   开始执行SCI代码
烧写到FLASH后   上电重启   看看    LE ...

就是说允许在Flash内有程序的前提下,我通过仿真器往RAM中烧写程序并执行RAM中的程序,是吧?

wei3890836 发表于 2014-8-14 09:21

wei3890836 发表于 2014-8-13 22:39 static/image/common/back.gif
就是说允许在Flash内有程序的前提下,我通过仿真器往RAM中烧写程序并执行RAM中的程序,是吧? ...

RAM和FLASH问题我通过实验自行解决了。谢谢热心版主。通信问题我再斟酌一下,好诡异。

wei3890836 发表于 2014-8-15 09:16

已经自行解决,谢谢大家

zhangmangui 发表于 2014-8-16 16:22

wei3890836 发表于 2014-8-15 09:16 static/image/common/back.gif
已经自行解决,谢谢大家

解决了就好   给大家详细分享一下

wei3890836 发表于 2014-8-19 21:40

就是市面上主打的TI的DSP芯片是2812和28335,TI自带官网例程中的SysCtrl.c都是使用的外部晶振,而2802x的SysCtrl.c中可以选择外部晶振还是内部晶振,且默认的是10M的内部晶振,这里值得注意。因为晶振选择不对的话SCI的波特率设置就有问题。个人观点,如有不对欢迎指正。

wei3890836 发表于 2014-8-19 21:45

对了,28023主频是50M,TI官网自带SCI例程中在波特率设置的时候写的有点错误,我截了个图,用到的人一看就能明白。

DSPTYJ 发表于 2014-8-20 14:09

楼主,能不能发份28023的工程文件给我?我不想自己建工程了,想用现成的
麻烦了 邮箱;771296521@qq.com
谢谢

wei3890836 发表于 2014-8-21 10:44

DSPTYJ 发表于 2014-8-20 14:09 static/image/common/back.gif
楼主,能不能发份28023的工程文件给我?我不想自己建工程了,想用现成的
麻烦了 邮箱;
谢谢 ...

好的,晚上回去给你发过去。我的是28027的工程,你再简单改改就行,多多交流,我也才开始用2802x系列,正在看TI的ADC datasheet,头都大了
页: [1]
查看完整版本: 28023 SCI 小问题 求助