用LPC824的AD采集电压数据,采集出来的数值为0x0000,bang一下吗?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

用LPC824的AD采集电压数据,采集出来的数值为0x0000,bang一下吗?

720 Views
dovegeng
Contributor I
int main (void)
{
  volatile uint32_t data;
 unsigned char i;
 unsigned int addr_sum,temp;
 uint32_t current_clkdiv, val, temp_data, n;
    SystemInit();   /* ³õʼ»¯Ä¿±ê°å£¬ÇÐÎðɾ³ý       */
    GPIOInit();     /* GPIO³õʼ»¯                   */
    UARTInit();    /* UART³õʼ»¯                   */
  UART1Init();   /* UART³õʼ»¯                   */
 WDTInit();      /* WDT³õʼ»¯                    */
 SCTInit ();
 DIR_INIT();
 DIR_OFF();
 SetLedState(0,0,0,0);
 myDelay(1);
 initvalue();
 
 LPC_GPIO_PORT->SET0  = 0x00822000;     // P0.27, P0.16 to P0.13
// LPC_GPIO_PORT->SET0  |= 0x00822000; 
  LPC_GPIO_PORT->DIR0 &= 0xFF7DDFFF;     // P0.27, P0.16 to outpu
 
  
 LPC_SYSCON->PDRUNCFG &= ~(ADC_PD);
//  LPC_SYSCON->PRESETCTRL &= (ADC_RST_N);
//  LPC_SYSCON->PRESETCTRL |= ~(ADC_RST_N);
//  LPC_SYSCON->SYSAHBCLKCTRL |= (ADC | GPIO | SWM);
 LPC_SYSCON->SYSAHBCLKCTRL |= (ADC);
 
 
  LPC_SWM->PINENABLE0 &= ~(ADC_3|ADC_9|ADC_10); // Fixed pin analog functions enabled
//  LPC_SWM->PINENABLE0 &= ~(ADC_3);
// LPC_SWM->PINENABLE0 |= (ADC_1|ADC_2|ADC_4|ADC_5|ADC_6|ADC_7|ADC_8|ADC_11); // ??AD3-11AD????

  LPC_ADC->INTEN = (1<<SEQA_INTEN)  |
                   (1<<SEQB_INTEN)  |
                   (0<<OVR_INTEN)   |
                   (0<<ADCMPINTEN0) |
                   (0<<ADCMPINTEN1) |
                   (0<<ADCMPINTEN2) |
                   (0<<ADCMPINTEN3) |
                   (0<<ADCMPINTEN4) |
                   (0<<ADCMPINTEN5) |
                   (0<<ADCMPINTEN6) |
                   (0<<ADCMPINTEN7) |
                   (0<<ADCMPINTEN8) |
                   (0<<ADCMPINTEN9) |
                   (0<<ADCMPINTEN10)|
                   (0<<ADCMPINTEN11);
 
  LPC_ADC->TRM &= ~(1<<ADC_VRANGE); // '0' for high voltage
 
  current_clkdiv = (SystemCoreClock / 100000) - 1;
 LPC_ADC->CTRL = (1UL << ADC_CALMODE) | (current_clkdiv & 0xFF);
 while ((LPC_ADC->CTRL & (1UL << ADC_CALMODE)) != 0);

 
//  current_seqa_ctrl |= LOGIC_HIGH<<ADC_TRIGGER;    // Use for software-only triggering
//  current_seqb_ctrl |= LOGIC_HIGH<<ADC_TRIGGER;    // Use for software-only triggering

  // Enable ADC interrupts in the NVIC
  NVIC_EnableIRQ(ADC_SEQA_IRQn);
 
  while(1)
  {

  LPC_ADC->SEQA_CTRL = current_seqa_ctrl; 
 LPC_ADC->SEQA_CTRL &= ~(0xFFF);
 LPC_ADC->SEQA_CTRL |= (1UL << 9);
  
  //¿ªÆôAD
 LPC_ADC->SEQA_CTRL |= ((1UL << ADC_START) | (1UL << ADC_SEQ_ENA));
 do
 {
  data = LPC_ADC->SEQA_GDAT;  // ????
 } while ((data & (1UL << 31)) == 1); // ??????
   //¹Ø±Õ
 LPC_ADC->SEQA_CTRL &= ~(1UL << ADC_SEQ_ENA);
 
         DIR_ON();
       myDelay (500);
          LPC_USART0->TXDAT=((data >> 4) & 0xfff)>>8;
       while(!(LPC_USART0->STAT&0x08));
          LPC_USART0->TXDAT=((data >> 4) & 0xfff);
       while(!(LPC_USART0->STAT&0x08));
          DIR_OFF();
       
      }
    }
Tags (1)
0 Kudos
Reply
1 Reply

495 Views
jeremyzhou
NXP Employee
NXP Employee

Hi dove geng,

Thank you for your interest in NXP Semiconductor products and 
for the opportunity to serve you.
Please checking the above code by referring to the attachment.
Have a great day,

TIC

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos
Reply