读取CH372端点2数据经常出错,请问如何解决。 用labview的usb例程与avr控制的ch372通信。 读取的时候出错的概率非常大。 比如pc端发送1234,mcu从372中读到的是1344. 发送AMEN,读到AMNN。
程序如下,mcu为atmega16,cvavr编译。 void CH372_WR_CMD(UINT8 cmd) //向CH372写1byte命令 { delay_us(2); A0=1; DDRB=0xff; PORTB=cmd; WR=0; RD=1; DDRB=0xff; WR=1; RD=1; A0=0; DDRB=0x00; delay_us(2); }
void CH372_WR_DAT(UINT8 cmd) //向CH372写1byte数据 { PORTB=cmd; DDRB=0xff; A0=0; WR=0;RD=1; DDRB=0xff; WR=1;RD=1;A0=0; delay_us(1); }
UINT8 CH372_RD_DAT(void) //读1byte ch372数据 { UINT8 temp; delay_us(1); DDRB=0x00; A0=0; RD=0; WR=1; DDRB=0x00; temp=PINB; RD=1; WR=1; return temp; }
void get_status(void) //处理中断状态 { UINT8 length,i,buffer[64]; CH372_WR_CMD(0x22);
switch (CH372_RD_DAT()) {
case 0x02: //批量端点/端点 2 接收到数据 CH372_WR_CMD(0x28); length=CH372_RD_DAT(); for ( i = 0; i < length; i ++ ) buffer[ i ] = CH372_RD_DAT(); break; }
[Emot]7[/Emot]