Bonjour,
Comme le titre peut vous le faire sous entendre, je viens vers vous car je cherche à utiliser le DMA avec l'ADC1 du dsPIC.
Pour résumer mon affaire, je cherche à échantillonner AN3, AN4, AN5, AN8 et AN9 pour les stocker successivement dans un tableau. Cependant je suis un peu bloqué pour la configuration du DMA.
Voilà ce que j'ai fais pour le moment :
Code:void Init_Adc2_Dma(void){ PMD3bits.AD2MD = 0; // Active l'ADC 2 DMA4CONbits.CHEN = 0; // Enable DMA4 Delay(1); AD1CON1 = 0; PIN_PT1_TR_AMPLI_ANA_DIR = INPUT; PIN_PT2_TR_AMPLI_ANA_DIR = INPUT; PIN_VHF_TR_AMPLI_ANA_DIR = INPUT; PIN_TENSION_RADAR_ANA_DIR = INPUT; PIN_TENSION_HF_ANA_DIR = INPUT; ANSELBbits.ANSB3 = 1; // PIN 13 (VHF_Tr_Ampli) en Analogique ANSELBbits.ANSB4 = 1; // PIN 12 (PT2_Tr_Ampli) en Analogique ANSELBbits.ANSB5 = 1; // PIN 11 (PT1_Tr_Ampli) en Analogique ANSELBbits.ANSB8 = 1; // PIN 21 (tension_Radar) en Analogique ANSELBbits.ANSB9 = 1; // PIN 22 (tension_HF) en Analogique AD2CON1bits.ADSIDL = 0; //Continue operation in Idle mode AD2CON1bits.SIMSAM = 0; //sample in sequence AD2CON1bits.FORM = 1; //signed integer Dout=ssss sddd dddd dddd AD2CON1bits.SSRCG = 0; //Internal counter ends sampling and starts conversion (auto-convert) AD2CON1bits.SSRC = 4; //2: timer 3 4: timer 5 7:auto-convertInternal counter ends sampling and starts conversion (auto-convert) AD2CON1bits.ASAM = 1; //Sampling begins immediately after last conversion. SAMP bit is auto-set AD2CON1bits.SAMP = 0; //ADC sample/hold amplifiers are holding AD2CON2bits.VCFG = 0; // Vref = AVdd-AVss AD2CON2bits.CSCNA = 1; // scan inputs during Sample A bit AD2CON2bits.CHPS = 0; // sample ch0 AD2CON2bits.BUFM = 0; // Always starts filling buffer from the beginning AD2CON2bits.ALTS = 0; // Do not Alternate with sample A and B AD2CON2bits.SMPI = 0; // Interruption à chaque conversion AD2CON3bits.ADRC = 0; //FCY AD2CON3bits.SAMC = 2; //Tsample; //3 TAD Not used with Timer 3 AD2CON3bits.ADCS = 3; //ADCSconf12bits; //Conversion Clock (voir define en haut) AD2CHS0bits.CH0NA = 0; AD2CHS0bits.CH0NB = 0; AD2CHS0bits.CH0SA = 0; AD2CHS0bits.CH0SB = 0; AD2CSSL = 0; //Pas de scan AD2CSSLbits.CSS3 = 1; // Scan AN3 AD2CSSLbits.CSS4 = 1; // Scan AN4 AD2CSSLbits.CSS5 = 1; // Scan AN5 AD2CSSLbits.CSS8 = 1; // Scan AN8 AD2CSSLbits.CSS9 = 1; // Scan AN9 // reset ADC interrupt flag IFS0bits.AD1IF = 0; IPC3bits.AD1IP=7; AD2CON1bits.ADDMABM =0; // Don't Care: ADC address generation is ignored by DMA AD2CON2bits.SMPI = 5; // Nombre de signaux à échantillonner AD2CON4bits.DMABL = 5; // Nombre de signaux à échantillonner AD2CON4bits.ADDMAEN = 0; AD2CON1bits.ADON = 1; }
Merci d'avance !
Dylan
-----