[求助]新手 ch372的命令讀寫問題

我參考的一本書: 硬件連接:P0口連的是D0-D7,A0連P20,CS連P27,RD#連RD,WR#連WR

#define USB_CMD_ADR 0x0100 //命令地址 #define USB_DATA_ADR 0x0000 //讀寫數(shù)據(jù)地址

寫命令用的是這樣的:*((byte*)USB_CMD_ADR)=command //command為命令

寫數(shù)據(jù): for(i=0;i{ *((byte*)USB_DATA_ADR)=(*psrc);//psrc為數(shù)據(jù)緩沖區(qū)的指針 delay(15); pscr++; }

我的問題是: 1.這個(gè)地址0x0100,0x0000到底怎么讀寫,*((byte*)USB_DATA_ADR)=(*psrc);這種句子是什么意思? 2.寫數(shù)據(jù)時(shí),寫了一個(gè),然后delay(15);再寫下一個(gè),你怎么知道上一個(gè)已經(jīng)讀走了?如果連著兩個(gè)一樣的數(shù)據(jù),他怎么區(qū)分?。? 3.我參考的這本書里根本沒有對WR、RD引腳操作,怎么回事??? 4.哪有最簡單的例子和硬件連接圖,我參考一下,從官網(wǎng)上下的一個(gè)個(gè)的很亂,好像都是關(guān)于U盤讀寫的啊。 不好意思,新手。

(1)這就是向單片機(jī)的一個(gè)外部總線地址上寫一個(gè)數(shù)據(jù) (2)CH372手冊中要求寫完一個(gè)命令或數(shù)據(jù)后延時(shí)(具體數(shù)值參考手冊)一會,這段延時(shí)可確保CH372已經(jīng)把數(shù)據(jù)取走 (3)在總線方式下,WR、RD信號由單片機(jī)自行控制,如果是MCS51的話,可參考MOVX指令的解釋 (4)下載EV372PCB.ZIP,里面有原理圖和PCB


但是關(guān)于第二個(gè)問題: 如果delay(15)之后,372把數(shù)據(jù)取走了。你再寫入一個(gè)新的數(shù)據(jù)(但是和上一個(gè)一樣),他怎么知道你是新寫入的一個(gè)數(shù)據(jù),要讀走?(而不是上一個(gè),不用讀了)?

希望高手都來幫幫忙。


當(dāng)上位機(jī)把數(shù)據(jù)取走之后,372會產(chǎn)生一個(gè)中斷通知單片機(jī)上傳成功,然后單片機(jī)釋放緩沖區(qū),接著寫入其他的數(shù)據(jù).


但是你看我的第一個(gè) 寫數(shù)據(jù): for(i=0;i{ *((byte*)USB_DATA_ADR)=(*psrc);//psrc為數(shù)據(jù)緩沖區(qū)的指針 delay(15); pscr++; }

他跟中斷沒有關(guān)系?。?


這個(gè)定義方式是不對的: unsigned char volatile xdata CH375_CMD_PORT _at_ 0xBDF1; unsigned char volatile xdata CH375_DAT_PORT _at_ 0xBCF0; 首先要定義為volatile ,至于為什么,請查看C語言教材. 如果是51MCU的話要定義成XDATA類型的,否則WR.RD是沒有信號的.如果不是的話可以不帶XDATA 或者這樣定義: #define CH375_CMD_PORT ( *(volatile unsigned char *)0xBDF1 ) #define CH375_CMD_PORT ( *(volatile unsigned char *)0xBCF0 ) 你的寫函數(shù)是和中斷沒關(guān)系,USB通訊流程你要清楚.你單次寫的數(shù)據(jù)兩不能大于64個(gè)字節(jié)(端點(diǎn)2大小,假設(shè)通過端點(diǎn)2傳輸.),寫完之后你必須等到中斷上傳成功之后在繼續(xù)上傳后續(xù)數(shù)據(jù).


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

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