阅读:1316回复:8
找到了问题的关键,但还是解决不了,郁闷啊
现在我把和枚举相关的程序都放在USB中断服务子程序中,在主程序中仅完成初始化部分和启动ADC,在ADC中断程序中把采集到的数据放在EPBUF缓存中,并调用主端点发送main_txdone();,此时好像数据根本没有传递给EPBUF,输出还是零。而且我在测试时在数据采集中断中为buf赋值0x1F,按道理来说,界面输出应该时0X1F,但实际输出却是00,真是郁闷!!!!(USB占中断1,优先级为高,ADC占中断0,优先级为低)
adc_das() interrupt 0 { bEPPflags.bits.das_flag = 1; tmp = *ADC; //读取A/D转换结果 *ADCdata = tmp;//结果值存储到数据缓存区 //*ADCdata = 0x1F; buf=*ADCdata;//其中,buf是赋值给主端点的EPBUF数组的值 ADCdata++; //数据缓存区指针地址加1 main_txdone(); *ADC = i; //重新启动模拟输入通道A/D转换 } void main() { ...... IT1 = 0; //设置INT1为低电平中断触发 EX1 = 1; //允许外部中断1 PX1 = 1; //设置为高优先级 IT0 = 1; //设置IN0为边沿触发 EX0 = 1; //允许外部中断0中断 PX0 = 0; //设置为低优先级 MCU_D12CS = 0x1; MCU_D12CS = 0x0; bEPPflags.value = 0;//清除事件标志寄存器 reconnect_USB();//重新链接USB *ADC = i ; //启动ADC0809 } |
|
沙发#
发布于:2003-07-17 14:03
main_txdone(); 不能放在采集中断,应放在USB中断. |
|
板凳#
发布于:2003-07-17 14:56
但USB可以发送数据,说明可以把main_txdone()放在数据采集中断中
|
|
地板#
发布于:2003-07-17 15:21
会不会是main_txdone()有问题。
|
|
地下室#
发布于:2003-07-17 15:28
但当我在MAIN_TXDOONE()中发送一组固定的值时,结果是正确的,说明该函数是正确的
|
|
5楼#
发布于:2003-07-17 15:45
那基本上可以确定是main_txdone()有问题,请将main_txdone()贴出来看看。
|
|
6楼#
发布于:2003-07-17 16:04
void main_txdone(void)reentrant
{ unsigned char len; D12_ReadLastTransactionStatus(5); len = D12_WriteBuffer(5,EpBuf,64); } |
|
7楼#
发布于:2004-12-25 21:58
那基本上可以确定是main_txdone()有问题,请将main_txdone()贴出来看看。 我把main_txdone()放在USB中断里也不行啊,请问楼主的问题解决了没,我碰到的问题跟你一样,现在正郁闷的很,我用的是ADUC812+D12,楼主如果解决了这个问题,麻烦请跟我说一声,万分感激,Email:jiangliq_2000@hotmail.com |
|
8楼#
发布于:2004-12-27 14:11
你试一下在主程序里处理发送和接收,在中断里仅是判断中断源和设
状态标志.可能是你在处理中断过程中对MCU或USB控制器的中断设置 有问题. |
|
|