SMAC通信调试的时候发现,在等待gu8RTXMODE!=IDLE_MODE
- UID
- 104631
- 性别
- 男
|
不会数据没收完就跳出
芯片回到idle状态下会产生一个中断,可以在driver.c中看到中断服务子程序,这里面改变了gu8RTXMODE的状态 |
|
|
|
|
|
- UID
- 343903
- 性别
- 男
|
SMAC通信调试的时候发现,在等待gu8RTXMODE!=IDLE_MODE
UINT8 PDDataRequest(tTxPacket *psPacket) { if (gu8RTxMode == IDLE_MODE) { RAMDrvWriteTx(psPacket); /* Load the data into packet RAM */ PLMESetTrxStateRequest(TX_MODE); /* transmit it */
/* Wait for the state to return to idle. (finish transmitting) */ while (gu8RTxMode != IDLE_MODE)[/color ]{ MCU_LOW_POWER_WHILE(); } return SUCCESS; } else { return RX_ON; } } 请问gu8RTXMODE在什么条件下跳出?是自动的吗?这个问题会是数据没发完造成的吗?
[此贴子已经被作者于2007-5-28 18:13:18编辑过] |
|
|
|
|
|
- UID
- 343903
- 性别
- 男
|
我的程序似乎一直停在这里。请问大虾说的,如果数据没被接收的话,是否一直循环等待?
while (gu8RTxMode != IDLE_MODE0){
MCU_LOW_POWER_WHILE();
}
|
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
收发器应该是这样工作的,收发之间不能直接转换,都是经过idle这个状态。收完就idle,发完也是idle。循环等待的话就是MCU没有接收到idle的信号。不知道你用的是那个smac的例子程序,在哪个平台上面?
如果freescale提供的程序没有改动过的话,在fsl对应的平台上运行应该没有任何问题的。 |
|
|
|
|
|
- UID
- 343903
- 性别
- 男
|
我的平台13213-SRB,可是由于FSL的smac4.1c的例程有限制不能编译通过,所以自己在编写程序。用的是wireless uart 程序修改的,工程已发给版主了。麻烦版主帮助看下 |
|
|
|
|
|
- UID
- 339451
- 性别
- 男
|
在drivers.c这个文件中,有一个 interrupt void IRQIsr(void) 中断函数,这个函数处理很多事情,比如发送结束、接收结束的时候,射频模块都会给MCU中断信号,然后进入这个函数。
这个函数里有这么一段代码,正是这段代码,使得射频模块发送完成后,将 gu8RTxMode 改回了 IDLE_MODE.
if ((gu8RTxMode == IDLE_MODE) || ((u16StatusContent & CCA_IRQ_MASK) != 0) || \ ((u16StatusContent & TX_IRQ_MASK) != 0)) { // 发送完毕后,就会满足 (u16StatusContent & TX_IRQ_MASK) != 0 这个条件 /* If in idle mode already or if CCA or TX is done, just return. */ RTXENDeAssert(); /* Forces the MC13192 to idle. */
/* Check for Pulse TX Mode for PRBS9 Test mode sequence */ if (gu8RTxMode == PULSE_TX_MODE) { u16StatusContent = (SPIDrvRead(MODE_ADDR) & 0xFF7F); /* Read the MC13192 trx register. Timer trigger off. */ SPIDrvWrite(MODE_ADDR, u16StatusContent); /* Re-write the trx register. */ RTXENAssert(); /* Re-start the sequence. */
#if defined (PA) MC13192_PA_CTRL = PA_OFF; //Turn off the PA when TX is complete #endif return; }
gu8RTxMode = IDLE_MODE; // 在这里,gu8RTxMode 被恢复成了 IDLE_MODE return; }
你发送数据进行调试的时候,看看程序有没有进到中断里呢?如果没有进入中断,那可能是MCU的中断设置有问题——比如是否允许了中断?中断向量表是否设置正确?(中断向量表在 vectortable.c 这个文件里) [此贴子已经被作者于2007-5-31 16:15:31编辑过]
[此贴子已经被作者于2007-5-31 16:18:27编辑过] |
让我在月光下许三个愿望:
-愿世界上再没有战争的硝烟,
-愿世界上的每一个家庭都幸福快乐,
-愿我天天都能看见大家甜甜的笑 ^_* |
|
|
|
|
|
- UID
- 343903
- 性别
- 男
|
while (gu8RTxMode != IDLE_MODE)时,跳转到一块 FFF8 STX ,X FFF9 STX ,X FFFA STX ,X FFFB STX ,X FFFC STX ,X FFFD STX ,X FFFE BEST 4,0xA7
我的程序到这里好像跳到这里,就一直死循环了。
大虾,怎么看有没进入中断?中断这块不怎么清楚,请指点下?
vectortable.c也没有加进去而且中断向量我不太明白,请问我应该如何对MCU进行中断设置。
[此贴子已经被作者于2007-6-1 20:07:58编辑过] |
|
|
|
|
|