RSS · Atom

Mikrokontrolery


LPC2148, obsługa przerwania UART  

ARM7 / Kody źródłowe
Opublikowany 05282008, 20:56

Prosty program demonstrujący transmisję przez UART w trybie obsługi przerwania. Mikrokontroler LPC2148, kompilator GNU ARM.

#include "lpc214x.h"
 
// obsługa przerwania od UART0
void uart0isr(void) __attribute__ ((interrupt("IRQ")));
 
// program główny
int main(void) {
        volatile int i;
 
        // P0.16, P0.17 i P0.18 jako wy podłączone do diód,
        // diody zgaszone
        IODIR0 |= 1 < < 16 | 1 << 17 | 1 << 18;
        IOSET0 |= 1 << 16 | 1 << 17 | 1 << 18;
 
        // konfiguracja UART0
        PINSEL0 |= 1 << 0 | 1 << 2;  // RxD, TxD
        U0LCR = 1 << 7 | 3;          // 8N1, DLAB=0
        U0DLM = 0;
        U0DLL = 15000000/(16*19200); // 19200 kb/s dla PCLK=15MHz
        U0LCR &= ~(1 << 7);
        U0IER = 1;                   // IRQ gdy odebrano dane
        U0FCR &= 0x3f;               // aktywowane 1B odebranym
 
        // konfiguracja przerwań
        VICIntSelect &= ~(1 << 6);   // UART0 jako IRQ
        VICVectCntl0 = 6 | 1 << 5;   // UART0, IRQ
        VICVectAddr0 = (unsigned long) uart0isr;
        VICIntEnable |= 1 << 6;      // włączenie przerwania UART0
 
        // mignięcie diodą P0.18
        IOCLR0 = 1 << 18;
        for (i=0; i < 5000000; i++);
        IOSET0 = 1 << 18;
 
 
        // miganie diodą P0.16
        while(1) {
                for (i=0; i < 500000; i++) 
                        IOSET0 = 1 << 16;
                for (i=0; i < 500000; i++) 
                        IOCLR0 = 1 << 16;
        }
}
 
void uart0isr(void) {
 
        volatile int i;
        // mignięcie diodą P0.17
        IOCLR0 = 1 << 17;
        for (i=0; i < 1000000; i++);
        IOSET0 = 1 << 17;
 
        // dane gotowe do odczytu
        if (((U0IIR >> 1) & 7) == 2) 
                i = U0RBR;   // odczyt danych
 
        // sygnalizacja końca obsługi przerwania
        VICVectAddr = 0;     // zapis dowolnej wartości
}

Program zapala/gasi jedną diodę jednorazowo po uruchomieniu, drugą diodą miga cały czas, a trzecią zapala/gasi w trybie obsługi przerwania, po odebraniu 1 bajtu przez UART0.

Wszystkie pliki (w tym kod startowy boot.S) potrzebne do uruchomienia: lpc2148uartirq.tgz.

Sprzęt i oprogramowanie opisane w postach: Mikrokontroler NXP Philips LPC2148 oraz LPC214x, programowanie ISP i Linux.

Trackbacks & Pingbacks

  1. LPC214x, tryby obniżonego poboru mocy | Mikrokontrolery
    Pingback / 07112008, 21:44

Napisz komentarz