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;
} 楼主的while()没有发挥相关的作用吧?具体是用来判断什么的不太了解,就是觉得有些奇怪,帮顶了 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 static/image/common/back.gif
一次也收不到吗?感觉最多收到一次。
收不到,我在scia_xmit();前面加了个while(1),也不行 换块板子试试。 改成void scia_xmit(int a)
{
SciaRegs.SCITXBUF=a;
while(SciaRegs.SCICTL2.bit.TXRDY != 1){}
}试试 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;
} 狠心买了一块dsp28027开发板和仿真器,刚到货,着急试了一下TI的SCI没有中断的例程,居然还是发送出去接收不到,难道这个例程不可用吗?现在彻底迷糊了,有没有用过2802x的同学交流一下啊 wei3890836 发表于 2014-8-13 15:31 static/image/common/back.gif
狠心买了一块dsp28027开发板和仿真器,刚到货,着急试了一下TI的SCI没有中断的例程,居然还是发送出去接收 ...
那就重点检查一下 你的PC机端看看有没有问题
短接PC机端的收发引脚 自发自收看看能不能收到 zhangmangui 发表于 2014-8-13 20:53 static/image/common/back.gif
那就重点检查一下 你的PC机端看看有没有问题
短接PC机端的收发引脚 自发自收看看能不能收到 ...
版主你好,我把串口的发送接收端通过导线连接后,用助手发送接收,没问题。我现在想到一个问题,软件TI官网的,硬件是开发板,按理说问题都不大,那问题应该出现在我的操作上,操作有什么经验之谈需要注意的吗?开发板原来Flash已经有一个LED程序,当我上电后,自行闪烁,这时我把SCI的程序烧写到ram中,灯停止闪烁。是说将要执行ram中的程序了吗,那Flash中程序出于什么状态?这么操作可行吗?辛苦大家了 wei3890836 发表于 2014-8-13 22:19 static/image/common/back.gif
版主你好,我把串口的发送接收端通过导线连接后,用助手发送接收,没问题。我现在想到一个问题,软件TI官 ...
把代码写到RAM中 后LED程序肯定就不会执行了 开始执行SCI代码
烧写到FLASH后 上电重启 看看 LED不执行了就说明烧写SCI代码成功了 zhangmangui 发表于 2014-8-13 22:22 static/image/common/back.gif
把代码写到RAM中 后LED程序肯定就不会执行了 开始执行SCI代码
烧写到FLASH后 上电重启 看看 LE ...
就是说允许在Flash内有程序的前提下,我通过仿真器往RAM中烧写程序并执行RAM中的程序,是吧? wei3890836 发表于 2014-8-13 22:39 static/image/common/back.gif
就是说允许在Flash内有程序的前提下,我通过仿真器往RAM中烧写程序并执行RAM中的程序,是吧? ...
RAM和FLASH问题我通过实验自行解决了。谢谢热心版主。通信问题我再斟酌一下,好诡异。 已经自行解决,谢谢大家 wei3890836 发表于 2014-8-15 09:16 static/image/common/back.gif
已经自行解决,谢谢大家
解决了就好 给大家详细分享一下 就是市面上主打的TI的DSP芯片是2812和28335,TI自带官网例程中的SysCtrl.c都是使用的外部晶振,而2802x的SysCtrl.c中可以选择外部晶振还是内部晶振,且默认的是10M的内部晶振,这里值得注意。因为晶振选择不对的话SCI的波特率设置就有问题。个人观点,如有不对欢迎指正。 对了,28023主频是50M,TI官网自带SCI例程中在波特率设置的时候写的有点错误,我截了个图,用到的人一看就能明白。
楼主,能不能发份28023的工程文件给我?我不想自己建工程了,想用现成的
麻烦了 邮箱;771296521@qq.com
谢谢 DSPTYJ 发表于 2014-8-20 14:09 static/image/common/back.gif
楼主,能不能发份28023的工程文件给我?我不想自己建工程了,想用现成的
麻烦了 邮箱;
谢谢 ...
好的,晚上回去给你发过去。我的是28027的工程,你再简单改改就行,多多交流,我也才开始用2802x系列,正在看TI的ADC datasheet,头都大了
页:
[1]