duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1316回复:8

找到了问题的关键,但还是解决不了,郁闷啊

楼主#
更多 发布于:2003-07-17 13:21
现在我把和枚举相关的程序都放在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
}
plasma
驱动小牛
驱动小牛
  • 注册日期2002-02-19
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-17 14:03

main_txdone();
不能放在采集中断,应放在USB中断.
duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-17 14:56
但USB可以发送数据,说明可以把main_txdone()放在数据采集中断中
gjltce
驱动小牛
驱动小牛
  • 注册日期2003-07-05
  • 最后登录2011-12-10
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望59点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-17 15:21
会不会是main_txdone()有问题。
duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-17 15:28
但当我在MAIN_TXDOONE()中发送一组固定的值时,结果是正确的,说明该函数是正确的
gjltce
驱动小牛
驱动小牛
  • 注册日期2003-07-05
  • 最后登录2011-12-10
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望59点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-17 15:45
那基本上可以确定是main_txdone()有问题,请将main_txdone()贴出来看看。
duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-07-17 16:04
void main_txdone(void)reentrant
{
    unsigned char len;

    D12_ReadLastTransactionStatus(5);
    
    len = D12_WriteBuffer(5,EpBuf,64);
}

jiangliq_2000
驱动牛犊
驱动牛犊
  • 注册日期2003-07-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-12-25 21:58
那基本上可以确定是main_txdone()有问题,请将main_txdone()贴出来看看。


我把main_txdone()放在USB中断里也不行啊,请问楼主的问题解决了没,我碰到的问题跟你一样,现在正郁闷的很,我用的是ADUC812+D12,楼主如果解决了这个问题,麻烦请跟我说一声,万分感激,Email:jiangliq_2000@hotmail.com
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-12-27 14:11
你试一下在主程序里处理发送和接收,在中断里仅是判断中断源和设
状态标志.可能是你在处理中断过程中对MCU或USB控制器的中断设置
有问题.
新手上路,请多关照.
游客

返回顶部