Bonjour,
Je découvre le DMA en ce moment et j'aimerais le mettre en oeuvre.
Mais depuis que j'ai fait mon 1er test, mon module UART ne fonctionne plus (sans DMA) et cela sur 2 cartes...
Ma première question est donc, y a t'il un registre à reset lorsque l'on souhaite revenir au pilotage sans DMA ? J'ai mis en commentaire tout le code ci dessous mais mon UART ne fonctionne plus. Par contre j'ai programmé une troisième carte sans avoir testé le DMA et elle fonctionne correctement.
Peut être que j'ai vraiment m**dé sur l'hardware et que la broche du PIC ne fonctionne plus mais je viens vers vous pour me retirer ce doute.Code:static void HARD_DMAUART () { // Associe le canal DMA 0 à la transmission UART DMA0REQ = 0x001F; // Select UART2 Transmitter DMA0PAD = ( volatile uint16_t ) &U2TXREG; // Configure DMA Channel 0 to: // Transfer data from RAM to UART // One-Shot mode // Register Indirect with Post-Increment // Using single buffer // 8 transfers per buffer // Transfer words DMA0CONbits.AMODE = 0; // Register Indirect with Post-Increment mode DMA0CONbits.MODE = 1; // One-Shot, Ping-Pong modes disabled DMA0CONbits.DIR = 1; // Read from DPSRAM (or RAM) address, write to peripheral address DMA0CONbits.SIZE = 0; // Byte DMA0CNT = 7; // 8 DMA requests DMA0STAL = __builtin_dmaoffset (&bufferA); DMA0STAH = __builtin_dmapage (&bufferA); DMA0STBL = __builtin_dmaoffset (&bufferA); DMA0STBH = __builtin_dmapage (&bufferA); // Enable DMA Interrupts IFS0bits.DMA0IF = 0; // Clear DMA Interrupt Flag IEC0bits.DMA0IE = 1; // Enable DMA interrupt }
J'utilise un dsPIC33EP512MU514 avec XC16.
Merci pour votre aide .
-----