請(qǐng)求SCM幫忙

SCM老師:你好! 實(shí)在不好意思,我按你的指導(dǎo)折騰了很常時(shí)間,就是編譯通過不了,有很多錯(cuò)誤報(bào)告,可能是環(huán)境沒有設(shè)置好,但我又搞不好,這里我再一次冒昧向你提出求助:你能將CH375HST.ZIP中的CH375PRT.C文件幫我編譯一下,生成一個(gè)匯編文件嗎?本人萬分感謝! 我的信箱:個(gè)人信息保護(hù),已隱藏 謝謝!


熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

已處理,請(qǐng)查收郵件


郵件已收到,謝謝!??!


本人在編譯的時(shí)候也出現(xiàn)有4個(gè)Warning.請(qǐng)問是什么原因呢?編譯結(jié)果如下 MedWin v2.39 Translating F:\WEbook\ZPUSB\ch375_host_int_para.c......pass ! MedWin V2.39 Linking...... BL51 BANKED LINKER/LOCATER V4.13 - SN: Eval Version COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2001 ch375_host_int_para.obj TO CH375JP.Omf RAMSIZE(256) *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_SET_RETRY?CH375_HOST_INT_PARA *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?SET_CONFIG_EX?CH375_HOST_INT_PARA *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS SEGMENT: ?PR?_GET_DESCR?CH375_HOST_INT_PARA *** WARNING L15: MULTIPLE CALL TO SEGMENT SEGMENT: ?PR?_RD_USB_DATA?CH375_HOST_INT_PARA CALLER1: ?PR?INTT0?CH375_HOST_INT_PARA CALLER2: ?C_C51STARTUP LINK/LOCATE RUN COMPLETE. 4 WARNING(S), 0 ERROR(S) Write Intel HEX format file "F:\WEbook\CH375JP.hex" successfully. Initial Emulator...seccessfully. Loading program "CH375JP.Omf"... ............................................................ .......... Set address breakpoint at 037Bh ************* T o t a l ************* Code number: 3358 bytes. Minimal address: 0000H. Maximal address: 0D1DH. ************************************* Loading program Completed. 引用--藍(lán)仙的話ch375_host_int_para.c "文件幫我編譯一下,生成一個(gè)匯編文件嗎?本人萬分感謝!"

我的郵箱個(gè)人信息保護(hù),已隱藏


這個(gè)是沒問題的,這些是你沒調(diào)用的函數(shù)。


還有一個(gè)問題要請(qǐng)教,在仿真器上程序運(yùn)行到" #ifdef TEST_LOW_SPEED set_freq( ); //使375B進(jìn)入低速模式 #endif while(1) { while ( wait_interrupt()!=USB_INT_CONNECT ); /* 等待設(shè)備端連接上來 */

"時(shí),調(diào)用下面的程序,運(yùn)行到"while (CH375_INT_WIRE);" 時(shí)INT#中斷引腳一直為高電平這是什么原因呢? 我的電路是按CH375中文手冊(cè)(1)中的電路圖來做的,在TEST的程序上跑過,沒問題的.

unsigned char wait_interrupt() { /* 主機(jī)端等待操作完成, 返回操作狀態(tài) */ while( CH375_INT_WIRE ); /* 查詢等待CH375操作完成中斷(INT#低電平) */ CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 產(chǎn)生操作完成中斷, 獲取中斷狀態(tài) */ return( CH375_RD_DAT_PORT() ); }


set_freq( )之前已經(jīng)檢測(cè)到設(shè)備連接,如果設(shè)備沒有斷開過,那么在wait_interrupt中不會(huì)再檢測(cè)到設(shè)備連接中斷,while ( wait_interrupt()!=USB_INT_CONNECT )就是一個(gè)死循環(huán) 。 你把程序貼出來看看


/**************************************** ** Copyright (C) W.ch 1999-2004 ** ** Web: http://www.winchiphead.com ** **************************************** ** USB 1.1 Host Examples for CH375 ** ** KC7.0@MCS-51 ** **************************************** */ /* 用CH375操作HID設(shè)備,比如鍵盤,鼠標(biāo)*/

