請(qǐng)幫我看看我初始化CH372的流程是否正確?在ARM環(huán)境中

Retry: CH375_WR_CMD_PORT(CMD_CHECK_EXIST); /* 測(cè)試CH375是否正常工作 */ CH375_WR_DAT_PORT(0x55); /* 寫入測(cè)試數(shù)據(jù) */ i = ~ 0x55; /* 返回?cái)?shù)據(jù)應(yīng)該是測(cè)試數(shù)據(jù)取反 */ if ( CH375_RD_DAT_PORT() != i ) { /* CH375不正常 K=0 表示只做一次 */ if (k==0){ for (i=80;i!=0;i--) CH375_WR_CMD_PORT(CMD_RESET_ALL); /* 多次重復(fù)發(fā)命令,執(zhí)行硬件復(fù)位 */ Delay50ms(); /* 延時(shí)50ms */ k++; goto Retry;} //返回子程序入口處,再做一次 else //如果還不成功。則返回PC機(jī) 消息,USB出錯(cuò) { //表示CH372的 初始化 失敗,需要置失敗的標(biāo)志。不需要回PC機(jī)什么命令 error=1; //置失敗的標(biāo)志 } }

/* 設(shè)置USB工作模式, 必要操作 */ CH375_WR_CMD_PORT(CMD_SET_USB_MODE); CH375_WR_DAT_PORT(2); /* 設(shè)置為使用內(nèi)置固件的USB設(shè)備方式 */ for (i=50;i!=0;i--) { /* 等待操作成功,通常需要等待10uS-20uS */ if (CH375_RD_DAT_PORT()==CMD_RET_SUCCESS) break; }

注2個(gè)寫函數(shù): #define CH375_DAT_PORT *(volatile uint16 *)(0x82000000) // 對(duì)CH372的數(shù)據(jù)口做讀寫操作 #define CH375_CMD_PORT *(volatile uint16 *)(0x82000002) // 對(duì)CH372的命令口做讀寫操作

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í) */ delay2us(); CH375_DAT_PORT=dat; delay2us(); }

但初始化不成功,請(qǐng)高手幫我看看哪兒寫的不對(duì)?我走單步時(shí),if ( CH375_RD_DAT_PORT() != i ) 就符合條件,收到的不是i的取反。我用的是ARM 2214。內(nèi)存地址影射應(yīng)該是正確的。

if ( CH375_RD_DAT_PORT() != i )函數(shù)的意思就是讀回來的數(shù)據(jù)不是你的數(shù)據(jù)的取反??!那當(dāng)然就不會(huì)是取反的數(shù)據(jù)了啊,你讀回來的數(shù)據(jù)是多少?分析你讀回來的數(shù)據(jù)。


讀回來的是0x0000,不是0X55的取反。。。為什么? 請(qǐng)問我這個(gè)初始化流程中有啥問題沒有?謝謝了。


不是這個(gè)意思,你讀回來的數(shù)據(jù)不是你寫入數(shù)據(jù)的取反的話,那就說明你的單片機(jī)和375相連接的硬件有問題


謝謝HCN,我去查硬件。。。。


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

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