Board logo

标题: 一个smac wireless Uart 的问题 [打印本页]

作者: sohot2007    时间: 2007-4-11 09:52     标题: 一个smac wireless Uart 的问题

小弟基于1321SRB,利用smac写了一个简单的wireless Uart的程序。程序的基本思路如下:
一共两个节点,其中一个发数据包(数据包长度在10个字节以内),发完数据包后等待应答信息,如果在一定的时间内(10ms)没有等到应答信息,就重发数据包,重发2次后如果还没有等到应答信息就进入发送失败状态。另外一个收到数据包后回复一个应答信息(长度在10个字节以内),然后进入接收状态。
问题是:每隔10s发一次数据包,有差不多15%的几率进入发送失败状态,有15%的几率会出现重发现象,通过一次或两次重发成功收到应答信号,有70%的几率能够一次性收到应到信号。
两个节点相隔不到一米,采用最大功率发射,不知道是我软件上的问题还是正常的无线通信丢包现象。请高手们指点一下。万分感谢!
作者: seuafu2005    时间: 2007-4-11 12:01

你先利用SMAC程序里面的range test看看你的RF性能如何,如果性能可以的话就是你软件的问题了。
作者: sohot2007    时间: 2007-4-11 16:15

把定时去掉之后,就不会出现重发的情况了,也就是说一切正常。我的定时程序是
......
delay10ms(1); ////////后来用LOW_POWER_WHILE();替换该句指令就一切正常了
if (gi8AppStatus != IDLE_STATE)
{
gi8AppStatus = TIMEOUT_STATE;
}
......

void delay10ms(UINT16 count)
{
UINT16 u16Match;
TPM1SC |= 0x40; //////////////////////////interrupt on;
u16Match = gu16msTimer + count;
while (gu16msTimer != u16Match);
LOW_POWER_WHILE();
TPM1SC &= ~0x40;
}
void TimerInit()
{
TPM1MOD = 625; /* Set the timer for a 26ms timer rate (1/8E6) * 128 * 625 = 10msec */
/* Timer rate = (1/BUSCLOCK) * TIMER_PRESCALER * TIMER MOD */
TPM1SC = 0x0F; /* Timer divide by 128. (16uS timebase for 8MHz bus clock). interrupt on*/

}
请高手看看错出在哪里
作者: seuafu2005    时间: 2007-4-11 17:19

delay10ms这个函数有点问题
gu16msTimer是在中断里面改变值的吧?初始值多少,中断里面进行的是什么操作?
u16Match = gu16msTimer + count;这个语句感觉应该是乘,不是加?

LOW_POWER_WHILE();是wait,靠中断唤醒,定时器中断?

作者: sohot2007    时间: 2007-4-13 09:35

用LOW_POWER_WHILE();等待中断不对吗?我看wireless Uart中都是通过LOW_POWER_WHILE();等待RF接收的数据的,也是等的中断呀?中断服务程序:
interrupt void IRQTimer1(void) {

gu16msTimer++;//gu16msTimer是全局变量

TPM1SC &= ~0x80; /* clear the interrupt */
}
请版主指点一下,谢谢!
作者: seuafu2005    时间: 2007-4-13 10:15

定时器的中断标志位清零应该先读一下TPM1SC,然后再对标志位写零
TPM1SC &= ~0x80;这样写,编译器有可能只有对标志位写零的步骤
作者: knightccc    时间: 2007-5-24 21:06

楼主能否将你的程序发下我邮箱,knightccc@126.com参考下呢?
作者: choujay    时间: 2007-5-25 09:21

我正遇到类似问题,搂住能否把工程贴出来,共同讨论!
作者: liwei727    时间: 2007-6-2 09:00

贴出来大家一起讨论




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0