首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

SMAC通信调试的时候发现,在等待gu8RTXMODE!=IDLE_MODE

在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编辑过]

让我在月光下许三个愿望: -愿世界上再没有战争的硝烟, -愿世界上的每一个家庭都幸福快乐, -愿我天天都能看见大家甜甜的笑 ^_*
返回列表