B设备插入后必须复位该设备,
//* 有些USB设备也要求在插入后必须先复位才能工作
//******************************************************
void Reset_Device( )
{
Set_USB_Mode( 7 ); //复位USB设备,CH376向USB信号线的D+和D-输出低电平
mDelaymS(10);
Set_USB_Mode( 6 ); //结束复位,将CH376设置成主机模式
while ( wait_interrupt()!=USB_INT_CONNECT ); //等待复位之后的设备端再次连接上来
}
//*****************************************************
//*NAME: set_addr( UINT8 addr )
//*FUCTION: 设置USB设备地址,并且设置USB主机端要操作的USB设备地址
//*输入参数: 地址值(1~127)
//* 输出参数:操作状态
//*说明:
//******************************************************
UINT8 set_addr( UINT8 addr ) {
UINT8 status;
CH376_WR_CMD_PORT( CMD_SET_ADDRESS );
CH376_WR_DAT_PORT( addr );
status=wait_interrupt(); //等待CH376操作完成
if ( status==USB_INT_SUCCESS ) { //操作成功
CH376_WR_CMD_PORT( CMD_SET_USB_ADDR ); //设置USB主机端的USB地址
CH376_WR_DAT_PORT( addr ); //当目标USB设备的地址成功修改后,应该同步修改主机端的USB地址
}
return( status );
}
//**********************************************
//*NAME: main( void )
//*FUCTION: 通过CH376操作鼠标键盘以及复合HID设备的数据
//*输入参数:无
//* 输出参数:无
//*说明:只适用普通的USB键盘,支持复合设备
//* 键盘,不支持带有HUB接口的USB键盘
//**********************************************
void main( void )
{
UINT8 i,s;
mDelay50mS( ); //CH376上电之后需要延时40ms左右
StdioInit( );
printf("start \n");
//做测试命令,检测单片机和CH376硬件连接,以及读写时序是否正确
CH376_WR_CMD_PORT( 0x06 );
CH376_WR_DAT_PORT( 0x55 );
s = CH376_RD_DAT_PORT( );
printf(" %02x \n",(UINT16)s);
Set_USB_Mode( 6 ); //设置USB主机模式, 如果设备端是CH37X, 那么5和6均可
set_freq( ); //使376进入低速模式
while(1)
{
printf(" \n wait usb device : \n");
while ( wait_interrupt()!=USB_INT_CONNECT );
mDelaymS(50);
Reset_Device();//复位usb设备
mDelaymS(50);
set_freq( ); //使376进入低速模式
mDelaymS(20);
//获取设备描述符
if(Get_Dev_Descr()==1)
{
for(i=0;i!=data_buf[0];i++)
printf("%02x ",(unsigned int)data_buf[i]);
printf("\n");
}
else printf("\n get device descr failed \n");
//设置地址
set_addr(5);
/
/获取配置描述符
if( Get_Cfg_Descr( SetupGetCfgDescr ) == 1)
{
for(i=0;i!=data_buf[0];i++)
printf("%02x ",(unsigned int)data_buf[i]);
pr
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新人文社科CH376主机控制键盘鼠标程序(12)全文阅读和word下载服务。
相关推荐: