CH375 作為設(shè)備,向計算機發(fā)送數(shù)據(jù),并口,出現(xiàn)問題。

我采用并口控制CH375,能夠正常的配置完成,使用DEBUG372.EXE測試,DEBUG372.EXE老是卡死,能夠找到硬件。 附代碼: /****************************************************/ //函數(shù)描述: 短延遲 //寫入?yún)?shù): Delaynum,延遲時間:不詳 //返回參數(shù): 無 //描述: 延時 /****************************************************/ void SDelay(unsigned int DelayNum) { while(DelayNum--); } /****************************************************/ //函數(shù)描述:CH375處于無效狀態(tài) //寫入?yún)?shù):無 //返回參數(shù):無 //描述: 讀、寫無效 /****************************************************/ void CH375Disable() { //add EALLOW; //運行寫EALLOW保護寄存器 GpioMuxRegs.GPBDIR.all=0xFFFF; //GPIOB口低8位設(shè)置為輸出(1為輸出,0為輸入) EDIS;

CH375_CS=0; CH375_Read=1; CH375_Write=1; CH375_A0=0; } /****************************************************/ //函數(shù)描述:CH375初始化 //寫入?yún)?shù):無 //返回參數(shù):無 //描述: 初始化順序:硬件復(fù)位,自測試(循環(huán)),寫模式,開中斷 /****************************************************/ void CH375Ini() { unsigned char i; CH375Disable(); //CH375無效 CH375_WriteCmd(CMD_RESET_ALL) ; //寫入復(fù)位命令 for(i=0;i<150;i++) { SDelay(4500); //延時>30MS } while(!CH375SelfTest()) //測試CH375 { } CH375Write_Mode(USBDevice); //設(shè)置USB驅(qū)動模式,為設(shè)備模式(0x02)

} /****************************************************/ //函數(shù)描述:CH375自動檢測 //寫入?yún)?shù):無 //返回參數(shù):無 //描述: // 測試數(shù)據(jù): 0XAA, // 返回數(shù)值:0 自測試失敗 // 1 自測試成功 /****************************************************/ unsigned char CH375SelfTest() { unsigned char DataTest; CH375_WriteCmd(CMD_CHECK_EXIST); //寫入測試命令 SDelay(200); //延時 CH375_WriteData(0xAA); //寫入測試數(shù)據(jù) DataTest=CH375_ReadData(); //讀出測試返回數(shù)據(jù) if(DataTest == 0x55) //判斷測試返回數(shù)據(jù), { return 1; } else { return 0; } } /****************************************************/ //函數(shù)描述:CH375寫命令函數(shù) //寫入?yún)?shù):命令控制字 //返回參數(shù):無 //描述: /****************************************************/ void CH375_WriteCmd(unsigned char CH375Command) { unsigned int CH375DATA=0xFF00; EALLOW; //運行寫EALLOW保護寄存器 GpioMuxRegs.GPBDIR.all=0xFFFF; //GPIOB口低8位設(shè)置為輸出 EDIS; GpioDataRegs.GPBDAT.all=0xFFFF; //對GPIOB賦初始值 CH375DATA|=CH375Command; CH375_CS=0; CH375_A0 = 1; //A0為1的時候,寫入命令,A0為0的時候,寫入數(shù)據(jù) CH375_Read=1;

GpioDataRegs.GPBDAT.all=(GpioDataRegs.GPBDAT.all & CH375DATA);

SDelay(200); CH375_Write=0; SDelay(200); CH375_Write=1; CH375Disable(); } /****************************************************/ //函數(shù)描述:CH375寫數(shù)據(jù) //寫入?yún)?shù):數(shù)據(jù) //返回參數(shù):無 //描述: // 2009.07.27 : V2.0: 從子程序中去除CH375Disable(),在連續(xù)寫數(shù)據(jù)過程中不能將CS變高,移到寫完整個數(shù)據(jù)塊后在Disable /****************************************************/ void CH375_WriteData(unsigned char CH375Data) { unsigned char CH375Data_Temp = 0xFF00; EALLOW; //運行寫EALLOW保護寄存器 GpioMuxRegs.GPBDIR.all=0xFFFF; //GPIOB口低8位設(shè)置為輸出 (1為輸出,0為輸入) EDIS; GpioDataRegs.GPBDAT.all=0xFFFF; //對GPIOB賦初始值 CH375Data_Temp|=CH375Data; CH375_CS=0; CH375_A0 = 0; //A0為1的時候,寫入命令,A0為0的時候,寫入數(shù)據(jù) CH375_Read=1;

GpioDataRegs.GPBDAT.all&= CH375Data_Temp; //這種處理方法有可能改變讀寫狀態(tài)。

SDelay(200); CH375_Write=0; SDelay(200); CH375_Write=1; CH375Disable(); } /****************************************************/ //函數(shù)描述:CH375讀數(shù)據(jù) //寫入?yún)?shù):無 //返回參數(shù):讀出數(shù)據(jù) //描述: //2009.07.27 , V2.0 :在子程序中去出了CH375Disable()函數(shù) // 原因:在批量數(shù)據(jù)讀取時,CS線不能變低。將這部分功能移動到了數(shù)據(jù)讀取完后再進行Disable /****************************************************/ unsigned char CH375_ReadData() { unsigned char USBData;

EALLOW; //運行寫EALLOW保護寄存器 GpioMuxRegs.GPBDIR.all=0xFF00; //GPIOB口低8位設(shè)置為輸入 EDIS; CH375_CS=0; CH375_A0 = 0; //A0為1的時候,讀出中斷標志,A0為0的時候,讀出數(shù)據(jù) CH375_Read=0; CH375_Write=1; SDelay(200);

USBData= (GpioDataRegs.GPBDAT.all)&0xFF;;

SDelay(200); CH375_Read=1; CH375Disable(); return USBData; } /****************************************************/ //函數(shù)描述:CH375寫模式 //寫入?yún)?shù):模式數(shù)據(jù) //返回參數(shù):無 //描述: // 寫完命令自測試 /****************************************************/ void CH375Write_Mode(unsigned char CH375Mode) { //add CH375_WriteCmd(CMD_SET_USB_MODE); SDelay(20); CH375_WriteData(CH375Mode); while(CH375_ReadData()!=CMD_RET_SUCCESS) { } //UartTrans("USB Set Mode OK!\n",17); CH375Disable(); } /****************************************************/ //函數(shù)描述:CH375緩沖區(qū)復(fù)位 //寫入?yún)?shù):無 //返回參數(shù):無 //描述: // 長度清零、緩沖區(qū)清零 /****************************************************/ void USBReset() { unsigned char Count_Temp; for(Count_Temp=0;Count_Temp { USBBuffer[Count_Temp]=0; } USBData_Len = 0; } /****************************************************/ //函數(shù)描述:CH375發(fā)送數(shù)據(jù) //寫入?yún)?shù):數(shù)據(jù)以及數(shù)據(jù)包的長度 //返回參數(shù):無 //描述: // /****************************************************/ void USBSend_Data(unsigned char *USBSendBuffer,unsigned char SendBuffer_Len) { //add unsigned char Count_Temp; CH375_WriteCmd(CMD_WR_USB_DATA7); CH375_WriteData(SendBuffer_Len); for(Count_Temp=0;Count_Temp { CH375_WriteData(*(USBSendBuffer+Count_Temp)); } CH375Disable(); } /****************************************************/ //函數(shù)描述:CH375中斷 //寫入?yún)?shù):無 //返回參數(shù):無 //描述: // 中斷源:INT0 // 緩沖區(qū):USBBuffer[] // 長度 :USBData_Len ,Maxlen=64 /****************************************************/ void USBint() {

unsigned char USBStatus; unsigned char Count_Temp; CH375_WriteCmd(CMD_GET_STATUS); SDelay(1); USBStatus=CH375_ReadData(); switch(USBStatus) { case USB_INT_EP1_OUT: {

} break; case USB_INT_EP1_IN: CH375_WriteCmd(CMD_UNLOCK_USB); break; case USB_INT_EP2_OUT: { CH375_WriteCmd(CMD_RD_USB_DATA); USBData_Len=CH375_ReadData(); //接收長度 if(USBData_Len>64) { USBData_Len=64; } for(Count_Temp=0;Count_Temp< USBData_Len;Count_Temp++) //接收數(shù)據(jù)塊 { USBBuffer[Count_Temp]=CH375_ReadData(); } USBRecFlag=1; CH375Disable(); } break; case USB_INT_EP2_IN: CH375_WriteCmd(CMD_UNLOCK_USB); break; case USB_INT_USB_SUSPEND: break; case USB_INT_WAKE_UP: break; default: break; } } 請教高人指點。[Emot]1[/Emot]

問題已經(jīng)解決,能夠正確向電腦發(fā)送數(shù)據(jù),可是,怎么接收數(shù)據(jù)啊。


可以接收數(shù)據(jù)咯。上面的程序是沒有問題的。只是注意賦初值,還有那個CH372調(diào)試軟件的使用。


我的也能正常配置,電腦能發(fā)現(xiàn)硬件,但使用CH372DEBUG.exe為什么接收和發(fā)送數(shù)據(jù)


interrupt void xint1(void) { unsigned char InterruptStatus; //定義中斷狀態(tài) unsigned char mLength; unsigned char SendLength=64; //上傳數(shù)據(jù)長度 CH375_WR_CMD_PORT(GET_STATUS); //向CH375發(fā)送中斷狀態(tài)獲取命令 InterruptStatus = CH375_RD_DAT_PORT();//獲取中斷狀態(tài),并通知CH375取消中斷請求 // 分析中斷狀態(tài),并做相應(yīng)處理 switch(InterruptStatus){ case USB_INT_EP2_OUT: // 端點2數(shù)據(jù)下傳 CH375_WR_CMD_PORT( RD_USB_DATA );// 向CH375發(fā)送讀數(shù)據(jù)命令 mLength =CH375_RD_DAT_PORT( );//從CH375下傳緩沖區(qū)讀取數(shù)據(jù)塊 if ( mLength == 0 ) { /* 長度為0,沒有數(shù)據(jù),在某些應(yīng)用中也可以將長度0定義為一種特殊命令 */ p_xram=data_buffer; p_ser=data_buffer; return; } do { *p_xram = CH375_RD_DAT_PORT( ); /* 接收命令包的數(shù)據(jù) */ p_xram++; } while ( -- mLength ); break; case USB_INT_EP2_IN: //端點2數(shù)據(jù)上傳 CH375_WR_CMD_PORT(WR_USB_DATA7); //向ch375發(fā)送寫數(shù)據(jù)命令 CH375_WR_DAT_PORT(SendLength); //首先寫入要發(fā)送數(shù)據(jù)長度 do { CH375_WR_DAT_PORT(*p_ser); p_ser++; }while(--SendLength); CH375_WR_CMD_PORT(UNLOCK_USB); break; case USB_INT_EP1_OUT: CH375_WR_CMD_PORT(UNLOCK_USB); break; case USB_INT_EP1_IN: CH375_WR_CMD_PORT(UNLOCK_USB); break; default: CH375_WR_CMD_PORT(UNLOCK_USB); break; } } 這是中斷服務(wù)程序,請求幫忙


我的也能正常配置,電腦能發(fā)現(xiàn)硬件,但使用CH372DEBUG.exe為什么接收和發(fā)送數(shù)據(jù)? 你的問題是什么?看不懂哎


不好意思,打錯了。我的是DSP和pc機的通信。采用并口控制CH375,能夠正常的配置完成,能找到硬件,使用DEBUG372.EXE測試,上傳和下傳都沒反應(yīng),而且經(jīng)常卡死。這是為什么?求指導(dǎo)。前面貼的是中斷服務(wù)程序。


你先下傳數(shù)據(jù),看看是否可以收到下傳的數(shù)據(jù)。中斷函數(shù)里面的意思是收到下傳的數(shù)據(jù)包后,按位取反后上傳,如果沒有點擊下傳,直接點擊上傳,這個時候軟件上并沒有上傳數(shù)據(jù),導(dǎo)致CH372DBG軟件一直在讀數(shù)據(jù),就產(chǎn)生了你看到卡死的現(xiàn)象了。


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

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