#include #include #include "CH375INC.H" #define TEST_LOW_SPEED 1 unsigned char volatile xdata CH375_CMD_PORT _at_ 0xBDF1; /* CH375命令端口的I/O地址 */ unsigned char volatile xdata CH375_DAT_PORT _at_ 0xBCF0; /* CH375數(shù)據(jù)端口的I/O地址 */ sbit CH375_INT_WIRE = 0xB0^2; /* P3.2, INT0, 連接CH375的INT#引腳,用于查詢中斷狀態(tài) */ sbit P1_0=P1^0; sbit P1_2=P1^2; #define TRUE 1 #define FALSE 0 unsigned char endp_int; //中斷端點(diǎn)號(hào) unsigned char num_interfaces; //接口數(shù) unsigned char config_value; //配置值 unsigned char report_descr_len=0; //REPORT描述符長度 bit flag_config_2=0; //第二次獲取描述符標(biāo)志位 bit flag_interface_2=0; //多個(gè)接口標(biāo)志位 unsigned char endp6_mode=0x80, endp7_mode=0x80; //同步標(biāo)志位初值 unsigned char status=0xff; //全局狀態(tài) unsigned char idata data_buf[96]; //描述符緩沖區(qū)可以適當(dāng)減小 union _REQUEST //請(qǐng)求包結(jié)構(gòu) { struct { unsigned char bmRequestType; unsigned char bRequest; unsigned int wValue; unsigned int wIndex; unsigned int wLength; } Req; unsigned char Req_buf[8]; } Request; unsigned char report_cou=0; //REPORT描述符長度計(jì)數(shù) bit flag_output=0; //串口輸出標(biāo)志位 unsigned char xdata data_in[1000]; //串口輸出緩沖區(qū) void delay2us( ) { unsigned char i; #ifdef TEST_LOW_SPEED for ( i = 20; i != 0; i -- ); #else for ( i = 2; i != 0; i -- ); #endif } void delay1us( ) { unsigned char i; #ifdef TEST_LOW_SPEED for ( i = 10; i != 0; i -- ); #else for ( i = 1; i != 0; i -- ); #endif } void delayms(unsigned char delay) { unsigned char i; do{ for(i=0;i!=250;i++){;} for(i=0;i!=250;i++){;} for(i=0;i!=150;i++){;} } while(--delay); } void mInitSTDIO( ) { SCON = 0x50; PCON = 0x80; TMOD = 0x21; TH1 = 0xf3; /* 22.1184MHz晶振, 115200bps */ TR1 = 1; TI = 1; EX0=1; EA=0; }

void CH375_WR_CMD_PORT( unsigned char cmd ) { /* 向CH375的命令端口寫入命令,周期不小于4uS,如果單片機(jī)較快則延時(shí) */ delay2us(); CH375_CMD_PORT=cmd; delay2us(); }

void CH375_WR_DAT_PORT( unsigned char dat ) { /* 向CH375的數(shù)據(jù)端口寫入數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) */ CH375_DAT_PORT=dat; delay1us(); /* 因?yàn)镸CS51單片機(jī)較慢所以實(shí)際上無需延時(shí) */ }

unsigned char CH375_RD_DAT_PORT() { /* 從CH375的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) */ delay1us(); /* 因?yàn)镸CS51單片機(jī)較慢所以實(shí)際上無需延時(shí) */ return( CH375_DAT_PORT ); }

unsigned char set_usb_mode( unsigned char mode ) { /* 設(shè)置CH37X的工作模式 */ unsigned char i; CH375_WR_CMD_PORT( CMD_SET_USB_MODE ); CH375_WR_DAT_PORT( mode ); endp6_mode=endp7_mode=0x80; /* 主機(jī)端復(fù)位USB數(shù)據(jù)同步標(biāo)志 */ for( i=0; i!=100; i++ ) { /* 等待設(shè)置模式操作完成,不超過30uS */ if ( CH375_RD_DAT_PORT()==CMD_RET_SUCCESS ) return( TRUE ); /* 成功 */ } return( FALSE ); /* CH375出錯(cuò),例如芯片型號(hào)錯(cuò)或者處于串口方式或者不支持 */ }

