共2条
1/1 1 跳转至页
TMS320LF2407,PC 请教:TMS320LF2407与PC机串行通讯的问题。
问
我利用2407的SCI模块与PC机进行串行通讯,DSP外围使用MAX232芯片,上位机程序使用VB编写。问题是:如果先启动PC并打开上位机的通讯程序,然后再给DSP上电运行,这时一切正常,DSP能够正确收到PC的数据;但是,如果先给DSP上电运行,后打开电脑,再运行上位机程序,那么DSP就收不到PC机发来的数据。就是说,跟上电顺序有关系,为什么会出现这个情况?请高手不吝赐教。
下面是DSP的中断子程序:
void SCI_REC()
{
*(rxpoint+n)=SCIRXBUF;
//缓冲区为0字节时,收到该起始字符,则开始接收。
//收到的不是起始字符,总是拒绝接收。
if(*(rxpoint) != 0xAA) //0xAA是起始字符
{
n = 0;
}
else
{
n++;
}
if(n > 10) //协议中每帧不超过10个字符;
{
n = 0;
}
IFR = IFR|0X0010; //清除IFR中相应的中断标志
T2INTcounter=10;
enable(); //开总中断因为一进入中断服务程序总中断就自动关闭
} 答 1: 朋友,能把你的主程序传给我么?朋友,能把你的主程序传给我么?我也在做2407和上位机的通信程序
e-mail:songym525@sina.com 答 2: 应该是程序的问题DSP先上电,在pc上电的时候,一般都会有扰动,这样DSP就会收到错误的字节,如果没有合适的处理,后面帧的接收都会错位,你看看是不是这样 答 3: re:但是我在中断程序中已经设置了
//收到的不是起始字符,总是拒绝接收。
if(*(rxpoint) != 0xAA) //0xAA是起始字符
{
n = 0;
}
else
{
n++;
}
如果开始时有抖动的话,也是拒绝接收这些错误的直接。知道PC机发来起始字符才开始接收并保存的。 答 4: 建议改进调试方法,开个buffer,然后把开机到开始正常通讯的所有数据都保存下来,分析分析再分析:),应该来说,软件的问题应该比较大,因为我也调试过这样的程序。再说,你第一贴,写的是收不到,那你这个拒收的程序处完全可以设置断点来调试的啊:) 答 5: 呵呵我不是这样写的
能收到 PC 过来的数据
但是 DSP 发不去?
请问你的 能发出来么?
就是DSP 向 PC 反数据
的程序 能发个给我么?
lanvst@hotmail.com
void SCI_REC()
{
receive[i++]= * SCIRXBUF;
if(i>9) i=0 return;
IFR = 0X0010; //清除IFR中相应的中断标志
enable(); //开总中断因为一进入中断服务程序总中断就自动关闭
}
接收这么写的 数组 和 I 声明为全局变量 ,内部的声明 接受不全
呵呵
答 6: hi我认为是你电脑的程序有问题,你可以用电脑和电脑连一下试试,用你的程序给别的串口调试软件发数据,看能不能收到. 答 7: 不太明白你的意思,不过我得这样写的,2812的程序接收中断isr
interrupt void ScibRx(void)
{
Uint16 tmp;
PieCtrl.PIEACK.bit.ACK9 = 1; // clear responding acknowledge bit
tmp = ScibRegs.SCIRXBUF.bit.RXDT;
}
发送程序
ScibRegs.SCITXBUF = ACK;
while(0 == ScibRegs.SCICTL2.bit.TXRDY) {
}
答 8: 程序这样写是比较可靠的interrupt void ScibRx(void)
{
Uint16 tmp;
PieCtrl.PIEACK.bit.ACK9 = 1; // clear responding acknowledge bit
tmp = ScibRegs.SCIRXBUF.bit.RXDT;
}
发送程序
{
ScibRegs.SCITXBUF = ACK;
while(0 == ScibRegs.SCICTL2.bit.TXRDY) {
}
=============
怀疑问题处在时序上。注意收发双方的时序。 答 9: rePC机开关机对串口是有影响的,我以前碰到过PC机关机把我设计的目标板搞死的现象,后来证明是我目标板软件设计有bug 答 10: 2407上电或复位时先清几次接收缓冲区 答 11: 一点也读不出信息,还是读出的有误?偶遇到过类似的问题!
不知是从2407一点也读不出信息,还是读出的有误??
如果是读出的数值有误,可能是上电时给buffer中写了一些错误信息造成的,
如果一点信息也读不出来,可以先把2407屏蔽了,让RxD和TxD直接相连,查看一下上电顺序有无影响,缩小故障范围,然后再解决! 答 12: re注意一点:当SCI模块发生接收错误中断时程序也会进入中断服务子程序。
所以,你应该在你程序的开始就判断是否有接受错误标志,如果是就应该复位SCI模块,然后再接收。
下面是DSP的中断子程序:
void SCI_REC()
{
*(rxpoint+n)=SCIRXBUF;
//缓冲区为0字节时,收到该起始字符,则开始接收。
//收到的不是起始字符,总是拒绝接收。
if(*(rxpoint) != 0xAA) //0xAA是起始字符
{
n = 0;
}
else
{
n++;
}
if(n > 10) //协议中每帧不超过10个字符;
{
n = 0;
}
IFR = IFR|0X0010; //清除IFR中相应的中断标志
T2INTcounter=10;
enable(); //开总中断因为一进入中断服务程序总中断就自动关闭
} 答 1: 朋友,能把你的主程序传给我么?朋友,能把你的主程序传给我么?我也在做2407和上位机的通信程序
e-mail:songym525@sina.com 答 2: 应该是程序的问题DSP先上电,在pc上电的时候,一般都会有扰动,这样DSP就会收到错误的字节,如果没有合适的处理,后面帧的接收都会错位,你看看是不是这样 答 3: re:但是我在中断程序中已经设置了
//收到的不是起始字符,总是拒绝接收。
if(*(rxpoint) != 0xAA) //0xAA是起始字符
{
n = 0;
}
else
{
n++;
}
如果开始时有抖动的话,也是拒绝接收这些错误的直接。知道PC机发来起始字符才开始接收并保存的。 答 4: 建议改进调试方法,开个buffer,然后把开机到开始正常通讯的所有数据都保存下来,分析分析再分析:),应该来说,软件的问题应该比较大,因为我也调试过这样的程序。再说,你第一贴,写的是收不到,那你这个拒收的程序处完全可以设置断点来调试的啊:) 答 5: 呵呵我不是这样写的
能收到 PC 过来的数据
但是 DSP 发不去?
请问你的 能发出来么?
就是DSP 向 PC 反数据
的程序 能发个给我么?
lanvst@hotmail.com
void SCI_REC()
{
receive[i++]= * SCIRXBUF;
if(i>9) i=0 return;
IFR = 0X0010; //清除IFR中相应的中断标志
enable(); //开总中断因为一进入中断服务程序总中断就自动关闭
}
接收这么写的 数组 和 I 声明为全局变量 ,内部的声明 接受不全
呵呵
答 6: hi我认为是你电脑的程序有问题,你可以用电脑和电脑连一下试试,用你的程序给别的串口调试软件发数据,看能不能收到. 答 7: 不太明白你的意思,不过我得这样写的,2812的程序接收中断isr
interrupt void ScibRx(void)
{
Uint16 tmp;
PieCtrl.PIEACK.bit.ACK9 = 1; // clear responding acknowledge bit
tmp = ScibRegs.SCIRXBUF.bit.RXDT;
}
发送程序
ScibRegs.SCITXBUF = ACK;
while(0 == ScibRegs.SCICTL2.bit.TXRDY) {
}
答 8: 程序这样写是比较可靠的interrupt void ScibRx(void)
{
Uint16 tmp;
PieCtrl.PIEACK.bit.ACK9 = 1; // clear responding acknowledge bit
tmp = ScibRegs.SCIRXBUF.bit.RXDT;
}
发送程序
{
ScibRegs.SCITXBUF = ACK;
while(0 == ScibRegs.SCICTL2.bit.TXRDY) {
}
=============
怀疑问题处在时序上。注意收发双方的时序。 答 9: rePC机开关机对串口是有影响的,我以前碰到过PC机关机把我设计的目标板搞死的现象,后来证明是我目标板软件设计有bug 答 10: 2407上电或复位时先清几次接收缓冲区 答 11: 一点也读不出信息,还是读出的有误?偶遇到过类似的问题!
不知是从2407一点也读不出信息,还是读出的有误??
如果是读出的数值有误,可能是上电时给buffer中写了一些错误信息造成的,
如果一点信息也读不出来,可以先把2407屏蔽了,让RxD和TxD直接相连,查看一下上电顺序有无影响,缩小故障范围,然后再解决! 答 12: re注意一点:当SCI模块发生接收错误中断时程序也会进入中断服务子程序。
所以,你应该在你程序的开始就判断是否有接受错误标志,如果是就应该复位SCI模块,然后再接收。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动——B站互动赢积分】活动开启啦! | |
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |