vecteur interruption sur 18f4550 avec bootloader
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

vecteur interruption sur 18f4550 avec bootloader



  1. #1
    invite6802cc87

    vecteur interruption sur 18f4550 avec bootloader


    ------

    Bonsoir tout le monde

    je voulais savoir si quelqu'un avait déjas essayer de programmer un programme contenant une interruption sur un 18f4550 contenant un Bootloader ?
    sachant que le programme doit étre écrit a partir de la zone 0x1000 (la zone 0x000 a 0x0ff étant réservé au bootloader), et sachant que les interruptions sur le 18f4550débute a 0x00008 et ne peux être changé ... la confusion s'installe...

    que doit je faire ?! comment puis-je changé le vecteur des interruptions pour qu'il soit au dela de 0x1000

    merci de m'aidé (pas de solution depuis 2 jours)

    bonne soirée !

    -----

  2. #2
    RISC

    Re : vecteur interruption sur 18f4550 avec bootloader

    Salut,

    C'est un PB classique. Lorsque la table de vecteur d'interruptions de trouve dans la partie bootloader il suffit de faire une table d'indirection.
    C'est à dire que les vecteurs d'interruption pointent vers une table de pointeurs de fonctions.
    Il existe des exemples de bootloader USB dans les librairies microchip
    Une fois installées regarde dans ce répertoire : c:\microchip_solutions_v2013-02-15\USB\Device - Bootloaders\HID\

    a+

  3. #3
    invite6802cc87

    Re : vecteur interruption sur 18f4550 avec bootloader

    bonsoir, merci de m avoir répondu

    au fait, après avoir publié le message j'ai regretté car j'ai finalement compris ce qu'il fallait faire (comme tu viens de l expliquer RISC)

    le code C:

    Code:
    #pragma code _HIGH_INTERRUPT_VECTOR = 0x000008
    void _high_ISR (void)
    {
    _asm 
    bsf  PORTB,1,0
    call  mon interruption,1 
    _endasm
    }
    le code ASM:

    Code:
    	List p=18F4550	; processeur utilisé 
    	        #include <p18F4550.inc>
    
    org  0x1008
    
    mon interruption:
    
    nop
    nop
    nop
    
    return
    
    END
    mais j'ai quand même bien fait de posté car je bloque encore une fois et la j'ai vraiment besoin de vos lumière...

    quand "mon interruption" fait un return, on reviens sur _endasm... ou placer le "retfie" ... ??!!

  4. #4
    invite6802cc87

    Re : vecteur interruption sur 18f4550 avec bootloader

    en d autre terme comment sortir de la routine d interruption avec une seul instruction tout en remettent INTCON,GIE a 1 ??!!

  5. A voir en vidéo sur Futura
  6. #5
    invite6802cc87

    Re : vecteur interruption sur 18f4550 avec bootloader

    Bonjour

    voila ce que j'ai fait aujourd’hui:

    Code:
    #pragma code _HIGH_INTERRUPT_VECTOR = 0x000008
    void _high_ISR (void)
    {
    _asm 
    bsf  PORTB,1,0
    goto  mon interruption 
    _endasm
    }
    le code ASM:

    Code:
    	List p=18F4550	; processeur utilisé 
    	        #include <p18F4550.inc>
    
    org  0x0808
    
    mon interruption
    nop
    nop
    nop
    retfie
    
    END
    bon la sa marche dé que l'interruption ce termine avec le "retfie" le programme repointe la ou il était... sauf que c'est pas toujours le cas:
    si je met une boucle dans mon interruption:

    Code:
    	List p=18F4550	; processeur utilisé 
    	        #include <p18F4550.inc>
    
    org  0x0808
    
    mon interruption
    nop
    
    call LOOP
    
    nop
    retfie
    
    END
    aprés le "retfie" le programme ne ce pointe pas sur la ou il était avant mais il retourne au "goto mon interruption " ce qui a pour conséquence de relancé l'interruption et la fin de cette dernier rebelot

    j'ai l impression de n avoir rien compris au PIC

    Help SVP !

    merci

  7. #6
    RISC

    Re : vecteur interruption sur 18f4550 avec bootloader

    Salut,

    Le problème est que dans ton programme d'interruption tu ne sauves pas le contexte...
    Je te recommande de lire la bible en ce qui conerne les PICs et l'assembleur : le cours de Bigonoff

    a+

  8. #7
    invite6802cc87

    Re : vecteur interruption sur 18f4550 avec bootloader

    Bonjour

    j'ai enfin réussi, après une semaine d acharnement

    Citation Envoyé par RISC Voir le message
    Salut,

    Le problème est que dans ton programme d'interruption tu ne sauves pas le contexte...
    Je te recommande de lire la bible en ce qui conerne les PICs et l'assembleur : le cours de Bigonoff

    a+
    oui oui j'ai lu et relu le cours de tonton Bigonoff !

    au fait c'était un truc tout bête (je comprend dailleur toujours pas comment je ne l est pas remarqué!) dans l interruption, j'ai oublié d arrêter le TIMER par conséquence dans l interruption un débordement s’effectue et dés que le GIE de INTCON ce remetté sur 1, une nouvelle interruption ce déclenche d'ou la boucle...

    Merci pour votre aide et surtout a vous RISC pour la table d'indirection

  9. #8
    RISC

    Re : vecteur interruption sur 18f4550 avec bootloader

    Salut,

    Je suis pas sur de comprendre ton message sur l'interruption...
    Peux-tu faire voir ton code d'interruption ?

    a+

  10. #9
    invite6802cc87

    Re : vecteur interruption sur 18f4550 avec bootloader

    Bonjour RISC

    Code:
    org      0x1008         ;adresse débute interruption 
    
    clrf      TMR0                      ; effacé valeur timer
    bcf	  INTCON,TMR0IF        ;remetre le flag TIMER a 0
     
    bcf      T0CON,7                 ;STOPER LE TIMER
     
    call      LOOP                     ;boucle 
    
    movlw  b'00001000'
    xorwf   PORTB                   ;inversé etat de PORTB,3
    
    CALL    LOOP                     ;boucle
    
    bsf      T0CON,7                 ;redémarrer le TIMER
    
    
    retfie                         ; retour avec GIE de INTCON a 1
    ce que j'ai oublié de faire et qui n'est pas de mes habitudes, c'est de STOPER le TIMER "bcf T0CON,7" après avoir entré dans la routine d interruption, comme je ne le feusé pas le TIMER continuer a compté dans la routine, ce qui a pour effet de déclencher un nouveau débordement (flag timer a 1) qui prendra effet dés que je resort de la routine d'interruption (parce que a ce moment la avec retfie, GIE redeviens a 1).... et rebelote

    comme je n'est jamais utilisé un bootloader je me disé que sa venais sans doute de lui... et j'ai pas fait attention a l erreur bête dans ma routine d interruption... débile! quand j y pense avoir mis une journée pour sa!

    mais maintenant je sais le faire grâce a vous

    merci

Discussions similaires

  1. Problème avec interruption externe sur PIC24F08KA102
    Par invite73e352e5 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 17/07/2012, 19h19
  2. Problème avec interruption externe sur PIC24F08KA102
    Par invite73e352e5 dans le forum Électronique
    Réponses: 7
    Dernier message: 17/07/2012, 15h35
  3. Interruption sur portB (PIC 18F4550)
    Par invite0155ce91 dans le forum Électronique
    Réponses: 5
    Dernier message: 15/06/2012, 14h27
  4. probleme 2 interruption pic 18f4550 pic ->plante
    Par invite4ec38ea0 dans le forum Électronique
    Réponses: 5
    Dernier message: 28/08/2010, 07h51
  5. bootloader 18f4550 et VID PID
    Par invite1208e497 dans le forum Électronique
    Réponses: 0
    Dernier message: 27/11/2008, 22h31
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...