void set_freq(void) { CH375_WR_CMD_PORT(0x0b); /* 切換使375B進(jìn)入低速模式 */ CH375_WR_DAT_PORT(0x17); CH375_WR_DAT_PORT(0xd8); }

/* 數(shù)據(jù)同步 */ /* USB的數(shù)據(jù)同步通過切換DATA0和DATA1實(shí)現(xiàn): 在設(shè)備端, CH372/CH375可以自動(dòng)切換; 在主機(jī)端, 必須由SET_ENDP6和SET_ENDP7命令控制CH375切換DATA0與DATA1. 主機(jī)端的程序處理方法是為SET_ENDP6和SET_ENDP7分別提供一個(gè)全局變量, 初始值均為80H, 每執(zhí)行一次成功事務(wù)后將位6取反, 每執(zhí)行一次失敗事務(wù)后將其復(fù)位為80H. */

void toggle_recv() { /* 主機(jī)接收成功后,切換DATA0和DATA1實(shí)現(xiàn)數(shù)據(jù)同步 */ CH375_WR_CMD_PORT( CMD_SET_ENDP6 ); CH375_WR_DAT_PORT( endp6_mode ); endp6_mode^=0x40; delay2us(); }

void toggle_send() { /* 主機(jī)發(fā)送成功后,切換DATA0和DATA1實(shí)現(xiàn)數(shù)據(jù)同步 */ CH375_WR_CMD_PORT( CMD_SET_ENDP7 ); CH375_WR_DAT_PORT( endp7_mode ); endp7_mode^=0x40; delay2us(); }

//void clr_stall6() { /* 主機(jī)接收失敗后,復(fù)位設(shè)備端的數(shù)據(jù)同步到DATA0 */ // CH375_WR_CMD_PORT( CMD_CLR_STALL ); // CH375_WR_DAT_PORT( 2 | 0x80 ); /* 如果設(shè)備端不是CH37X芯片,那么需要修改端點(diǎn)號(hào) */ // endp6_mode=0x80; // status=0xff; //}

//void clr_stall7() { /* 主機(jī)發(fā)送失敗后,復(fù)位設(shè)備端的數(shù)據(jù)同步到DATA0 */ // CH375_WR_CMD_PORT( CMD_CLR_STALL ); // CH375_WR_DAT_PORT( 2 ); /* 如果設(shè)備端不是CH37X芯片,那么需要修改端點(diǎn)號(hào) */ // endp7_mode=0x80; // status=0xff; //}

unsigned char rd_usb_data( unsigned char *buf ) { /* 從CH37X讀出數(shù)據(jù)塊 */ unsigned char i, len; CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); /* 從CH375的端點(diǎn)緩沖區(qū)讀取接收到的數(shù)據(jù) */ len=CH375_RD_DAT_PORT(); /* 后續(xù)數(shù)據(jù)長度 */ for ( i=0; i!=len; i++ ) *buf++=CH375_RD_DAT_PORT(); return( len ); }

void wr_usb_data( unsigned char len, unsigned char *buf ) { /* 向CH37X寫入數(shù)據(jù)塊 */ CH375_WR_CMD_PORT( CMD_WR_USB_DATA7 ); /* 向CH375的端點(diǎn)緩沖區(qū)寫入準(zhǔn)備發(fā)送的數(shù)據(jù) */ CH375_WR_DAT_PORT( len ); /* 后續(xù)數(shù)據(jù)長度, len不能大于64 */ while( len-- ) CH375_WR_DAT_PORT( *buf++ ); }

void issue_token( unsigned char endp_and_pid ) { /* 執(zhí)行USB事務(wù) */ CH375_WR_CMD_PORT( CMD_ISSUE_TOKEN ); CH375_WR_DAT_PORT( endp_and_pid ); /* 高4位目的端點(diǎn)號(hào), 低4位令牌PID */ status=0xff; }

