programmation d'un pic32mx795f512l
Répondre à la discussion
Affichage des résultats 1 à 23 sur 23

programmation d'un pic32mx795f512l



  1. #1
    davidif

    programmation d'un pic32mx795f512l


    ------

    Bonjour,

    Je viens de récupérer mon circuit imprimé qui embarque ce type de microproc et ayant déjà fait un échantillon de soft fonctionnel sur le starter kit ethernet de Microchip ou je sortais 2 pmw j'ai donc ballancé le même soft sur ma carte, la prog c'est d'ailleurs fait correctement rentré sur ma carte, seulement je ne perçois pas de vie sur mes pwm ou ailleurs.

    Afin d'orienter mon diagnostic, j'aimerai avoir quelques confirmation sur mon raisonnement :

    La question est qu'appartir du moment ou j'arrive à le programmer sur mon CI, c'est déjà bon signe ? ça veut dire qu'il est bien alimenté et que l'horloge est bonne ? si j'ai bien compris.

    Après ça reste du code, et donc un paramétrage correct des registres ? seulement si c'est le cas, je ne comprend par pourquoi ça ne fonctionnerai pas sur ma carte alors que ça fonctionne sur le starter kit alors qu'il n'y a pas de grandes différence entre les deux.

    Merci pour l'aide apporté, qui me permettra d'orienter mes recherche

    -----
    Dernière modification par davidif ; 11/02/2015 à 10h45.

  2. #2
    paulfjujo

    Re : programmation d'un pic32mx795f512l

    bonjour,


    que l'horloge est bonne ?
    Là c'est bien moins sur ..la programmation n'a pas besoin de l'horloge du PIC
    puisque c'est l'horloge du ICSP qui cadence..
    Reste à verifier si les bits de config sont corrects.. en particulier pour la definition de l'horloge ..FOSC

  3. #3
    davidif

    Re : programmation d'un pic32mx795f512l

    Merci pour l'info paulfjujo

    OK, effectivement je suis en train de vérifie ça, seulement j'ai appliqué la même config d'horloge que sur mon starter kit donc en théorie je ne devrais pas avoir de problème ? J'utilise l'horloge interne du micro, par précaution j'ai quand même prévu le quartz a l'extérieur qui est cablé comme sur le starter kit.

    Mais bon je vérifie si une différence de programmation subsiste sur mon CI, pour l'instant je ne vois pas trop, mais on continu de chercher

  4. #4
    davidif

    Re : programmation d'un pic32mx795f512l

    j'examine la docs concernant l'horloge et si j'ai bien fait attention, il y a rien de hard à faire pour utiliser l'horloge interne ? tous ce passe en soft ?

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

    Re : programmation d'un pic32mx795f512l

    Bon ça y est ! y a de la vie dans ce micro, reste plus qu'à comprendre pourquoi et comment il agit comme il agit ? (: allé au boulot

  7. #6
    davidif

    Re : programmation d'un pic32mx795f512l

    Bonjour, suite la programmation du pic32 que j'effectue, il ce trouve qu'un problème subsiste au niveau du port A (RAx).

    Je n'arrive pas à le configurer correctement, j'ai donc attribué les entrée et sortie utilisé comme tel :

    LATA=0x0000; //Clear PortA
    TRISA=0x0000; // Tout en sortie

    Donc simple, et quand je test mes sortie, j'ai des trames qui circule quand je met un "1" en sortie et la sortie ce met à "0" lorsque que je met "0"

    J'ai constaté effectivement que sur ce port là, on avait également de l'I²C et également du JTAG, j'ai donc voulu dévalider ces bus là en faisant comme ça :


    DDPCONbits.JTAGEN=0; // desable JTAG PORT sur portA
    DDPCONbits.TROEN=0; // desable JTAG PORT sur portA
    DDPCONbits.TDOEN=0; // desable JTAG PORT sur portA

    I2C2CON=0X0000; //desable i2c2

    seulement le problème persiste, auriez vous une idée à ce sujet

    Merci ppour votre aide

  8. #7
    RISC

    Re : programmation d'un pic32mx795f512l

    Salut,

    Vérifies ton schéma électronique en comparant avec le PIC32 ethernet starter kit (alimentations, condensateurs de découplage, ...) voir figure 2-1 page 45.
    As-tu bien mis un condensateur de 10uF tantale/céramique sur la broche Vcap ?
    Comment as-tu cablé la broche ICSP (resistance de pull up de 4.7K) ?
    As-ut un quartz sur ta carte ? quelles fréquence ? quelles valeurs de capas aux bornes ?

    Ensuite il faut bien sur commencer par les choses simples...faire clignoter une led pour vérifier si les bits de config sont bon et que le PIC32 (PLL etc...) est bien configure à la bonne fréquence.

    a+

  9. #8
    davidif

    Re : programmation d'un pic32mx795f512l

    Merci RISC pour tes conseils, en fait mon micro fonctionne correctement dans l'ensemble, il ce programme correctement, mes PWM fonctionne également correctement, certaines de mes sorties font bien basculer des relais et répondent bien, j'ai câblé un quartz de 8 MHz par précossion car j'utilise l'horloge interne du micro et j'ai pu configurer correctement les timers, seul le port A ne répond pas correctement et il ce balade des trames, je ne comprend pas pour le moment ce qui ce passe car je pensais avoir de valider les bus.

    Je vais ré vérifier le schéma comme tu me l'as conseillé, et continue à investiguer

  10. #9
    RISC

    Re : programmation d'un pic32mx795f512l

    Salut,

    Il faut absolument désactiver le JTAG pour être sûr que les broches partagées entre le JTAG et les ports d'E/S soient libérées pour le mode E/S.
    Utilises-tu les librairies du compilateur XC32 (PLIB) ?

    Depuis 2014, les librairies PLIB ne sont plus supportées. Le framework Harmony a remplacé les librairies. C'est beaucoup plus puissant mais aussi plus compliqué car on ne touche plus du tout aux registres ;=)
    D'ailleurs pour les PIC32MZ n'ont pas de librairies, il faut absolument utiliser Harmony.

    Ta ligne devrait suffire :
    Code:
    DDPCONbits.JTAGEN=0; // disable JTAG PORT sur portA
    Fait simplement une boucle qui fait basculer chaque broche (par exemple passer de 0xAA à 0x55 le port A (LATA) )

    a+

  11. #10
    davidif

    Re : programmation d'un pic32mx795f512l

    bonjour RISC, ça y est, c'est réglé, en plus d’inhiber le JTAG j'ai dû effacer par certains endroit de mon code ou je faisait apparaître mes variable de sortie pour faire des essais, ce qui les faisait basculé à plusieurs reprise au lieu d'avoir 1 ou 0 . (:

    Maintenant, le choses sérieuse commence, on va pouvoir travaillé, d'ailleurs il faut que je cherche de mon côté, seulement j'en profite pour te demander si tu aurais une fonction qui génère des nombres aléatoires dans tes bagages, par ce que je souhaite :

    1: faire du basculement aléatoire sur ces même sorties RAx (qui représente les colonnes d'un tableau de leds)
    2: faire varier la fréquence et le rapport cyclique de mes trois PWM de façon aléatoire également (qui représente les lignes du tableau de leds)

    Merci pour ton aide

  12. #11
    RISC

    Re : programmation d'un pic32mx795f512l

    Salut,
    Vas-tu réellement accéder aux registres sans utiliser les librairies périphériques de XC32 ?
    Pour ce qui est de la fonction random, je n'ai pas regardé les librairies mathématiques mais jette un oeil a tout hasard. Sinon en 3 clics tu pourras trouver du code C sur internet car c'est du C générique.
    a+

  13. #12
    davidif

    Re : programmation d'un pic32mx795f512l

    Oui Risc j'ai juste inhiber la fonction jtag par son registre

    DDPCONbits.JTAGEN=0; // disable JTAG PORT sur portA
    c'etait suffisant puisqu'en fait mon problème était dans la répétition de l'état des variable de sortie.

  14. #13
    davidif

    Re : programmation d'un pic32mx795f512l

    Bonjour,

    un autre problème m'arrive sur ce micro sur l'usb notamment, j'ai testé à plusieurs reprise le starter kit ethernet à ce sujet et ça fonctionne très bien, et pour utiliser le bootloader je me connecte en USB sur le stater kit et ainsi je charge le fichier .hex impect.

    J'ai donc repris le même shéma du starter kit sur ma carte en ce qui concerne l'usb, la carte à été testé de par ces différentes fonctions qui enfin fonctionne très bien et en dernier lieu j'ai souhaité vérifier que j'ai bien la possibilité de me connecter sur l'USB pour pouvoir utiliser le bootloader et là impossible de me connecter.

    En fait ce que j'ai pu remarquer, c'est au début des premiers test de la carte, celle-ci ne fonctionnait pas du tout, comme je les fait remarqué au début des postes, je ne pouvais pas garder le code que j'avais préalablement rédiger via le starter kit avant d'avoir ma carte et j'ai dû changer une ligne qui à fait toute la différence et qui à fait que ma carte ce mette a vivre correctement, cette ligne concerne l'horloge

    Quand je faisais ça , ça ne fonctionnait pas
    #pragma config FNOSC = FRCPLL
    par contre si je faisais ça, celle-ci c'est mis a fonctionner correctement
    #pragma config FNOSC = FRC
    je ne sait pas pourquoi ?

    donc maintenant j'ai donc laissé #pragma config FNOSC = FRC pour un fonctionnement normal pour le moment

    Seulement là pour l'soft du bootloader, j'ai sensiblement le même problème, en fait,

    en fait sur le kit, quand je fait :
    #pragma config FNOSC = FRCPLL ou
    #pragma config FNOSC = PRIPLL
    la led clignote rapidement et l'usb fonctionne correctement, par contre si je fait ça
    #pragma config FNOSC = FRC ou
    #pragma config FNOSC = PRI
    La led clignote lentement et l'usb n'est pas reconnu

    sur ma carte, quand je fait :
    #pragma config FNOSC = FRC ou
    #pragma config FNOSC = PRI
    La led clignote lentement et l'usb n'est pas reconnu

    Par contre si je fais :
    #pragma config FNOSC = FRCPLL ou
    #pragma config FNOSC = PRIPLL
    Rien ne se passe


    auriez-vous une explication, merci

  15. #14
    davidif

    Re : programmation d'un pic32mx795f512l

    Juste pour info
    Nom : MICRO USB.jpg
Affichages : 177
Taille : 34,8 Ko

    Evidement j'ai vérifier les connections, le seul truc est que je suis en USB A donc j'utilise le 5v 0v d- et d+
    Dernière modification par davidif ; 24/02/2015 à 17h10.

  16. #15
    RISC

    Re : programmation d'un pic32mx795f512l

    Salut,

    tu n'es pas prêt de faire une connection USB fiable si tu utilises l'oscillateur interne (FRC) que ce soit sans (FRC) ou avec la PLL (FRCPLL).
    Il faut impérativement un quartz. En lisant la datasheet tu verras que la fréquence à l'entrée de la PLL USB doit être (de tête) de 4MHz qui mutlipliée par 24 donne 96MHz et dvisiée par 2 48MHz qui est le nombre magique pour faire de l'USB.
    Donc, regardes un projet dans les MLA (juin 2013 max) qui utilises l'USB et tu verras le bon paramètrage des bits de config (Primary,...)

    La spec USB oblige à avoir un condensateur minimum de 100uF si tu utilises le mode USB HOST.
    De plus tu as intéret à mettre un polyswitch si tu ne veux pas griller l'USB HOST... :
    POLYSWITCH 0.50A RESET FUSE SMD
    Tyco Electronics, P/N: MICROSMD050F-2, Digikey P/N: MICROSMD050FCT-ND

    Regarde le schéma sur un starter kit PIC32 USB II ou sur la carte USB Pictail plus

    a+

  17. #16
    davidif

    Re : programmation d'un pic32mx795f512l

    Merci RISC pour tes explications, je vais porter mon attention là ou tu pointes les choses à voir, seulement je me suis basé et fait exactement ce qui a sur le starter kit ethernet de pic32MX795f512L , je marche avec l'horloge interne avec mon programme principale, mais l'horloge PRI(quartz) fonctionne aussi puisque j'ai prévue d'y cabler un quartz au cas ou ... le soft du bootloader fonctionne aussi bien en horloge intene(FRCPLL) qu'en externe (PRIPLL) avec le starter kit.

    ce que je ne comprend pas , sur ma carte que je ne puisse pas utiliser la pll , lorsque j'inclu la pll en faisant FRCPLL ou PRIPLL sans parlé d'USB mon micro ne vie pas, je suis obligé de faire un PRI ou FRC pour qu'il prenne vie et il fonctionne correctement, j'ai l'impression que c'est le principale problème qui résoudra mon problème de connexion usb également.
    Dernière modification par davidif ; 26/02/2015 à 09h45.

  18. #17
    davidif

    Re : programmation d'un pic32mx795f512l

    En fait, comme ça, ça fonctionne très bien sauf l'USB

    #if defined (__32MX360F512L__) || (__32MX460F512L__) || (__32MX795F512L__) || (__32MX430F064L__)

    //#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
    //#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_8

    //#define SYS_FREQ (80000000L)

    #pragma config UPLLEN = ON // USB PLL Enabled
    #pragma config FPLLMUL = MUL_20 // PLL Multiplier
    #pragma config UPLLIDIV = DIV_2 // USB PLL Input Divider
    #pragma config FPLLIDIV = DIV_2 // PLL Input Divider
    #pragma config FPLLODIV = DIV_1 // PLL Output Divider
    #pragma config FPBDIV = DIV_8 // Peripheral Clock divisor
    #pragma config FWDTEN = OFF // Watchdog Timer
    #pragma config WDTPS = PS1 // Watchdog Timer Postscale
    #pragma config FCKSM = CSDCMD // Clock Switching & Fail Safe Clock Monitor
    #pragma config OSCIOFNC = OFF // CLKO Enable
    #pragma config POSCMOD = OFF // Primary Oscillator
    #pragma config IESO = OFF // Internal/External Switch-over
    #pragma config FSOSCEN = OFF // Secondary Oscillator Enable
    #pragma config FNOSC = PRI // Oscillator Selection
    //#pragma config FNOSC = FRCPLL // Oscillator Selection
    #pragma config CP = OFF // Code Protect
    #pragma config BWP = OFF // Boot Flash Write Protect
    #pragma config PWP = OFF // Program Flash Write Protect
    #pragma config ICESEL = ICS_PGx2 // ICE/ICD Comm Channel Select
    #pragma config DEBUG = OFF // Debugger Disabled for Starter Kit



    #endif
    j'utilise donc mon quartz de 8Mhz et d'après la doc, ma remarque qui concerne la PLL (FRCPLL ou PRIPLL) ne concerne pas l'usb.
    Donc 8 Mhz alors UPLLIDIV = DIV_2 (8:2=4) , PLL (4x24=96) et 96:2=48Mhz, j'ai donc bien les 48 ?

  19. #18
    davidif

    Re : programmation d'un pic32mx795f512l

    autant pour moi, ce que j'ai mis au dessus, c'est mon programme principal, je met plutot mon programme de bootloader, repris de chez microchip et qui fonctionne sur le starter kit en question

    // Configuring the Device Configuration Registers
    // 80Mhz Core/Periph, Pri Osc w/PLL, Write protect Boot Flash
    #if defined(TRANSPORT_LAYER_USB) || defined(TRANSPORT_LAYER_USB_HO ST)
    #pragma config UPLLEN = ON // USB PLL Enabled
    #pragma config UPLLIDIV = DIV_2 // USB PLL Input Divider = Divide by 2
    #endif

    #pragma config DEBUG = OFF // Background Debugger disabled
    #pragma config FPLLMUL = MUL_20 // PLL Multiplier: Multiply by 20
    #pragma config FPLLIDIV = DIV_2 // PLL Input Divider: Divide by 2
    #pragma config FPLLODIV = DIV_1

    #if defined(__PIC32MX1XX_2XX__)
    // For PIC32MX1xx, PIC32MX2xx devices the output divisor is set to 2 to produce max 40MHz clock.
    #pragma config FPLLODIV = DIV_2 // PLL Output Divider: Divide by 2
    #elif defined (__PIC32MX3XX_7XX__)
    //For PIC32MX3xx, PIC32MX4xx, PIC32MX5xx, PIC32MX6xx and PIC32MX7xx devices,
    //the output divisor is set to 1 to produce max 80MHz clock.
    // #pragma config FPLLODIV = DIV_1 // PLL Output Divider: Divide by 1
    #endif

    #pragma config FWDTEN = OFF // WD timer: OFF
    #pragma config POSCMOD = HS
    //#pragma config POSCMOD = HS // Primary Oscillator Mode: High Speed xtal
    //#pragma config FNOSC = PRIPLL // Oscillator Selection: Primary oscillator w/ PLL
    #pragma config FNOSC = PRI
    #pragma config FPBDIV = DIV_1 // Peripheral Bus Clock: Divide by 1
    #pragma config BWP = OFF // Boot write protect: OFF

    #if defined(__PIC32MX1XX_2XX__)
    // For PIC32MX1xx, PIC32MX2xx devices there are jumpers on PIM to choose from PGx1/PGx2.
    #pragma config ICESEL = ICS_PGx1 // ICE pins configured on PGx1 (PGx2 is multiplexed with USB D+ and D- pins).
    #elif defined(__PIC32MX3XX_7XX__)
    // For PIC32MX3xx, PIC32MX4xx, PIC32MX5xx, PIC32MX6xx and PIC32MX7xx
    // devices the ICE connection is on PGx2. .
    #pragma config ICESEL = ICS_PGx2 // ICE pins configured on PGx2, Boot write protect OFF.
    #endif

    #if defined(TRANSPORT_LAYER_ETH)
    #pragma config FMIIEN = OFF, FETHIO = OFF // external PHY in RMII/alternate configuration. Applicable for devices with internal MAC only.
    #endif

    #define SWITCH_PRESSED 0

  20. #19
    davidif

    Re : programmation d'un pic32mx795f512l

    la seul connexion que je fais pas sur ma carte c'est le USBID puisque je passe de microusb(starter kit) à USB A(PC) mais je fais la meme chose sur le starter kit, on utilise donc pas cette info là (pin4 de micro usb)

  21. #20
    davidif

    Re : programmation d'un pic32mx795f512l

    Auriez-vous une idée ? J'ai à nouveau tout vérifier en hardware j'ai bien respecter tout ce qui était fait sur le starter kit, et maintenant ça ne peut que ce passer au niveau soft, mais à quel niveau ?

    Même si c'est peut-être pas lié, je sais pas trop, en tout cas ça influence le fonctionnement, j'aimerai bien comprendre pourquoi mon circuit ne fonctionne pas , en PRIPLL ou FRCPLL alors qu'il fonctionne en PRI ou FRC ?

    Merci pour votre aide

  22. #21
    davidif

    Re : programmation d'un pic32mx795f512l

    Bonjours,

    Quelqu'un pourrai m'expliquer la différence entre le PRI ou FRC et PRIPLL ou FRCPLL, par ce que d'après ce que j'ai compris on passerai par une PLL et d'après la doc ça ne devrai pas influencer sur l'USB ?
    Me trompe-je ?

    Merci

  23. #22
    RISC

    Re : programmation d'un pic32mx795f512l

    Salut,
    Regarde la documentation, en particulier le schéma d'horloge interne avec toutes les combinaisons.
    PRI = oscillateur externe qu'il faut ensuite choisir entre EC, XT, HS
    FRC = Fast RC = oscillateur interne (l'USB doit IMPERATIVEMENT être basé sur un quartz externe...)
    Pour avoir accès aux vitesses élevées il faut impérativement utiliser PRIPLL

    Le plus simple comme je l'ai déjà écrit, c'est de s'inspirer d'exemples existants comme les libraries USB MLA de juin 2013 (Legacy).
    Il suffit de choisir un projet USB pour PIC32MX795F512L et de copier les bits de configuration
    a+

  24. #23
    davidif

    Re : programmation d'un pic32mx795f512l

    C'est ce que je fait depuis le début, je m'appui évidement sur des sources de chez Microchip, j'utilise "AN1388_Source_Code_2013_02_01 " dans lequel je trouve ce fichier là "PIC32_Bootloaders" que j'ai pu tester sur le starter kit ethernet et que j'ai pu utiliser correctement.


    /****************************** ****************************** **********
    *
    * PIC32 Boot Loader
    *
    ****************************** ****************************** *********
    * FileName: Bootloader.c
    * Dependencies:
    * Processor: PIC32
    *
    * Compiler: MPLAB C32
    * MPLAB IDE
    * Company: Microchip Technology, Inc.
    *
    * Software License Agreement
    *
    * The software supplied herewith by Microchip Technology Incorporated
    * (the “Company”) for its PIC32 Microcontroller is intended
    * and supplied to you, the Company’s customer, for use solely and
    * exclusively on Microchip PIC32 Microcontroller products.
    * The software is owned by the Company and/or its supplier, and is
    * protected under applicable copyright laws. All rights are reserved.
    * Any use in violation of the foregoing restrictions may subject the
    * user to criminal sanctions under applicable laws, as well as to
    * civil liability for the breach of the terms and conditions of this
    * license.
    *
    * THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES,
    * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
    * TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
    * PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
    * IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
    * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
    *
    *
    * $Id: $
    * $Name: $
    *
    ****************************** ****************************** **********/
    #include "Include\GenericTypeDefs.h "
    #include "Include\HardwareProfile\Hardw areProfile.h"
    #include "Include\Bootloader.h"
    #include "Include\FrameWork\Framework.h "
    #include <stdlib.h>
    #include <plib.h>


    // Configuring the Device Configuration Registers
    // 80Mhz Core/Periph, Pri Osc w/PLL, Write protect Boot Flash
    #if defined(TRANSPORT_LAYER_USB) || defined(TRANSPORT_LAYER_USB_HO ST)
    #pragma config UPLLEN = ON // USB PLL Enabled
    #pragma config UPLLIDIV = DIV_2 // USB PLL Input Divider = Divide by 2
    #endif

    #pragma config DEBUG = OFF // Background Debugger disabled
    #pragma config FPLLMUL = MUL_20 // PLL Multiplier: Multiply by 20
    #pragma config FPLLIDIV = DIV_2 // PLL Input Divider: Divide by 2

    #if defined(__PIC32MX1XX_2XX__)
    // For PIC32MX1xx, PIC32MX2xx devices the output divisor is set to 2 to produce max 40MHz clock.
    #pragma config FPLLODIV = DIV_2 // PLL Output Divider: Divide by 2
    #elif defined (__PIC32MX3XX_7XX__)
    //For PIC32MX3xx, PIC32MX4xx, PIC32MX5xx, PIC32MX6xx and PIC32MX7xx devices,
    //the output divisor is set to 1 to produce max 80MHz clock.
    #pragma config FPLLODIV = DIV_1 // PLL Output Divider: Divide by 1
    #endif

    #pragma config FWDTEN = OFF // WD timer: OFF
    #pragma config POSCMOD = HS // Primary Oscillator Mode: High Speed xtal
    #pragma config FNOSC = PRIPLL // Oscillator Selection: Primary oscillator w/ PLL
    #pragma config FPBDIV = DIV_1 // Peripheral Bus Clock: Divide by 1
    #pragma config BWP = OFF // Boot write protect: OFF

    #if defined(__PIC32MX1XX_2XX__)
    // For PIC32MX1xx, PIC32MX2xx devices there are jumpers on PIM to choose from PGx1/PGx2.
    #pragma config ICESEL = ICS_PGx1 // ICE pins configured on PGx1 (PGx2 is multiplexed with USB D+ and D- pins).
    #elif defined(__PIC32MX3XX_7XX__)
    // For PIC32MX3xx, PIC32MX4xx, PIC32MX5xx, PIC32MX6xx and PIC32MX7xx
    // devices the ICE connection is on PGx2. .
    #pragma config ICESEL = ICS_PGx2 // ICE pins configured on PGx2, Boot write protect OFF.
    #endif

    #if defined(TRANSPORT_LAYER_ETH)
    #pragma config FMIIEN = OFF, FETHIO = OFF // external PHY in RMII/alternate configuration. Applicable for devices with internal MAC only.
    #endif

    #define SWITCH_PRESSED 0



    BOOL CheckTrigger(void);
    void JumpToApp(void);
    BOOL ValidAppPresent(void);
    /****************************** ****************************** ********
    * Function: main()
    *
    * Precondition:
    *
    * Input: None.
    *
    * Output: None.
    *
    * Side Effects: None.
    *
    * Overview: Main entry function. If there is a trigger or
    * if there is no valid application, the device
    * stays in firmware upgrade mode.
    *
    *
    * Note: None.
    ****************************** ****************************** ********/
    INT main(void)
    {
    UINT pbClk;

    // Setup configuration
    pbClk = SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);

    InitLED();

    // Enter firmware upgrade mode if there is a trigger or if the application is not valid
    if(CheckTrigger() || !ValidAppPresent())
    {
    // Initialize the transport layer - UART/USB/Ethernet
    TRANS_LAYER_Init(pbClk);

    while(!FRAMEWORK_ExitFirmwareU pgradeMode()) // Be in loop till framework recieves "run application" command from PC
    {
    // Enter firmware upgrade mode.
    // Be in loop, looking for commands from PC
    TRANS_LAYER_Task(); // Run Transport layer tasks
    FRAMEWORK_FrameWorkTask(); // Run frame work related tasks (Handling Rx frame, process frame and so on)
    // Blink LED (Indicates the user that bootloader is running).
    BlinkLED();
    }
    // Close trasnport layer.
    TRANS_LAYER_Close();
    }


    // No trigger + valid application = run application.
    JumpToApp();

    return 0;
    }


    /****************************** ****************************** ********
    * Function: CheckTrigger()
    *
    * Precondition:
    *
    * Input: None.
    *
    * Output: TRUE: If triggered
    FALSE: No trigger
    *
    * Side Effects: None.
    *
    * Overview: Checks if there is a trigger to enter
    firmware upgrade mode.
    *
    *
    * Note: None.
    ****************************** ****************************** ********/
    BOOL CheckTrigger(void)
    {
    UINT SwitchStatus;
    SwitchStatus = ReadSwitchStatus();
    if(SwitchStatus == SWITCH_PRESSED)
    {
    // Switch is pressed
    return TRUE;
    }
    else
    {
    // Switch is not pressed.
    return FALSE;
    }
    }


    /****************************** ****************************** ********
    * Function: JumpToApp()
    *
    * Precondition:
    *
    * Input: None.
    *
    * Output:
    *
    * Side Effects: No return from here.
    *
    * Overview: Jumps to application.
    *
    *
    * Note: None.
    ****************************** ****************************** ********/
    void JumpToApp(void)
    {
    void (*fptr)(void);
    fptr = (void (*)(void))USER_APP_RESET_ADDRE SS;
    fptr();
    }


    /****************************** ****************************** ********
    * Function: ValidAppPresent()
    *
    * Precondition:
    *
    * Input: None.
    *
    * Output: TRUE: If application is valid.
    *
    * Side Effects: None.
    *
    * Overview: Logic: Check application vector has
    some value other than "0xFFFFFFFF"
    *
    *
    * Note: None.
    ****************************** ****************************** ********/
    BOOL ValidAppPresent(void)
    {
    DWORD *AppPtr;
    AppPtr = (DWORD *)USER_APP_RESET_ADDRESS;
    if(*AppPtr == 0xFFFFFFFF)
    {
    return FALSE;
    }
    else
    {
    return TRUE;
    }
    }


    /*********************End of File************************** **********/

Discussions similaires

  1. quelle est la difference entre programmation procedurale et la programmation orientee objet
    Par invite430abc62 dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 27/01/2016, 13h34
  2. bootloader pic32MX795F512L
    Par davidif dans le forum Électronique
    Réponses: 37
    Dernier message: 06/12/2013, 11h21
  3. TCP/IP sur PIC32MX795F512L
    Par invite3bb6cfa9 dans le forum Électronique
    Réponses: 2
    Dernier message: 13/02/2012, 23h58
  4. Programmation pic
    Par invite78ff91c3 dans le forum Électronique
    Réponses: 5
    Dernier message: 06/04/2010, 21h28
  5. programmation
    Par inviteb595f793 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 30/09/2007, 13h44
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...