Vai al contenuto

Funzioni gestione bus periferico

Queste funzioni permettono di gestire la scheda interfaccia che pilota il bus periferico a cui si connettono i moduli di estensione. Sulla scheda interfaccia è presente un complesso circuito di watchdog basato su di un processore Cortex M0. Il modulo CPU ed il processore di watchdog sulla scheda di interfaccia dialogano tra di loro tramite una connessione I2C permettendo una gestione ottimizzata del watchdog (Vedi articolo).

ePhrI2cBusInit

int8_t ePhrI2cBusInit(char* I2cDev);

Definisce il bus i2c del modulo Raspberry utilizzato per la gestione del modulo di interfaccia e dei moduli periferici ad esso connesso. Nel modulo SlimLine viene utilizzato il bus connesso ai pin 3 GPIO 2 (SDA) e 4 GPIO3 (SCL) del connettore sul modulo Raspberry. La funzione inizializza il watchdog controller presente sul modulo di interfaccia ritornando il numero di eventuali riavvii comandati dal circuito.

Viene ritornata indicazione sull'esito dell'esecuzione: 0: Ok, -1: Errore esecuzione, nn: Numero riavvii comandati dal watchdog controller

ePhrI2cBusReady

bool_t ePhrI2cBusReady(bool_t Ready, uint32_t WDogTime);

Permette la gestione del segnale ready ready sul bus di estensione. Attivandolo Ready=true i moduli connessi si attivano, sulla attivazione occorre anche definire il tempo di intervento del watchdog controller. Disattivandolo Ready=false i moduli si resettano e viene disattivato anche il controllo sul watchdog.

L'esecuzione della funzione non è atomica, ne viene ritornato lo stato: false: Esecuzione in corso, true: Fine esecuzione.

Esempi

Come utilizzare gli esempi.
Viene definito ed inizializzato il bus I2C da utilizzarsi per la gestione dei moduli periferici.  In caso di errore di inizializzazione viene ritornato il codice di errore. Sono controllati gli eventuali riavvii del sistema per intervento del watchdog controller e se superato il numero consentito si esce per errore.

CodeLite (Ptp174)
// *****************************************************************************
// PROGRAM "PhrBusInit.cpp"
// *****************************************************************************
// An example how to initialize the peripheral bus.
// -----------------------------------------------------------------------------

#include <stdio.h>
#include <Library.h>
#include <PhrI2cBus.h>
#include <WatchDog.h>
using namespace Elsist; //Defines namespace

// -----------------------------------------------------------------------------
// PROGRAM EXECUTION
// -----------------------------------------------------------------------------

bool PhrBusInit(void)
{
    // -------------------------------------------------------------------------
    // LOCAL VARIABLES
    // -------------------------------------------------------------------------
    // Define variables.

    int8_t Result; //Function result

    // -------------------------------------------------------------------------
    // PERIPHERAL BUS INITIALIZATION
    // -------------------------------------------------------------------------
    // Defines wich I2C device has been to used to manage the extension bus,
    // and initializes it. Function returns 0 if Ok or the error code.
    
    Result=ePhrI2cBusInit((char_t*)"/dev/i2c-4");
    switch(Result)
    {
        // Error on bus initializing there's some hardware problem.

        case -1: printf("Bus init error: %d\n", Result); return(false);
        
        // System has been restarted by a watchdog intervention.
        // "Result" returns the number of subsequent watchdog interventions.

        default:
        if (Result == 0) printf("System power up\n");
        if (Result != 0) printf("System has been rebooted for %d times\n", Result);
        
        // After a defined number of system reboots by watchdog interventions,
        // a decision must be taken. In this example the program is stopped.

        if (Result > 2)
        {
            printf("Too wdog reboot\n");
            eResetWDog(); //Watchdog reset, it reinits the reboot counter
            return(false);
        }
    }

    // Set the peripheral bus ready, this activates all the attached modules.
    // Set also the wdog timeout to 2 seconds. Time range (1 to 60000 mS).

    while (!ePhrI2cBusReady(true, 2000)); //Set ready signal on peripheral bus}

    // Now it's possible to manage the extension modules.

    return(true);
}
// [End of file]
Was this article helpful?