void intt0() interrupt 0 { unsigned char len_temp,i; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 產(chǎn)生操作完成中斷, 獲取中斷狀態(tài) */ status=CH375_RD_DAT_PORT(); if(status!=USB_INT_SUCCESS) //&&((status&0xf0)==0x20)) { CH375_WR_CMD_PORT( CMD_CLR_STALL ); CH375_WR_DAT_PORT(1); /* 如果設(shè)備端不是CH37X芯片,那么需要修改端點(diǎn)號(hào) */ endp6_mode=0x80; endp7_mode=0x80; toggle_recv(); issue_token(( endp_int << 4 ) | DEF_USB_PID_IN); //發(fā)送從中斷端點(diǎn)讀數(shù)據(jù)的令牌 } else { len_temp=rd_usb_data(data_buf); //鍵盤中斷端點(diǎn)數(shù)據(jù)長度一般為8字節(jié),鼠標(biāo)為4字節(jié) for(i=0;i!=len_temp;i++)data_in[i]=data_buf[i]; flag_output=1; toggle_recv(); issue_token(( endp_int << 4 ) | DEF_USB_PID_IN); //發(fā)送從中斷端點(diǎn)讀數(shù)據(jù)的令牌 } } unsigned char wait_interrupt() { /* 主機(jī)端等待操作完成, 返回操作狀態(tài) */ while( CH375_INT_WIRE ); /* 查詢等待CH375操作完成中斷(INT#低電平) */ CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 產(chǎn)生操作完成中斷, 獲取中斷狀態(tài) */ return( CH375_RD_DAT_PORT() ); }

void set_retry(unsigned char num) { CH375_WR_CMD_PORT( CMD_SET_RETRY); CH375_WR_DAT_PORT( 0x25); CH375_WR_DAT_PORT( num); delay2us(); }

unsigned char set_config_ex() { Request.Req.bmRequestType=0x00; Request.Req.bRequest=0x09; config_value=config_value; Request.Req.wValue=0x0000|((unsigned int)config_value<<8); Request.Req.wIndex=0x0000; Request.Req.wLength=0x0000; endp7_mode=0x80; toggle_send(); wr_usb_data(8,Request.Req_buf); /* SETUP數(shù)據(jù)總是8字節(jié) */ issue_token(( 0 << 4 ) | DEF_USB_PID_SETUP); status=wait_interrupt(); if(status==USB_INT_SUCCESS) /* SETUP階段操作成功 */ { endp6_mode=0xc0; toggle_recv(); issue_token(( 0 << 4 ) | DEF_USB_PID_IN); status=wait_interrupt(); if(status==USB_INT_SUCCESS) /* 狀態(tài)階段操作成功 */ { if(rd_usb_data(data_buf)!=0) return(0); } else return(0); } else return(0); return(1) ; } unsigned char set_idle() { Request.Req.bmRequestType=0x21; Request.Req.bRequest=0x0a; Request.Req.wValue=0x0000; Request.Req.wIndex=0x0000; if(flag_interface_2==1) Request.Req.wIndex=0x0100; Request.Req.wLength=0x0000; endp7_mode=0x80; toggle_send(); wr_usb_data(8,Request.Req_buf); /* SETUP數(shù)據(jù)總是8字節(jié) */ issue_token(( 0 << 4 ) | DEF_USB_PID_SETUP); status=wait_interrupt(); if(status==USB_INT_SUCCESS) /* SETUP階段操作成功 */ { endp6_mode=0xc0; toggle_recv(); issue_token(( 0 << 4 ) | DEF_USB_PID_IN );status=wait_interrupt(); if(status==USB


網(wǎng)站上的程序都是測(cè)試過的,應(yīng)該不會(huì)有什么問題。 你檢查一下375的硬件接口與程序中的定義是否一致:命令口,數(shù)據(jù)口,中斷線


我是用CH372芯片的,命令口,數(shù)據(jù)口,中斷線,沒有接錯(cuò). 現(xiàn)在發(fā)現(xiàn)CH372-CS引腳只有在寫命令、寫數(shù)據(jù)、或讀數(shù)據(jù)的時(shí)候才有低電平。讀寫過了之后就為高電平了,那說明CH372沒有片選信號(hào),為什么程序要"while( CH375_INT_WIRE );/* 查詢等待CH375操作完成中斷(INT#低電平) */"呢?


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频