Partage
  • Partager sur Facebook
  • Partager sur Twitter

Développement d'un Driver

Ecriture dans la mémoire Microcontroleur

Sujet résolu
    3 février 2021 à 16:22:29

    Bonjour je suis en charge de l'écriture d'un driver pour un processeur ARM (Cortex A8 ArmV7-A).

    Je suis en charge de développer le code : (grosso modo voici mon code) :

    J'essai de mettre le registre à l'adresse (baseAdd + CM_PER_RNG_CLKCTRL) à 0x00000000.

    #define SOC_PRCM_REGS                        (0x44E00000)
    #define CM_PER_RNG_CLKCTRL   (0x90)
    #define HWREG(x) (*((volatile unsigned int *)(x)))
    void initRngClockModule(unsigned int baseAdd){
    	HWREG(baseAdd + CM_PER_RNG_CLKCTRL) &= 0x00000000;
    }
    
    void initRng(void){
    	initRngClockModule(SOC_PRCM_REGS);
    }
    
    void main(void){
      initRng();
    }
    
    
    

    Cependant quand j'exécute ce code en mode debug, le code ne fonctionne pas le registre reste dans son état initiale à la valeur 0x00030000 (valeur de reset) même en mode pas à pas.

    D'où ceci peut t-il venir ?

    Je ne suis pas capable d'écrire dans la mémoire du processeur : Je n'ai aucune erreur de segmentation.

    Je pense que ceci vient de la MMU mais je ne suis pas sur.

    Merci d'avance. 

    Kasimashi.

    -
    Edité par Kasimashi 3 février 2021 à 16:29:03

    • Partager sur Facebook
    • Partager sur Twitter
      3 février 2021 à 18:25:50

      Bonjour,

      Je n'ai pas trouvé de documentation sur ce registre en particulier, mais sur les registres de type CM_PER_xxx_CLOCKCTRL le 3 de 0x30000 semble souvent correspondre à des bits en lecture seule.

      • bits 17-16: IDLEST / module idle status 
        0x0 = Func : Module is fully functional, including OCP
        0x1 = Trans : Module is performing transition: wakeup, or sleep, or sleep abortion
        0x2 = Idle : Module is in Idle mode (only OCP part). It is functional if using separate functional clock
        0x3 = Disable : Module is disabled and cannot be accessed => le 0x30000
      • bits 1-0: MODULEMODE / Control the way mandatory clocks are managed
        0x0 = DISABLED : Module is disable by SW
        0x2 = ENABLE : Module is explicitly enabled.

      Donc il semble qu'il faille écrire 2 dans le registre, puis attendre que les bits 17-16 passent à 0 (ça correspond au code que tu peux trouver si tu recherches CM_PER_RNG_CLKCTRL sur google).

      • Partager sur Facebook
      • Partager sur Twitter
        3 février 2021 à 18:50:23

        Rien à dire c'est parfait ! Merci alexisdm problème résolu : je n'avais pas vu dans la doc le type "R" de ce bit là.

        Merci beaucoup ! 

        Ci dessous le résultat du changement :

        • Partager sur Facebook
        • Partager sur Twitter

        Développement d'un Driver

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown