== 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;
}
}