Bonjour,
Je souhaite apprendre le fonctionnement de la DMA sur les microcontrôleurs PIC18F j'utilise un PIC18F25K42 pour les essaies ...
J'utilise le code d'exemple ( TB3164 microchip ).
Mais cela ne fonctionne pas ( dans le simulateur et en mode debug avec ICD3)
voici le code :
Le programme reste indéfiniment sur le test de bit PIR2bits.DMA1DCNTIF ....Code:#include <xc.h> #include <stdint.h> uint8_t Array1[10]; uint8_t Array2[10]; uint8_t i; void main(void) { //Initialize the Arrays for(i=0; i<10 ; i++) { Array1[i] = i+1; Array2[i] = 0; } //Initialize DMA1 DMA1SSA = (uint16_t) Array1; //Set source start address DMA1DSA = (uint16_t) Array2; //Set destination start address DMA1CON1bits.SMR = 0b00; //Choose GPR space as source memory DMA1CON1bits.SMODE = 0b01; //Increment source address on each transaction DMA1CON1bits.DMODE = 0b01; //Increment destination address on each transaction DMA1SSZ = 0x0A; //Set 10 bytes for source size DMA1DSZ = 0x0A; //Set 10 bytes for destination size DMA1CON1bits.SSTP = 0b0; //Clear source reload stop bit DMA1CON1bits.DSTP = 0b1; //Set destination reload stop bit DMA1CON0bits.DMA1SIRQEN = 0b0; //Source Trigger is not allowed to start DMA transfer // Use default priority level // Lock priority to grant memory access asm ("BANKSEL PRLOCK"); asm ("MOVLW 0x55"); asm ("MOVWF PRLOCK"); asm ("MOVLW 0xAA"); asm ("MOVWF PRLOCK"); asm ("BSF PRLOCK, 0"); DMA1CON0bits.DMA1EN = 1; //Enable DMA DMA1CON0bits.DMA1DGO = 1; //Start Transfer while (0 == PIR2bits.DMA1DCNTIF){} //Wait after message transfer completed while(1); }
sans modifier aucune valeur du tableau Array2
avez vous une expérience ou une idée, c'est la première fois que j'utilise la DMA.
Merci d'avance.
-----