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

为什么郁闷的人总是我,我到底做错了什么???

楼主#
更多 发布于:2003-07-14 19:00
我的D12用的是中断INT1,ADC0809用的是INT0,设置INT0为低优先级,INT1为高优先级,我在主程序里设置各项参数(包括启动A/D),参数如下:
ADC = 0x7ff8 ; //定义A/D的端口地址
ADCdata = 0x1000; //定义数据缓冲器地址
i = 8;
if(bEPPflags.bits.setup_packet)
{
................
}
else
{
IT0 = 1; //设置IN0为边沿触发
EX0 = 1; //允许外部中断0中断
PX0 = 0; //设置为低优先级
*ADC = i ; //启动ADC0809
}
中断程序如下:
adc_das() interrupt 0
{
bEPPflags.bits.das_flag = 1;

tmp = *ADC; //读取A/D转换结果
*ADCdata = tmp;//结果值存储到数据缓存区
ADCdata++; //数据缓存区指针地址加1
//i--;
*ADC = i; //重新启动模拟输入通道0 A/D转换
}
并把ADCdata 指针传递到D12的端点2发送main_txdone(void)的缓存,但主机这时候枚举没有完全成功,去掉中断后枚举是正确的,我觉得可能是中断的或者初始化(包括启动A/D转换)放的位置不对,大家给点意见,拜托了


 
gjltce
驱动小牛
驱动小牛
  • 注册日期2003-07-05
  • 最后登录2011-12-10
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望59点
  • 贡献值0点
  • 好评度25点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-15 11:15
上电后先打开USB 中断,延时 100 毫秒后再打开 A/D 中断。就行了。
z_bing
驱动中牛
驱动中牛
  • 注册日期2002-09-28
  • 最后登录2008-04-14
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-15 11:35
枚举成功后再打开 A/D 中断试一试。
爱国守法,明理诚信,团结一致,战胜非典!
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-15 11:44
最好所有其他的工作要在枚举完成以后,再进行!
duanjong
驱动中牛
驱动中牛
  • 注册日期2003-03-10
  • 最后登录2006-01-18
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-15 12:47
我是一位新手,上面的兄弟能否详细点???(在线求助)
游客

返回顶部