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

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

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

646件の閲覧回数
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();
       
      }
    }
タグ(1)
0 件の賞賛
返信
1 返信

421件の閲覧回数
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 件の賞賛
返信