ch375 问题

利用调试工具DEBUG372。EXE调试,假如端点2数据上传和端点1下传正确,端点2下传错误。会不会是硬件方面的问题? 另外对于延时,假如机器周期是4个时钟周期的话,延时是不是和机器周期有关?还是只和晶振有关?晶振是11.0592M,而机器周期是4个时钟周期。[Emot]1[/Emot]

1、这与硬件无关,应该是程序上的问题,对比我们的TEST例程看看 2、延时和机器周期有关


比如TEST例程这段: void CH375_WR_CMD_PORT( unsigned char cmd ) { /* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */ delay2us(); CH375_CMD_PORT=cmd; /* ******************** 注释中是用普通I/O引脚模拟8位并口的时序,CH375_CS引脚是可选的,可以一直接GND强制片选 CH375_D0_D7 = cmd; CH375_A0 = 1; 选择CH375的命令口 // CH375_D0_D7_DIR = output; 对于标准双向I/O,请在此设置为输出方向 CH375_RD = 1; 如果I/O默认电平是高电平,那么这是可选操作 CH375_CS = 0; CH375_WR = 0; // CH375_CS = 0; 对于高速单片机,该指令用于延时,以便向CH375_WR产生宽度至少为80nS的低电平脉冲 CH375_WR = 1; CH375_CS = 1; CH375_A0 = 0; // CH375_D0_D7_DIR = input; 对于标准双向I/O,请在此设置为输入方向 CH375_D0_D7 = 0xFF; 对于准双向I/O,请在此设置输出全高电平 ******************** */ delay2us(); } CH375_D0_D7 怎么定义的?要按这上面写吗? 假如我的晶振是11.0592M,而机器周期是4个时钟周期的话。我delay2us();应该怎么写?CH375_WR_CMD_PORT( unsigned char cmd )这样的写命令该怎么写?实在没有办法了。我找不出来什么原因?

unsigned char i; unsigned char InterruptStatus; unsigned char length;

Delay2us( ); CH375_CMD_PORT = CMD_GET_STATUS; /* 获取中断状态并取消中断请求 */ Delay2us( ); /* 如果时钟频率低于16MHz则无需该指令延时 */ InterruptStatus = CH375_DAT_PORT; /* 获取中断状态 */ //Delay2us( ); switch ( InterruptStatus ){ case USB_INT_EP2_OUT: { /* 批量端点下传成功 */ Buzy=1; //Delay2us( ); CH375_CMD_PORT = CMD_RD_USB_DATA; /* 从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 */ Delay2us( ); /* 如果时钟频率低于16MHz则无需该指令延时 */ length = CH375_DAT_PORT; /* 首先读取后续数据长度 */ Delay2us( ); for ( i = 0; i < length; i ++ ){ buffer[i] =CH375_DAT_PORT; } 这是我那段中断,下传的部分。之前问过您的,一直没有解决。


端点2是最基本的了,可是我一直都没能调好,下面的也进行不下去了。可是精确的延时什么的看起来真的很麻烦,都搞晕了。我那段中断会造成下传很乱吗?


你用的是总线方式还是非总线方式?这样吧,把你的硬件连接说明一下,然后在把你的函数打包传上来。帮你检查一下是否正确。


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