单片机/MCU论坛
直播中

你又知道了

12年用户 1068经验值
私信 关注
[问答]

上adc中断程序到aduc7026开发板,但dac并没有相应的输出是为什么?

下载官网上adc中断程序到开发板,但dac并没有相应的输出。
程序如下:
/*********************************************************************
  Author        : ADI - Apps         
  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 ;
}

                                                                                                                        

回帖(2)

张琛根

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

李春梅

2024-1-12 14:52:57
开发板芯片上一般会有多个外设,如ADC(模数转换器)和DAC(数模转换器),通过程序控制这些外设可以实现对模拟信号的采集和输出。根据你提供的信息,有可能是以下几个原因导致DAC没有输出:

1. 硬件连接问题:请确保DAC输出引脚正确连接到外部电路,并且电路中的元件正确连接。

2. DAC配置问题:在程序中需要正确配置DAC的寄存器,包括设置参考电压、采样率等参数。请检查程序中对DAC寄存器的配置是否正确。

3. 中断优先级问题:如果程序中同时使用了ADC和DAC,并且使用了中断来处理ADC数据的采集,那么可能是由于中断优先级的设置问题导致无法正确采集或输出数据。请检查中断优先级的设置是否正确。

4. DAC输出电平问题:如果程序中没有对DAC输出电平进行设置,那么可能无法输出有效的模拟信号。请检查程序是否正确设置了DAC输出值。

请检查以上几个方面,如果仍然无法解决问题,可以提供更详细的程序代码和硬件连接图,以便进行更具体的分析和解答。
举报

更多回帖

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