[Programmation] UART ne fonctionne plus après DMA
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

UART ne fonctionne plus après DMA



  1. #1
    Simlock

    UART ne fonctionne plus après DMA


    ------

    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.

    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
    }
    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.

    J'utilise un dsPIC33EP512MU514 avec XC16.

    Merci pour votre aide .

    -----

  2. #2
    SportsEngine

    Re : UART ne fonctionne plus après DMA

    Bonjour,

    Après un reset les registres ne gardent rien en mémoire, donc c'est soit un problème dans l'initialisation du périphérique, soit un soucis hard (mais je privilégierais plus le programme, les MCU sont quand même costaud, j'en suis pas à ma première fausse manip).

    Récemment j'ai eu un soucis avec l'UART, c'était sans DMA mais peut être que ça pourra t'aiguiller sur une piste :
    D'habitude dans ma séquence d'initialisation je mets tous les ports en numérique (ANSELx=0, où x correspond au port concerné, par exemple ANSELA). Dans un petit programme de test où je n'avais pas besoin de GPIO j'ai oublié d'ajouter ces fonctions. Résultat, bien que j'ai initialisé les pins de l'UART, rien ne sortait du MCU (PIC24EP512GU810). Une fois que j'ai ajouté l'initialisation des registres ANSELx ça fonctionnait.

    En espérant vous avoir aidé!
    Dernière modification par SportsEngine ; 21/04/2017 à 16h36.

  3. #3
    RISC

    Re : UART ne fonctionne plus après DMA

    Salut Simlock,

    La référence que tu as donnée ( dsPIC33EP512MU514 ) n'existe pas...
    Il est impossible que le circuit garde une valeur de registre (SFR) après extinction. Ces registres sont volatiles (comme la RAM) et perdent leur valeur lorsque l'alimentation disparait.
    La valeur de démarrage (au reset) pour chaque registre figure dans la datasheet.

    Mon intuition me dit que tu as probablement un PB d'initialisation des broches car ce dsPIC possèdent des broches assignables aux périphériques digitaux (PPS) qui permettent de "connecter" les périphériques internes avec les broches externes.

    Dans le family reference manual (FRM) sur le DMA pour le dsPIC33EP512MU810 il existe un exemple de code pour l'UART avec le DMA que j'ai déjà utilisé et modifié pour faire le mode ping-pong.

    bien sur je suppose que ton hardware est OK mais sans voir le schéma...

    a+
    Dernière modification par RISC ; 22/04/2017 à 00h09.

  4. #4
    Simlock

    Re : UART ne fonctionne plus après DMA

    Merci pour vos réponses.

    Désolé pour la faute de frappe, je parle du dsPIC33EP512MU814.

    Je n'ai pas de problème avec l'initialisation des broches assignables, mon programme est fonctionnel et est déjà utilisé par des personnes mais je souhaite optimisé son fonctionnement et passer au DMA.

    J'ai justement utilisé l'exemple de microchip pour tester le DMA mais depuis, je n'arrive plus à avoir un signal sur mon UART...

    Peut être que j'ai fait une fausse manip... je vais refaire des tests mais comme dit SportsEngine, c'est plutôt solide et je n'ai rien fait d'exceptionnel sur les broches du dsPIC.

  5. A voir en vidéo sur Futura
  6. #5
    RISC

    Re : UART ne fonctionne plus après DMA

    Salut,

    Ci-joint un ancien exemple que j'avais utilisé et qui fonctionne sur la carte EXPLORER16.
    Il utilise le dsPIC33EP512MU810 donc tu devrais pouvoir l'adapter très facilement.
    Cet exemple utilise le mode PING-PONG sur l'UART2 et renvoie les caractères 8 par 8 envoyés par un logiciel terminal 1 par 1.

    a+
    Fichiers attachés Fichiers attachés
    Dernière modification par RISC ; 24/04/2017 à 21h39.

Discussions similaires

  1. Groupe hydrophore fonctionne après arrêt du puisage ?
    Par madobo dans le forum Bricolage et décoration
    Réponses: 22
    Dernier message: 04/06/2016, 19h56
  2. [Programmation] UART et UART FIFO
    Par mril232 dans le forum Électronique
    Réponses: 1
    Dernier message: 10/05/2016, 14h58
  3. [Blanc] Apres F2 mon lv fagor ne fonctionne plus
    Par JMO34 dans le forum Dépannage
    Réponses: 0
    Dernier message: 03/06/2015, 15h53
  4. Réponses: 7
    Dernier message: 26/08/2014, 14h01
  5. Réponses: 6
    Dernier message: 03/07/2012, 20h03
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...