ADI 技术
直播中

章应苞

7年用户 214经验值
私信 关注
[问答]

aduc7026 ADC中断程序没有相应输出

下载官网上adc中断程序到开发板,但dac并没有相应的输出。

程序如下:
/*********************************************************************


Author        : ADI - Apps            www.analog.com/MicroConverter


Date          : Sept. 2005


File          : Multint.c


Hardware      : Applicable to ADuC702x rev H or I silicon
                 Currently targetting ADuC7026.


Description   : Example program using two IRQs and 1 FIQ.
  Timer1 causes an IRQ which compliments P4.2.
  XIRQ0 causes an IRQ which compliments P4.2.
  ADC causes an FIQ which outputs the value on ADC0
  to DAC1.

*********************************************************************/


#include // Include ADuC7026 Header File

// Function Prototypes


void My_IRQ_Function(void); // IRQ Function Prototype
void My_FIQ_Function(void); // FIQ Function Prototype
void ADCpoweron(int);
void delay(int);


void DemoConfig(void);
long ADCconvert(void);
void My_IRQ_Function(void);


int main (void)  {


  DemoConfig(); // set up ADC, DAC, & reference


  IRQ = My_IRQ_Function; // Specify Interrupt Service Rountine
  FIQ = My_FIQ_Function; // Specify Interrupt Service Rountine


  GP0CON = 0x00100000; // Enable ADCbusy on Pin 0.5
  GP4DAT = 0x04000000; // Configure P4.2 as output
  GP3DAT = 0xff000000; // Configure port 3 as output
  // Timer 1 configuration
  T1LD = 0x20000; // Counter Value
  T1CON = 0xC4; // Enabled,Periodic,Binary and CLK/16


  IRQEN = XIRQ0_BIT+GP_TIMER_BIT; // Enable XIRQ0 and Timer1 IRQ
  FIQEN = ADC_BIT; // Enable ADC FIQ


  while(1) {
  GP3DAT ^= 0x00ff0000; // Compliment P3
  ADCCON = 0x6E3; // single conversion
  delay(0x2000); // Delay Blinking of P3
  }

  return 0 ;
}


void delay (int length) {
while (length >=0)
    length--;
}


void DemoConfig(void) { // ADC, DAC and Reference configuration
  ADCpoweron(20000); // power on ADC
  ADCCP = 0x00; // conversion on ADC0
  DAC1CON = 0x13; // AGND-AVDD range
  REFCON = 0x01; // internal 2.5V reference
  return;
}


void ADCpoweron(int time) {
  ADCCON = 0x20; // power-on the ADC
  while (time >=0)   // wait for ADC to be fully powered on
    time--;
}




/********************************************************************/
/*                                                                  */
/* Interrupt Service Rountine */
/*                                                                  */
/********************************************************************/




void My_IRQ_Function() { // example with two IRQ

  if ((IRQSTA & GP_TIMER_BIT) != 0) { // Timer1 IRQ?
  T1CLRI = 0; // Clear Timer IRQ
  GP4DAT ^= 0x00040000; // Complement P4.2
  }
  if ((IRQSTA & XIRQ0_BIT) != 0) { // external IRQ?
  GP4DAT ^= 0x00040000; // Complement P4.2
  while(GP0DAT & 0x00010){} // wait for XIRQ to be low again
  }  
  return ;
}


void My_FIQ_Function() { // example with one FIQ
  if ((FIQSTA & ADC_BIT) != 0) // ADC FIQ ?
  DAC1DAT = ADCDAT; // Output ADC0 Value onto DAC1
  return ;
}

回帖(6)

章应苞

2018-9-13 14:23:52
以及经过测试发现没有进入快速中断,而在外部中断接通时候,DAC输出了adc的结果,但这些语句应该在快速中断中实现
举报

刘思思

2018-9-13 14:31:21
引用: 2011jiangzhou 发表于 2018-9-13 08:43
以及经过测试发现没有进入快速中断,而在外部中断接通时候,DAC输出了adc的结果,但这些语句应该在快速中断中实现

看了您的程序,是没有问题的,建议您不要使用J-LINK或者U-LINK调试,这些调试器的中断级很高,会占用部分中断。建议您通过UART或者I2C下载到片上测试一下。
举报

章应苞

2018-9-13 14:45:10
引用: qwe045 发表于 2018-9-13 08:50
看了您的程序,是没有问题的,建议您不要使用J-LINK或者U-LINK调试,这些调试器的中断级很高,会占用部分中断。建议您通过UART或者I2C下载到片上测试一下。

一直都是下载到片上测试的。。。
举报

袁飞

2018-9-13 14:58:30
[size=12.727272033691406px]你的问题已经翻译发到了如下链接, 会有产品线工程师回复
[size=12.727272033691406px]https://ez.analog.com/message/236373#236373
举报

更多回帖

发帖
×
20
完善资料,
赚取积分