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:
#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:
#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:
#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
-----