请帮我看看我初始化CH372的流程是否正确?在ARM环境中

Retry: CH375_WR_CMD_PORT(CMD_CHECK_EXIST); /* 测试CH375是否正常工作 */ CH375_WR_DAT_PORT(0x55); /* 写入测试数据 */ i = ~ 0x55; /* 返回数据应该是测试数据取反 */ 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); /* 多次重复发命令,执行硬件复位 */ Delay50ms(); /* 延时50ms */ k++; goto Retry;} //返回子程序入口处,再做一次 else //如果还不成功。则返回PC机 消息,USB出错 { //表示CH372的 初始化 失败,需要置失败的标志。不需要回PC机什么命令 error=1; //置失败的标志 } }

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

注2个写函数: #define CH375_DAT_PORT *(volatile uint16 *)(0x82000000) // 对CH372的数据口做读写操作 #define CH375_CMD_PORT *(volatile uint16 *)(0x82000002) // 对CH372的命令口做读写操作

void CH375_WR_CMD_PORT(unsigned char cmd) { /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */ delay2us(); CH375_CMD_PORT=cmd; delay2us(); }

void CH375_WR_DAT_PORT(unsigned char dat) { /* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 */ delay2us(); CH375_DAT_PORT=dat; delay2us(); }

但初始化不成功,请高手帮我看看哪儿写的不对?我走单步时,if ( CH375_RD_DAT_PORT() != i ) 就符合条件,收到的不是i的取反。我用的是ARM 2214。内存地址影射应该是正确的。

if ( CH375_RD_DAT_PORT() != i )函数的意思就是读回来的数据不是你的数据的取反啊!那当然就不会是取反的数据了啊,你读回来的数据是多少?分析你读回来的数据。


读回来的是0x0000,不是0X55的取反。。。为什么? 请问我这个初始化流程中有啥问题没有?谢谢了。


不是这个意思,你读回来的数据不是你写入数据的取反的话,那就说明你的单片机和375相连接的硬件有问题


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


只有登录才能回复,可以选择微信账号登录