大家好!
最近我在用CH376芯片連接USB寫TXT數(shù)據(jù),但是無論是中斷原地等待還是中斷定時查詢方式,有問題的都是一個地方,出現(xiàn)在ByteWrite在返回長度上。
UINT8CH376ByteWrite(PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount)? /* 以字節(jié)為單位向當前位置寫入數(shù)據(jù)塊 */
{
UINT8s;
xWriteCH376Cmd(CMD2H_BYTE_WRITE) ;
xWriteCH376Data((UINT8) ReqCount) ;
xWriteCH376Data((UINT8) (ReqCount>>8) ) ;
xEndCH376Cmd() ;
if (RealCount) *RealCount = 0;
while (1) {
s = Wait376Interrupt() ;
if (s == USB_INT_DISK_WRITE) {
s = CH376WriteReqBlock(buf) ;? /* 向內(nèi)部指定緩沖區(qū)寫入請求的數(shù)據(jù)塊,返回長度 */
xWriteCH376Cmd(CMD0H_BYTE_WR_GO) ;
xEndCH376Cmd() ;
buf += s;
if (RealCount) *RealCount += s;
}
/*else if (s == USB_INT_SUCCESS) return(s) ;*/? /* 結(jié)束 */
else return(s) ;? /* 錯誤 */
}
}
我根據(jù)上面這個例程中的函數(shù),轉(zhuǎn)化移植到我的單片機中,當進入while,只有一次機會收到USB_INT_DISK_WRITE(再次發(fā)xWriteCH376Cmd(CMD2H_BYTE_WRITE)等 并不會再收到),然后進入下個CH376WriteReqBlock,但是此時只會返回0x1E(也就是USB_INT_DISK_WRITE的值),這樣的情況下,并不會真的寫30個字節(jié),而是只寫了一個字節(jié),就結(jié)束了。
不知道什么環(huán)節(jié)出了問題...
期間還發(fā)現(xiàn)一個問題,如果
xWriteCH376Cmd(CMD2H_BYTE_WRITE) ;
xWriteCH376Data((UINT8) ReqCount) ;
xWriteCH376Data((UINT8) (ReqCount>>8) )?
與Wait376Interrupt() 之間放一個斷點時間上不連續(xù),那么只會收到0x14,怎么也收不到0x1E了。
我試過直接斷點到CH376FileClose( TRUE ),還是只寫了一個字節(jié)...