我参考范例,
1 初始化结束后CH372进入睡眠状态; 2 唤醒中断中发送挂起检测命令; 3 挂起中断中再发送睡眠命令;
问题: 初始化后执行睡眠命令后,CH372要自行进入唤醒状态一次,不存在文档中描述的唤醒条件【一是检测到USB 总线有信号;二是单片机向CH372 芯片写入新的命令】,之后的唤醒睡眠事件与实际操作一致。
我参考范例,
1 初始化结束后CH372进入睡眠状态; 2 唤醒中断中发送挂起检测命令; 3 挂起中断中再发送睡眠命令;
问题: 初始化后执行睡眠命令后,CH372要自行进入唤醒状态一次,不存在文档中描述的唤醒条件【一是检测到USB 总线有信号;二是单片机向CH372 芯片写入新的命令】,之后的唤醒睡眠事件与实际操作一致。
一旦执行睡眠命令后,如果CH372检测到USB总线上没有有信号,就马上睡眠。不知道您想表达的意思是什么? 这两个条件肯定是成立的。如果不成立,详细的说明一下你是怎么测试的,现象是什么
大部分内容都是照搬了贵公司MCU_IF.C文件内容 ch372_init(){ //最后一行 CH375_WR_CM_PORT(CMD_ENTER_SLEEP); }
ch372_interrupt(){ //其他中断略 case USB_INT_USB_SUSPEND: CH375_WR_CM_PORT(CM_UNLOCK_USB); CH375_WR_CM_PORT( CM_CHK_SUSPEND); CH375_WR_DAT_PORT(0X10); CH375_WR_DAT_PORT(0X00); CH375_WR_CM_PORT(CMD_ENTER_SLEEP); display("USB 断开信息"); break; case USB_INT_WAKE_UP: CH375_WR_CM_PORT(CM_UNLOCK_USB); CH375_WR_CM_PORT( CM_CHK_SUSPEND); CH375_WR_DAT_PORT(0X10); CH375_WR_DAT_PORT(0X04); display("USB 已连接信息"); break; default: CH375_WR_CM_PORT(CM_UNLOCK_USB); break; } 现象:初始化完成即产生一次USB_INT_WAKE_UP中断,之后没有误触发现象。
这个要进行设置才可以,按照下面的方法来做: /* 设置USB工作模式, 必要操作 */ CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); CH375_WR_DAT_PORT( 2 ); /* 设置为使用内置固件的USB设备方式 */ for ( i=100; i!=0; i-- ) if ( CH375_RD_DAT_PORT( ) == CMD_RET_SUCCESS ) break; /* 等待操作成功,通常需要等待10uS-20uS */ /* if ( i == 0 ) { CH372/CH375芯片内部或者物理连接存在硬件错误 }; */
/* 设置检查USB总线挂起状态,便于在USB总线挂起时使CH375也进入低功耗状态 */ CH375_WR_CMD_PORT( CMD_CHK_SUSPEND ); /* 设置检查USB总线挂起状态的方式 */ CH375_WR_DAT_PORT( 0x10 ); CH375_WR_DAT_PORT( 0x04 ); /* 以50mS为间隔检查USB挂起 */
初始化过程就设置为“/* 以50mS为间隔检查USB挂起 */”,那开机后岂不是要产生USB_INT_USB_SUSPEND中断?我认为还是在 USB_INT_WAKE_UP中断中设置更加合理。只是初始化完成即产生一次USB_INT_WAKE_UP中断,不知道哪里出了问题。