首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

AD转换值读取问题

你用的是什么芯片,你的程序是怎样的...
海纳百川  有容乃大

AD转换值读取问题

各位好!
我用MC9S12DG128B在做AD转换时,使用外部中断IRQ控制AD采集信号,AD也用中断方式进行。外部中断优先级最高,大约50us执行一次,AD大约3us进行一次。当不读取AD结果时,AD转换可以连续进行,而读取AD结果时,AD转换就不能继续进行了,我不知道这是什么原因,向各位请教!

void ADCInit(){  
   ATD0CTL2  = (ATD0CTL2_ADPU_MASK|ATD0CTL2_AFFC_MASK|ATD0CTL2_ASCIE_MASK);
   ATD0CTL3  = (ATD0CTL3_S1C_MASK);
   ATD0CTL4  = 0x81;
   ATD0CTL5  = (ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK);
   ATD0DIEN=0x00;

void IRQInit() {
   HPRIO = (unsigned char)(Virq & 0xff);
   INTCR_IRQE = 1; 
   INTCR_IRQEN = 1;


#pragma CODE_SEG NON_BANKED 
__interrupt void ADC_ISR(void){
  unsigned char ab;
  PORTB_BIT0 = !PORTB_BIT0;   //用于检测,执行PB0就取反
  ab = ATD0DR0;

}
#pragma CODE_SEG DEFAULT

#pragma CODE_SEG NON_BANKED
__interrupt void IRQ_ISR(void) {

  PORTB_BIT1 = !PORTB_BIT1;   //用于检测,执行PB1就取反

}
#pragma CODE_SEG DEFAULT

[此贴子已经被作者于2007-1-17 11:52:47编辑过]

哦,呵呵,不好意思。
我把内容补充上了,请帮忙看看,谢谢。
现在的问题好像是irq对ADC的中断有很大影响。
这样还是看不出你的程序到底是怎样执行的...
海纳百川  有容乃大
使用外部中断IRQ控制AD采集信号是什么意思呢?
你的AD转化不是带中断且连续进行的吗?
hello!
就是不知道这个程序是怎么执行下去的
我的目的是在irq中控制adc中断的使能,来控制adc的进行。
现在好像是irq打开的话,adc的中断就不执行了
中断本身在缺省状态下是不能嵌套的。你不能在IRQ中断中等待AD中断的发生。
海纳百川  有容乃大
我还想问一下,现在我用这种方法可以了。但是问题实质是如果读取ad结果的话,就会出现ADC不再进行的问题,如果不读取adc结果就没问题,请帮忙看下。程序如下
#pragma CODE_SEG NON_BANKED
__interrupt void ADC_ISR(void) //5us执行一次
{
table[count++] = ATD0DR0;
if(count>= 5)
{
count = 0;
ATD0CTL2_ASCIE = 0;
}
}
#pragma CODE_SEG DEFAULT

#pragma CODE_SEG NON_BANKED
__interrupt void IRQ_ISR(void) //大约60us执行一次
{
ATD0CTL2_ASCIE = 1;
}
#pragma CODE_SEG DEFAULT
这些程序在那个地方 ,我怎么找不到阿?
G情,Z注,D调,+值,*福。。。
返回列表