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