Crans
  • Commentaires
  • Page immuable
  • Menu
    • Affichage
    • Carte locale du site
    • Pièces jointes
    • Informations
    • Code source
  • Connexion

Navigation

  • Modifications récentes
  • Recherche avancée
  • Aide
Version 1 à la date du 2018-10-19 12:23:55
CransWiki:
  • VieEns
  • LesDépartements
  • DépartementEea
  • EEA-UE441

== Présentation == Cette page à pour but de répertorier des exemples de code utiles pour les TP (et pour le partiel) de l'UE441 du M1 IST de EEA. Vous pouvez évidement contribuer à cette page mais assurez vous de rajouter du code compréhensible (commentaire, nom de variable explicite etc), fonctionnelle, et bien répertorié (cette page à des sections, respectez les).

Code de base

== LED ==

Boutons

Timers

Ecran LCD

Interruptions

Le principe des intéruptions est que l'on va assigner une pine à un type d'interuption et on va lui donner une priorité. Si l’événement attendu survient (input, timer, etc), une certaine fonction va être appelée et l'on va interrompre le programme principale. Un des intérêt est que les interruptions sont gérées à un niveau plus bas et les sont donc beaucoup plus rapidement prise en compte que si l'on vérifiais l’appui sur un bouton. En contre partie, c'est chiant à coder.

code

int main(void) {

        char text[32];
        uint32_t i;

        //Configuration de l'horloge à 15 MHz
        LPC_PWRD_API->set_fro_frequency(30000);

        // Peripheral reset to the GPIO0 and pin interrupt modules. '0' asserts, '1' deasserts reset.
        LPC_SYSCON->PRESETCTRL0 &=  (GPIO0_RST_N & GPIOINT_RST_N);
        LPC_SYSCON->PRESETCTRL0 |= ~(GPIO0_RST_N & GPIOINT_RST_N);

        //Mise en fonctionnement des périphériques utilisés
        LPC_SYSCON->SYSAHBCLKCTRL0 |= (IOCON | GPIO0 | SWM | CTIMER0 | GPIO_INT);

        //initialisation de l'affichuer lcd avec un affichage
        init_lcd();
        sprintf(text,"Waiting...");
        lcd_gohome();
        lcd_puts(text);

    // Configuration des interruptions sur front descendant des boutons

    // Configure P0.18, P0.19 as pin interrupts 1, 0
    // Make PORT0.18, PORT0.19 outputs driving '0'.
        LPC_GPIO_PORT->DIR0 |= (1<<19)|(1<<17)|(1<<21)|(1<<11);

        // Configure P0.18 - P0.19 as pin interrupts 1 - 0 by writing to the PINTSELs in SYSCON
        LPC_SYSCON->PINTSEL[0] = 13;  // PINTSEL0 is P0.13
        LPC_SYSCON->PINTSEL[1] = 12;  // PINTSEL1 is P0.12

        // Configure the Pin interrupt mode register (a.k.a ISEL) for edge-sensitive on PINTSEL1,0
        LPC_PIN_INT->ISEL = 0x0;

        // Configure the IENR (pin interrupt enable rising) for rising edges on PINTSEL0,1
        //LPC_PIN_INT->IENR = 0x0;

        // Configure the IENF (pin interrupt enable falling) for falling edges on PINTSEL0,1
        LPC_PIN_INT->IENF = 0x3;

        // Clear any pending or left-over interrupt flags
        LPC_PIN_INT->IST = 0xFF;

        // Enable pin interrupts 0 - 1 in the NVIC (see core_cm0plus.h)
        NVIC_EnableIRQ(PININT0_IRQn);
        NVIC_EnableIRQ(PININT1_IRQn);

        // config priority. De base elles sont prioritaires mais on refefinit leurs priorites
        NVIC->IP[6]= (0<<6)|(3<<14);

    while(1) {
        // affichage du timer sur l'écran LCD
                sprintf(text," %d ",i++);
                lcd_position(1,1);
                lcd_puts(text);
    }
    return 0 ;
}

//fonction interruption 0 GPIO sur front descendant
void PININT0_IRQHandler(void){
        LED1= !LED1;               // Falling edge on PIN INT0, LED off
        LPC_PIN_INT->FALL = 1<<0;       // Clear the interrupt flag
    return;
}

}
  • Propulsé par MoinMoin
  • Mentions légales