Bonjour,
Je programme pour le moment un str912, je dois faire l'acquisition de 12 bits provenant d'un ADC chaque fois qu'une interruption apparait.
Je dois ensuite incrémenter des canaux 16 bits selon la valeur(12bits) que j'ai obtenu (4096 canaux vu que j'ai un adc 12 bits).
J'arrive à incrémenter les canaux correctement sauf quelques uns qui s'incrémente de 2 (parfois).
Habituellement ceux qui finisse par l'adresse 0x_ _ _ 0 mais ce n'est vrai que dans le cas ou l'adc (délivre des valeurs qui se suives (voir l'exemple en dessous)).
Si vous pouviez me dire quel est mon erreur ca me serait d'un grand secours (ca fait quelques temps que je cherche).
Voici la partie du programme:
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 LDR R7, =0x04002BB0 /*;Adresse pour traitement octet 1*/ LDR R11, =0x5800C3FC /*;Adresse des 4bits de poids fort Port4*/ LDRB R11, [R11] /* R11 = contenu de l'adresse 0x5800C3FC*/ STRB R11, [R7] /*;Place les 4bits de poids fort à l'adresse de traitement*/ LDR R7, =0x04002BB1 /*;Adresse de traitement octet 2 */ LDR R11, =0x5800A3FC /*;Adresse des 8bits de poids faibles P6*/ LDRB R11, [R11] /* R11 = Contenu de 0x5800A3FC */ STRB R11, [R7] /*;Place les 8bits de poids faibles à l'adresse de traitement*/ LDR R7, =0x04002BB0 /* R7 = 0x04002bb0 */ LDR R7, [R7] /* Places la valeur des 12 bits reçus dans le registres R7 (adresse 0x04002BB0*/ ADD R10,R7,R7 /* R10 = 2 * valeur 12 bits réceptionnée */ LDR R8, =0x04002BC0 /* Charge adresse du début de tableau contenant les 4096 canaux */ ADD R10,R8,R10 /* R10 = Valeur 12 bit(16 bits)*2 + Adresse début tableau => ad. canal */ LDRH R11, [R10] /* On pointe R11 sur l'adresse du canal*/ ADD R11, R11,#1 /* R11 = R11+1 ;La valeur du canal est incrémenté */ STRH R11, [R10] /* On place R11 dans le canal correspondant*/
Voici ce que j'obtient en mémoire :l' adc émettant une fois les nombres de 1 à 53:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 0x0400BC0 0000 0001 0001 0001 0001 0001 0001 0001 [Canaux 0 à 7] 0x0400BD0 0002 0001 0001 0001 0001 0001 0001 0001 [Canaux 8 à 15] 0x0400BE0 0002 0001 0001 0001 0001 0001 0001 0001 [Canaux 16 à 23] 0x0400BF0 0001 0001 0001 0001 0001 0001 0001 0001 [Canaux 24 à 31] 0x0400C00 0002 0001 0001 0001 0001 0001 0001 0001 [Canaux 32 à 39] 0x0400C10 0001 0001 0001 0001 0001 0001 0001 0001 [Canaux 40 à 47] 0x0400C20 0002 0001 0001 0001 0001 0001 0001 0001 [Canaux 48 à 53]
Merci bcp pour votre aide...
Partager