Board logo

标题: 有看过SMAC3.1C的Lighting Demo程序的吗 [打印本页]

作者: 微毫度十分个扩大飞机公婆    时间: 2006-12-6 16:04     标题: 有看过SMAC3.1C的Lighting Demo程序的吗

有看过SMAC3.1C的Lighting Demo程序的吗

它的Lighting_demo_controller程序
它的注释说PB0不是可以唤醒MCU吗
但我发现它的PB1也能唤醒MCU???
 

/**************************************************************
  *    Main Loop, repeated now forever
  **************************************************************/
  for(;;)
  {
    u8DeviceLed = 0x05; /* LEDs all off */
    u8LightLed = 0x05;
    LedDrive(u8DeviceLed);
      u8AppStatus = 0;
    /* Enable keyboard irq. Depressing PB0 will cause a wake up */
    KBI1SC_KBIMOD = 0;
    PB0IE =1;
    KBI1SC_KBI1E = 1;
    /* MC13192 Reset mode and MCU STOP3. */
    /* This is the stand-by low power mode. */
    UseMcuClock(); /* MCU internal clock selected since we'll lose our external clock */
     MC13192ContReset(); /* Place the MC13192 into Reset mode */
    //KBDWAIT(); /* Wait for PB1 to be depressed. Note: requires Rev C GB60 board */
    /* PB0 depressed */
    u8Dsn++; /* increment the data sequence number */
    if (u8Dsn == 0xFF) /* 0xFF is reserved and used at startup only for devices */
    {
        u8Dsn = 0x00;
    }
    /* Restart to external clock appx. 10.8mS */
    MC13192Restart(); /* Bring the MC13192 into the desired Idle condition. */
     RadioInit();
      MLMESetChannelRequest(0); /* Set the selected u8Channel. */
    MLMESetMC13192ClockRate(1); /* Back to 8MHz CLKo */
    UseExternalClock(); /* Use external accurate clock */
   
    u16OldTime = MCUReadTmr1();
    u16NewTime = u16OldTime;
    u8ToCount = 0;
并且从这一段程序来看
好象MCU是自动唤醒的???请斑竹指点一下

作者: seuafu2005    时间: 2006-12-6 17:40

从你贴的程序看好像和MCU唤醒没有关系,都是初始化的过程
MCU先采用内部时钟,等13192稳定后采用13192过来的时钟信号
作者: 微毫度十分个扩大飞机公婆    时间: 2006-12-6 21:52

那/* Enable keyboard irq. Depressing PB0 will cause a wake up */
这句话怎么解释呢?谢谢斑竹
作者: seuafu2005    时间: 2006-12-7 09:34

我没有3。1的代码,对照4.0的代码,让MCU进入stop模式的是
KBDWAIT(); 这个语句在你程序中被注释掉了。
这个是让MCU进入stop模式的设置语句

前面的语句放开了KBI中断,如果有按键信息的话,MCU就会被唤醒。一般来说是PB0被按下产生中断,唤醒MCU。置于PB1能唤醒,可能是PB1的中断也被放开了。
作者: 微毫度十分个扩大飞机公婆    时间: 2006-12-7 12:13

谢谢seuafu2005
但是还有一点疑问:
本程序开始放开了KBI中断
在让MC13192 Reset mode and MCU STOP3
接着Bring the MC13192 into the desired Idle condition并且MCU被唤醒
我用的是13192SARD的模块
问题是:1.前面程序并没指明是哪个按键唤醒啊
2.唤醒后,程序从哪儿开始执行 是从u8Dsn++; /* increment the data sequence number */这儿吗??
3.斑竹能不能具体说说KBDWAIT(); 的功能,用不用它有何影响?

作者: seuafu2005    时间: 2006-12-7 13:36

这个过程大致是这样的,KBDWAIT前面的程序放开了KBI键盘中断,同时设定PB0中断使能。因为13192休眠后没有时钟输出,所以MCU转入采用内部振荡时钟,然后执行了KBDWAIT(),你可以点击进去看,这个函数其实就是一句汇编指令stop,让MCU进入stop模式。当PB0被按下后,因为PB0中断使能,KBI中断使能,所以产生键盘中断唤醒MCU。MCU醒来后执行KBI中断函数,然后从MCUstop语句的下一句开始执行,也就是u8Dsn++;
作者: 微毫度十分个扩大飞机公婆    时间: 2006-12-8 10:12

非常感谢!!!




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