ADC Interrupt register avec Timer interrupt register sur SAMD21 pour Arduin MKR WAN 1310

Bonjour,
je chercher à réaliser une prise de mesure avec le registre d'interruption ADC à partir du registre d'interruption du timer.

volatile int AT1;
volatile bool Flag;
volatile float dbValue = 0.0;
uint32_t sampleRate = 500;

void setup() {
  Serial.begin(9600);
  tcConfigure(sampleRate);
  adcConfigure();
}

void loop() {
  if (Flag == 1) Serial.println(AT1);
}

void TC3_Handler(void) {
  
  // Acknowledge the interrupt (clear MC0 interrupt flag to re-arm)
  TC3->COUNT16.INTFLAG.reg |= 0b00010000;
}

void ADC_Handler() {
  AT1++;
  Flag = 1;
  //ADC->RESULT.reg
  ADC->INTFLAG.reg = ADC_INTFLAG_WINMON;  //Need to reset interrupt
}

void tcConfigure(int sampleRate) {
  // Configure asynchronous clock source
  GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID_TCC2_TC3_Val;  // select TC3 peripheral channel
  GCLK->CLKCTRL.reg |= GCLK_CLKCTRL_GEN_GCLK0;       // select source GCLK_GEN[0]
  GCLK->CLKCTRL.bit.CLKEN = 1;                       // enable TC3 generic clock

  // Configure synchronous bus clock
  PM->APBCSEL.bit.APBCDIV = 0;  // no prescaler
  PM->APBCMASK.bit.TC3_ = 1;    // enable TC3 interface

  /* Configure TC Mode
       0 COUNT16 | Counter in 16-bit mode
       01 COUNT8 | Counter in 8-bit mode
       10 COUNT32 | Counter in 32-bit mode
       11 - | Reserved
  */
  TC3->COUNT16.CTRLA.bit.MODE = 0x0;

  /* Configure Prescaler
       0x0 DIV1 | Prescaler: GCLK_TC
       0x1 DIV2 | Prescaler: GCLK_TC/2
       0x2 DIV4 | Prescaler: GCLK_TC/4
       0x3 DIV8 | Prescaler: GCLK_TC/8
       0x4 DIV16 | Prescaler: GCLK_TC/16
       0x5 DIV64 | Prescaler: GCLK_TC/64
       0x6 DIV256 | Prescaler: GCLK_TC/256
       0x7 DIV1024 | Prescaler: GCLK_TC/1024
  */
  TC3->COUNT16.CTRLA.bit.PRESCALER = 0x6;

  /* Configure Waveform Generation Operation
       0x0 NFRQ | Normal frequency | PER(1)/Max | Toggle No action
       0x1 MFRQ | Match frequency | CC0 | Toggle No action
       0x2 NPWM | Normal PWM | PER(1)/Max | Clear when counting up Set when counting down | Set when counting up Clear when counting down
       0x3 MPWM | Match PWM | CC0 | Clear when counting up Set when counting down | Set when counting up Clear when counting down 
  */
  TC3->COUNT16.CTRLA.bit.WAVEGEN = 0x1;  // "Match Frequency" operation

  // Initialize compare value
  TC3->COUNT16.CC[0].reg = (48000000) / (256 * 0.5);

  // Enable TC3 compare mode interrupt generation
  TC3->COUNT16.INTENSET.bit.MC0 = 0x1;  // Enable match interrupts on compare channel 0

  // Enable TC3
  TC3->COUNT16.CTRLA.bit.ENABLE = 1;

  // Wait until TC3 is enabled
  while (TC3->COUNT16.STATUS.bit.SYNCBUSY == 1)
    ;

  /* Set TC3 Interrupt Priority to Level 3 */
  NVIC_SetPriority(TC3_IRQn, 3);

  /* Enable TC3 NVIC Interrupt Line */
  NVIC_EnableIRQ(TC3_IRQn);
}

void adcConfigure() {
  ADC->REFCTRL.bit.REFSEL = ADC_REFCTRL_REFSEL_INTVCC1_Val;

  ADC->CTRLB.bit.RESSEL = ADC_CTRLB_RESSEL_12BIT_Val;

  ADC->CTRLB.bit.PRESCALER = ADC_CTRLB_PRESCALER_DIV32_Val;

  ADC->INPUTCTRL.bit.MUXPOS = g_APinDescription[A0].ulADCChannelNumber;

  ADC->CTRLB.bit.FREERUN = 0x1;

  ADC->CTRLA.bit.ENABLE = 0x1;

  ADC->INTFLAG.bit.RESRDY = 0x1;  // Clear ready flag

  ADC->SWTRIG.bit.START = 1;  // Start ADC

  ADC->INTFLAG.bit.RESRDY = 0x1;  // Discard first reading
}

Je ne sais pas quoi mettre dans le "void TC3_Handler(void) {" pour déclencher l'ADC.
Pouvez vous m'aidez?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.