Interrupcions a FreeRTOS

FreeRTOS deixa el maneig de les interrupcions a mans del desenvolupador, demanant unes certes condicions. Cal tenir en compte que les interrupcions són esdeveniments totalment asíncrons i imprevisibles i que prenen el control de forma automàtica. Això fa que mentre està funcionant una ISR el kernel del Sistema Operatiu no es pot executar i que, […]

Read More Interrupcions a FreeRTOS

Eliminant rebots a les entrades

Un problema que ens podem trobar quan volem llegir una entrada digital, és el fenomen dels rebots: si el pin està connectat a un botó a algun altre accionador mecànic aquest pot generar rebots al senyal, que vol dir que no es genera un pols quadrat i perfecte si que no quan es genera un […]

Read More Eliminant rebots a les entrades

Fent servir un DAC

Un DAC és un dispositiu que es pot veure com l’invers d’un ADC, ja que a partir d’unes dades digitals genera un senyal analògic equivalent. Els paràmetres de funcionament d’un DAC son, doncs, molt similars als del seu perifèric germà l’ADC. Al datasheet de la família amb la que treballem (EFM32GRM, pàg. 421) hi ha […]

Read More Fent servir un DAC

Port sèrie

El port sèrie es encara un dels ports d’entrada i sortida més comuns de trobar en un microcontrolador i en un sistema encastat. Encara avui multitud de dispositius fan servir aquest port per rebre o enviar dades i, per tant, els microcontroladors acostumen a portar uns quants d’aquests ports disponibles. De fet, la majoria de […]

Read More Port sèrie

RTOS: Semàfors

En aquesta entrada parlarem de què son i com fer servir semàfors en un RTOS. Un semàfor és un dels mecanismes de comunicació entre tasques que ofereix un OS. . Així, una tasca prova d’agafar el semàfor i es quedarà esperant que una altra tasca doni el semàfor o ho tornarà a provar més endavant. […]

Read More RTOS: Semàfors

Declarar una ISR

Com ja sabem, les ISR o Rutina de Tractament d’Interrupció (en anglès Interrupt Service Routine) son les funcions especials que s’executen tant bon punt es dispara una interrupció determinada. Tradicionalment les adreces a aquestes ISRs (anomenats de vegades vectors d’interrupció ) s’emmagatzemaven a una zona especial de la memòria del processador. Quan el processador rebia […]

Read More Declarar una ISR

Timer i IRQs

Com ja hem vist al post anterior, un Timer compta temps i el podem fer servir per força coses diferents. L’exemple anterior estava basat en fer polling dels registres del Timer, que és una tècnica senzilla però poc eficient.

Read More Timer i IRQs

Comunicant ISRs i l’ús de “volatile”

A l’exemple que hem vist sobre el PWM, calia modificar un variable global dins de dues ISRs. Aquesta variable es definia així: volatile uint32_t pwm_value = PWM_FREQ/6; Que tot és més o menys normal, però apareix la paraula reservada volatile. Aquesta paraula reservada també apareixia quan parlàvem de la E/S Mapejada a memòria. Aquesta paraula reservada serveix per […]

Read More Comunicant ISRs i l’ús de “volatile”

Interrupcions

Hem vist a  l’exemple amb GPIOs com llegir entrades tipus GPIO amb un microcontrolador. En el codi d’exemple, s’anava fent polling tota l’estona dels valors dels dos botons i encenent o apagant el LED segons correspongui. Aquesta forma de treballar és força ineficient, ja que el microcontrolador està ocupat fent una feina trivial. Per això, el més […]

Read More Interrupcions