Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Port access  Indtil nu har vi anvendt færdige metoder til at tænde og slukke for LEDs, men den metode virker kun så længe vi arbejde med Keil boardet.

Lignende præsentationer


Præsentationer af emnet: "Port access  Indtil nu har vi anvendt færdige metoder til at tænde og slukke for LEDs, men den metode virker kun så længe vi arbejde med Keil boardet."— Præsentationens transcript:

1 Port access  Indtil nu har vi anvendt færdige metoder til at tænde og slukke for LEDs, men den metode virker kun så længe vi arbejde med Keil boardet.  I det efterfølgende vil vi i stedet prøve at tilgå portene direkte.  I øvelsen vil vi tænde og slukke for LED 1

2 Find port i diagram LED 1 er forbundet til pin 8 på Port E

3 Find register For at skrive til et bit af gangen vil vi anvende GPIOx_BSRR til set og GPIOx_BRR til reset. Alternativt kunne vi skrive til GPIOx_ODR hvor vi kan sætte alle 16 bit på en gang

4 Find pin 8 configurations register For at kunne anvende GPIOE som output eller input skal vi skrive det i configurations registeret CRH. Pin 8 ligger på bit 0-3 i CRH registeret. Vi vil sætte MODE til 11 (Output max speed) CNF til 00 (GPO push pull) Bemærk at betydningen af CFN afhænger af værdien i MODE

5 Find IOPE Enable i APB2ENR For at kunne anvende PORT E skal den enables. Det sker i APB2ENR registeret IOPE ligger på pin 6 i APB2ENR

6 Kode #include int main (void) { const unsigned long led_mask = 1<<15; int i; /* Setup GPIO for LEDs */ RCC->APB2ENR |= 1 << 6; /* Enable GPIOE clock */ GPIOE->CRH = 0x33333333; /* Configure the GPIO for LEDs */ for (;;) { /* Loop forever */ for (i = 0; i < 1000000; i++){} GPIOE->BSRR = led_mask; /* Turn LED on */ for (i = 0; i < 1000000; i++){} GPIOE->BRR = led_mask; /* Turn LED off */ } Koden her anvender de registre som i forvejen er defineret.Afprøv koden. Prøv på samme måde at lave kode som aflæser input keys

7 Tilgå adresser med pointers I stedet for at anvende de predefinerede GPIO adresser kunne vi også finde dem i databladet og skrive til dem direkte.

8 Find adresse på Port E Port E starter på adresse 0x40011800

9 Find offset adresse på BSRR og CRH BSRR offset er 0x10, CRH på 0x04

10 Find adresse på RCC_APB2ENR

11 #include //For at dette virker skal projektet importere ARM:CMSIS:CORE under Runtime environment Device, Startup #define GPIOE_CRH *((int *)0x40011804) //GPIOE address + CRH offset #define GPIOE_BSRR *((int *)0x40011810) //GPIOE address + BSRR offset #define GPIOE_BRR *((int *)0x40011814) //GPIOE address + BSRR offset #define RCC_APB2ENR *((int *)0x40021018) //Reset register til af GPIO int main (void) { const unsigned long led_mask = 1<<8; int i; /* Setup GPIO for LEDs */ RCC_APB2ENR |= 1 << 6; /* Enable GPIOE clock */ GPIOE_CRH = 0x33333333; /* Configure the GPIO for LEDs */ for (;;) { /* Loop forever */ for (i = 0; i < 1000000; i++){} GPIOE_BSRR = led_mask; /* Turn LED on */ for (i = 0; i < 1000000; i++){} GPIOE_BRR = led_mask; /* Turn LED off */ } Kode Koden her skriver direkte til portenes hex adresser.Afprøv koden. Prøv på samme måde at lave kode som aflæser input keys


Download ppt "Port access  Indtil nu har vi anvendt færdige metoder til at tænde og slukke for LEDs, men den metode virker kun så længe vi arbejde med Keil boardet."

Lignende præsentationer


Annoncer fra Google