阅读:1097回复:3
大家来帮我看看,数据采集程序和通过D12的端点2发送数据的程序是否正确?程序如下:
相关参数:
ADC = 0x7ff8 ; //定义A/D的端口地址 ADCdata = 0x1000; //定义数据缓冲器地址 i = 8; 数据采集中断程序 adc_das() interrupt 0 { bEPPflags.bits.das_flag = 1; tmp = *ADC; //读取A/D转换结果 *ADCdata = tmp;//结果值存储到数据缓存区 ADCdata++; //数据缓存区指针地址加1 i--; *ADC = i; //启动下一个模拟输入通道A/D转换 } 发送程序: if (bEPPflags.bits.setup_packet) { DISABLE; bEPPflags.bits.setup_packet = 0; ENABLE; control_handler(); D12SUSPD = 1; //释放D12的挂起状态 } // if setup_packet else { IT0 = 1; //设置IN0为边沿触发 EX0 = 1; //允许外部中断0中断 PX0 = 0; //设置为低优先级 *ADC = i ; //启动ADC0809 // while(i); //等待8个通道A/D转换完毕 //if(bEPPflags.bits.das_flag == 1) // DISABLE; // bEPPflags.bits.das_flag = 0; // ENABLE; // EX0 = 0; //禁止外部中断INT0*/ main_txdone(); } 主端点发送: void main_txdone(void)reentrant { unsigned char len,epstatus; D12_ReadLastTransactionStatus(5); /* Clear interrupt flag */ epstatus = D12_ReadEndpointStatus(5);//读取缓存区状buffer1_full|buffer0_full epstatus &=0x60; len = D12_WriteBuffer(5,ADCdata,64); if(epstatus == 0x60) { len = D12_WriteBuffer(5,ADCdata,64);//写入双缓存数据 } } |
|
最新喜欢:![]() |
沙发#
发布于:2003-07-14 14:16
怎么没人回答啊,兄弟们,帮帮我吧
|
|
板凳#
发布于:2003-07-14 16:25
我简单的看了一下,好象有两点问题:1、len = D12_WriteBuffer(5,ADCdata,64);中D12_WriteBuffer函数是你自己写的吗?是不是对的?不妨贴出来看看,我用的是D12_WriteEndpoint(5, 64, EpBuf);是没问题的。
2、不要用双缓冲区,你的用法不对!我用过双缓冲区,数据能发送,但是很慢,没有实际意义,但也或许是我用的不对,不知道其他大虾是怎么做的。 |
|
地板#
发布于:2003-07-14 16:37
应该是对的,否则我得枚举就不会成功了(不加ADC时)
函数定义如下: unsigned char D12_WriteBuffer(unsigned char endp ,unsigned char *buf,unsigned char len)reentrant { unsigned char i; if(bEPPflags.bits.in_isr == 0) { DISABLE; } outportb(D12_COMMAND,endp); //选择端点 inportb(D12_DATA); //读入满/空状态 //********************************************** outportb(D12_COMMAND,0xF0); //写缓冲区命令 outportb(D12_DATA,0); outportb(D12_DATA,len); for(i=0; i<len; i++) { outportb(D12_DATA, *(buf+i)); } outportb(D12_COMMAND,0xFA); //VALIDATE BUFFER if(bEPPflags.bits.in_isr == 0) { ENABLE; } return len; } |
|