打印

按键扫描功能

[复制链接]
478|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
renyaq|  楼主 | 2017-4-22 22:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用CY8C24794的USB模块实现按键扫描功能,调试时发现当主机重启后,板卡与主机就不能通信了
沙发
juventus9554| | 2017-4-22 22:30 | 只看该作者

板卡重新启动

使用特权

评论回复
板凳
renyaq|  楼主 | 2017-4-22 22:31 | 只看该作者
将板卡重新启动后,又能恢复正常

使用特权

评论回复
地板
llljh| | 2017-4-22 22:36 | 只看该作者
代码看看吧

使用特权

评论回复
5
renyaq|  楼主 | 2017-4-22 22:37 | 只看该作者
#include <m8c.h>        
#include "PSoCAPI.h"   

BYTE report[8];
BYTE led;

void main()
{
        M8C_EnableGInt;
        PRT0DR=0xFF;
        PRT2DR=0xFF;
        USB_Start(0,USB_5V_OPERATION);
        while(!USB_bGetConfiguration());
        
        PRT0DR &= 0xFE;
        USB_LoadInEP(1,report,8,USB_NO_TOGGLE);
        USB_EnableOutEP(2);
        report[2]=0x00;
        while(1)
        {
                while(!USB_bGetEPAckState(1)) PRT0DR |= 0x02;
                PRT0DR &= 0xFD;
                if ((PRT2DR & 0x01) == 0x00)
                {
                        report[2]=0x4F;
                        PRT0DR &= 0xFB;
                }
                else if ((PRT2DR & 0x02) == 0x00)
                {
                        report[2]=0x50;
                        PRT0DR &= 0xFB;
                }
                else if ((PRT2DR & 0x04) == 0x00)
                {
                        report[2]=0x52;
                        PRT0DR &= 0xFB;
                }
                else if ((PRT2DR & 0x08) == 0x00)
                {
                        report[2]=0x51;
                        PRT0DR &= 0xFB;
                }
                else if ((PRT2DR & 0x10) == 0x00)
                {
                        report[0]=0x10;
                        PRT0DR &= 0xFB;
                }
                else if ((PRT2DR & 0x20) == 0x00)
                {
                        report[0]=0x40;
                        PRT0DR &= 0xFB;
                }
                else if ((PRT2DR & 0x80) == 0x00)
                {
                        report[2]=0x45;
                        PRT0DR &= 0xFB;
                }
                else
                {
                        report[0]=0x00;
                        report[2]=0x00;
                        PRT0DR |= 0x04;
                }
               
                USB_LoadInEP(1,report,8,USB_TOGGLE);
               
                if (USB_bGetEPAckState(2))
                {        
                        USB_bReadOutEP(2,&led,1);
                        if ((led & 0x01)== 0x01 ) PRT0DR &= 0xF7;
                        else PRT0DR |= 0x08;
                        USB_EnableOutEP(2);
                }

        }

使用特权

评论回复
6
dingy| | 2017-4-22 22:39 | 只看该作者
重启主机,主机是否有检测USB设备的功能或者你的USB设备是否能检测主机重启的功能。

使用特权

评论回复
7
renyaq|  楼主 | 2017-4-22 22:41 | 只看该作者
为啥啊

使用特权

评论回复
8
supernan| | 2017-4-22 22:42 | 只看该作者
因为主机重启对于USB来说,需要一个重新枚举的过程。

使用特权

评论回复
9
renyaq|  楼主 | 2017-4-22 22:44 | 只看该作者
"重启主机,主机是否有检测USB设备的功能"这个功能应该是有的,连接其他设备重启后都可以识别,换成自己做的板卡就不识别了。

使用特权

评论回复
10
renyaq|  楼主 | 2017-4-22 22:46 | 只看该作者
“主机重启对于USB来说,需要一个重新枚举的过程”或许问题出在里,主机重启的过程中,外接的设备没有断电,所以程序一直执行while循环,没有再次枚举对吗?弱弱的问一句,该怎么解决这个问题呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

700

主题

10138

帖子

4

粉丝