2017-08-02 8 views
2

En MPLAB, j'ai besoin d'utiliser le chargeur de démarrage pour PIC32MX795F512L. Je suis capable de programmer la section de démarrage dans la mémoire de démarrage kseg jusqu'à 0x8fc00000 et le code de l'application dans kseg0_program_mem à 0x9d000000. Je peux passer du bootloader à l'application en utilisant la commande jump to addr mais je suis confronté à un problème lors du passage de l'application au bootloader. J'ai essayé avec jump to addr (adresse de bootloader) mais ça ne marchera pas. S'il vous plaît, aidez-moiC embarqué, configuration du chargeur d'amorçage pour PIC32MX795F512L

Répondre

0

Utilisez simplement une commande de réinitialisation, cela vous ramènera à l'adresse de démarrage du processeur. Vérifiez les bits POR pour une réinitialisation SW pour voir si vous avez provoqué la réinitialisation ou si la carte était juste sous tension.

+0

Vérification de la même procédure. Mais il n'est pas réinitialisé à l'adresse du bootloader –

+0

utilisez: asm ("reset"); et dans le chargeur de démarrage vérifier si (RCONbits.SWR)/* J'ai déclenché le chargeur de démarrage */ – blsmit5728

+0

Cela a fonctionné. Merci –

0

J'ai trouvé dans l'un des nombreux pdf est pour mon PIC32MX270, je crois qu'il est cohérent pour toute la famille PIC32MX:

/* The following code illustrates a software Reset */ 
// assume interrupts are disabled 
// assume the DMA controller is suspended 
// assume the device is locked 
/* perform a system unlock sequence */ 
// starting critical sequence 
SYSKEY = 0x00000000; //write invalid key to force lock 
SYSKEY = 0xAA996655; //write key1 to SYSKEY 
SYSKEY = 0x556699AA; //write key2 to SYSKEY 
// OSCCON is now unlocked 
/* set SWRST bit to arm reset */ 
RSWRSTSET = 1; 
/* read RSWRST register to trigger reset */ 
_excep_code = RSWRST; 
/* prevent any unwanted code execution until reset occurs*/ 
while(1); 

Le while (1) verrouille également l'uC de sorte que le chien de garde devrait réinitialiser l'appareil si tout le reste échoue. J'ai aussi ce code dans mon gestionnaire d'exceptions (system_exceptions.c si vous utilisez Harmony), de cette façon quand quelque chose se passe mal (DMA catastrophe ou vous essayez de sprintf (foo_string, "% f", NAN)), l'appareil va réinitialiser au lieu de devenir un presse-papiers.