IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

écriture dans un registe d'une carte STM32 discovery


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Par défaut écriture dans un registe d'une carte STM32 discovery
    Bonjour

    Je vous explose ma question:

    je travaille actuellement sur une carte STM32 discovery , avec un cortex STM32F100RB, et comme soft Atollic truestudio/STM32 lite.

    Donc voila , j aimerai utiliser les DAC de la carte sans passer par les bibliothèque fournie sur la carte. Donc pour cela j'ai créé mon driver, avec mon control register. et dans mon main j'initialise mon pointer a l'adresse 0x4000 7400. Lors de ma séquence d'initialisation j'envoie la valeur 0x00030003.

    le soucit qu il ce pause est que lorsque je debug ce programme et que je fais du pas à pas je n'écrit rien dans mon registre, le global de mon driver ou de mon registre est à 0. J'ai tenter d aller écrire la valeur 0xFFFF FFFF, idem même problème. Enfin j'ai tenter d aller écrire manuellement dans les registre impossible, sa reste a 0.

    Pour comprendre un peut mieux je vous envoie quelque ligne de code.

    Voila le MAIN:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include "DAC_struct_h.h"
    #include "CDSE_struct.h"
     
    int main(void)
    {
    ptr_DAC_perso = (volatile struct DAC_perso *) 0x40007400;
    CDSE_DAC_init();
    unsigned int Dac_out_perso1_init,Dac_out_pe rso2_init,Dac_out_perso1,Dac_o ut_perso2,DAC_test_init;
     
    DAC_test_init = ptr_DAC_perso -> CDSE_CTRL_REG.Global ;
    Dac_out_perso1_init= ptr_DAC_perso -> CDSE_DAC_DOR1.Global ;
    Dac_out_perso2_init= ptr_DAC_perso -> CDSE_DAC_DOR2.Global ;
     
    while (1)
    {
     
    ptr_DAC_perso -> CDSE_DAC_DHR12R1.Global = 0xFFFFFFFF ;
    ptr_DAC_perso -> CDSE_DAC_DHR12L1.Global = 0xFFFFFFFF ;
    ptr_DAC_perso -> CDSE_DAC_DHR8R1.Global = 0xFFFFFFFF ;
    ptr_DAC_perso -> CDSE_DAC_DHR12R2.Global = 0xFFFFFFFF ;
    ptr_DAC_perso -> CDSE_DAC_DHR12L2.Global = 0xFFFFFFFF ;
    ptr_DAC_perso -> CDSE_DAC_DHR8R2.Global = 0xFFFFFFFF ;
    ptr_DAC_perso -> CDSE_DAC_DHR12RD.Global = 0xFFFFFFFF ;
    ptr_DAC_perso -> CDSE_DAC_DHR12LD.Global = 0xFFFFFFFF ;
    ptr_DAC_perso -> CDSE_DAC_DHR8RD.Global = 0xFFFFFFFF ;
     
     
    Dac_out_perso1= ptr_DAC_perso -> CDSE_DAC_DOR1.Global ;
    Dac_out_perso2= ptr_DAC_perso -> CDSE_DAC_DOR2.Global ;
     
    }
    }
    une partie de mon driver:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    #ifndef DAC_struct_h_
    #define DAC_struct_h_
     
    struct CTRL_REG_bitfield_acces
    {
    unsigned int EN1 :1;
    unsigned int BOFF1 :1;
    unsigned int TEN1 :1;
    unsigned int TSEL1 :3;
    unsigned int WAVE1 :2;
    unsigned int MAMP1 :4;
    unsigned int DMA_EN1 :1;
    unsigned int DMAU_DRIE1 :1;
    unsigned int reserve1 :2;
    unsigned int EN2 :1;
    unsigned int BOFF2 :1;
    unsigned int TEN2 :1;
    unsigned int TSEL2 :3;
    unsigned int WAVE2 :2;
    unsigned int MAMP2 :4;
    unsigned int DMA_EN2 :1;
    unsigned int DMAU_DRIE2 :1;
    unsigned int reserve2 :2;
    };
     
     
    union CTRL_REG_acces
    {
    struct CTRL_REG_bitfield_acces CTRL_REG_bitfield;
    unsigned int Global;
    };
    .
    .
    .
    .
    struct DAC_perso
    {
    union CTRL_REG_acces CDSE_CTRL_REG;
    union DAC_SWTRIGR_access CDSE_DAC_SWTRIGR;
    union DAC_DHR12R1_access CDSE_DAC_DHR12R1;
    union DAC_DHR12L1_access CDSE_DAC_DHR12L1;
    union DAC_DHR8R1_access CDSE_DAC_DHR8R1;
    union DAC_DHR12R1_access CDSE_DAC_DHR12R2;
    union DAC_DHR12L1_access CDSE_DAC_DHR12L2;
    union DAC_DHR8R1_access CDSE_DAC_DHR8R2;
    union DAC_DHR12RD_access CDSE_DAC_DHR12RD;
    union DAC_DHR12LD_access CDSE_DAC_DHR12LD;
    union DAC_DHR8RD_access CDSE_DAC_DHR8RD;
    union DAC_DOR1_access CDSE_DAC_DOR1;
    union DAC_DOR2_access CDSE_DAC_DOR2;
    union DAC_SR_access CDSE_DAC_SR;
    };
     
    volatile struct DAC_perso *ptr_DAC_perso;
    #endif
    et enfin la fonction qui initialise les valeur dans mon registre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "CDSE_struct.h"
    #include "DAC_struct_h.h"
     
    void CDSE_DAC_init(void)
    {
     
    ptr_DAC_perso -> CDSE_CTRL_REG.Global = 0x00030003 ;
    }

    Je tien a m'excuser pour ce long message , plein de code , mais si quelqu'un a une solution sur le fait que je n'arrive a rien écrire dans mon registre sa m'aiderai grandement.

    Merci cordialement ezechkiel

  2. #2
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Citation Envoyé par Ezechkiel Voir le message
    Donc voila , j aimerai utiliser les DAC de la carte sans passer par les bibliothèque fournie sur la carte. Donc pour cela j'ai créé mon driver, avec mon control register.
    C'est typiquement pour éviter ça que les µcontrôleurs sont très souvent livrés avec des librairies. Tu essaies de réinventer la roue alors qu'on t'en a livré une qui tourne bien.

    En gros, les librairies t'évitent de te plonger dans la doc des périphériques et de perdre un temps précieux dans le debug. Sinon pour résoudre malgré tout ton problème, qui est vraiment très spécifique, je n'ai pas trop d'idées là sur le moment, désolé.

    - Peut-être que le registre est en readonly hardware, auquel cas ton debuggeur ne pourra pas le relire.

    - Peut-être que ta structure ne pointe pas au bon endroit

    - Peut-être un warning qui t'aurait échappé parce que le compilo est configuré en mode trop permissif.

    A+

    Pfeuh

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Par défaut
    Citation Envoyé par pfeuh Voir le message
    - Peut-être que le registre est en readonly hardware, auquel cas ton debuggeur ne pourra pas le relire.

    - Peut-être que ta structure ne pointe pas au bon endroit

    - Peut-être un warning qui t'aurait échappé parce que le compilo est configuré en mode trop permissif.

    Pfeuh
    Merci d avoir répondu si vite

    j'ai bien vérifié sur la Data le registre est bien read/write pas de souci sur ce plan, pour l'adresse pointé, elle est la même que celle pointé par le pointeur de la bibliothèque et qui est en accord avec celle de la DATA, et enfin je n'est aucun warning .

    C'est vrais que je veux réinventer la roue, mais bon je pige des grillons a leur bibliothèque et en faisant cela sa me permet de mieux les comprendre.

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2011
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 3
    Par défaut
    probléme résolut, la solution ce trouve dans le RCC (reset clock control)

    merci beaucoup

Discussions similaires

  1. Lecture et écriture des données dans une carte à puce
    Par junior222 dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 30/11/2015, 15h57
  2. Problème écriture dans un tableau d'une structure
    Par Sasuke1234 dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/01/2014, 15h24
  3. Problème écriture dans une dans une textarea (caractères)
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 02/02/2006, 14h26
  4. chercher des rue dans une carte
    Par .:dev:. dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 21/09/2005, 10h29
  5. charger une scene dans la memoire de la carte video
    Par Arnaudv6 dans le forum OpenGL
    Réponses: 10
    Dernier message: 11/09/2004, 01h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo