打印

28023 SCI 小问题 求助

[复制链接]
2313|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
IAR, ic, ni, AC, cic
大家好,我结合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
楼主的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 | 只看该作者
一次也收不到吗?感觉最多收到一次。

使用特权

评论回复
5
wei3890836|  楼主 | 2014-8-7 17:38 | 只看该作者
wangch_sh 发表于 2014-8-7 17:35
一次也收不到吗?感觉最多收到一次。

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

使用特权

评论回复
6
wangch_sh| | 2014-8-7 17:47 | 只看该作者
换块板子试试。

使用特权

评论回复
7
raoxianbin| | 2014-8-7 18:34 | 只看该作者
改成void scia_xmit(int a)
{
        SciaRegs.SCITXBUF=a;
while(SciaRegs.SCICTL2.bit.TXRDY != 1){}


}试试

使用特权

评论回复
8
zhangmangui| | 2014-8-7 21:37 | 只看该作者
wei3890836 发表于 2014-8-7 16:54
// Prototype statements for functions found within this file.
void scia_echoback_init(void);
void  ...

程序中scia_xmit();这句有什么意义吗     没有传递参数不会有问题吗
你在线调试吧    全速运行之后把ReceivedChar  add 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;
}

使用特权

评论回复
9
wei3890836|  楼主 | 2014-8-13 15:31 | 只看该作者
狠心买了一块dsp28027开发板和仿真器,刚到货,着急试了一下TI的SCI没有中断的例程,居然还是发送出去接收不到,难道这个例程不可用吗?现在彻底迷糊了,有没有用过2802x的同学交流一下啊

使用特权

评论回复
10
zhangmangui| | 2014-8-13 20:53 | 只看该作者
wei3890836 发表于 2014-8-13 15:31
狠心买了一块dsp28027开发板和仿真器,刚到货,着急试了一下TI的SCI没有中断的例程,居然还是发送出去接收 ...

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

使用特权

评论回复
11
wei3890836|  楼主 | 2014-8-13 22:19 | 只看该作者
zhangmangui 发表于 2014-8-13 20:53
那就重点检查一下   你的PC机端  看看有没有问题
短接PC机端的收发引脚   自发自收看看能不能收到 ...

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

使用特权

评论回复
12
zhangmangui| | 2014-8-13 22:22 | 只看该作者
wei3890836 发表于 2014-8-13 22:19
版主你好,我把串口的发送接收端通过导线连接后,用助手发送接收,没问题。我现在想到一个问题,软件TI官 ...

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

使用特权

评论回复
13
wei3890836|  楼主 | 2014-8-13 22:39 | 只看该作者
zhangmangui 发表于 2014-8-13 22:22
把代码写到RAM中 后LED程序肯定就不会执行了   开始执行SCI代码
烧写到FLASH后   上电重启   看看    LE ...

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

使用特权

评论回复
14
wei3890836|  楼主 | 2014-8-14 09:21 | 只看该作者
wei3890836 发表于 2014-8-13 22:39
就是说允许在Flash内有程序的前提下,我通过仿真器往RAM中烧写程序并执行RAM中的程序,是吧? ...

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

使用特权

评论回复
15
wei3890836|  楼主 | 2014-8-15 09:16 | 只看该作者
已经自行解决,谢谢大家

使用特权

评论回复
16
zhangmangui| | 2014-8-16 16:22 | 只看该作者
wei3890836 发表于 2014-8-15 09:16
已经自行解决,谢谢大家

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

使用特权

评论回复
17
wei3890836|  楼主 | 2014-8-19 21:40 | 只看该作者
就是市面上主打的TI的DSP芯片是2812和28335,TI自带官网例程中的SysCtrl.c都是使用的外部晶振,而2802x的SysCtrl.c中可以选择外部晶振还是内部晶振,且默认的是10M的内部晶振,这里值得注意。因为晶振选择不对的话SCI的波特率设置就有问题。个人观点,如有不对欢迎指正。

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
zhangmangui + 6 论坛就需要你这样的!
18
wei3890836|  楼主 | 2014-8-19 21:45 | 只看该作者
对了,28023主频是50M,TI官网自带SCI例程中在波特率设置的时候写的有点错误,我截了个图,用到的人一看就能明白。

error.jpg (37.57 KB )

错误

错误

使用特权

评论回复
19
DSPTYJ| | 2014-8-20 14:09 | 只看该作者
楼主,能不能发份28023的工程文件给我?我不想自己建工程了,想用现成的
麻烦了 邮箱;  771296521@qq.com
谢谢

使用特权

评论回复
20
wei3890836|  楼主 | 2014-8-21 10:44 | 只看该作者
DSPTYJ 发表于 2014-8-20 14:09
楼主,能不能发份28023的工程文件给我?我不想自己建工程了,想用现成的
麻烦了 邮箱;  
谢谢 ...

好的,晚上回去给你发过去。我的是28027的工程,你再简单改改就行,多多交流,我也才开始用2802x系列,正在看TI的ADC datasheet,头都大了

使用特权

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

本版积分规则

11

主题

105

帖子

2

粉丝