Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ASM:
- .syntax unified
- .set PRESCALER_MAX,50
- .set PERIPH_BASE,0x40000000
- .set AHB1PERIPH_OFFSET, 0x00020000
- .set GPIOG_BASE,PERIPH_BASE+AHB1PERIPH_OFFSET+0x1800
- .set BSRR_OFFSET,0x18
- .set DELAY_INTERVAL,0x186004
- .global on
- on:
- @ R0 przez ca³y czas przechowuje adres BSRR
- start:
- LDR R0,=GPIOG_BASE+BSRR_OFFSET @ przypisanie do R0 adresu BSRR
- MOV R1,#0x20000000 @ reset PG13
- ORR R1,#0x4000 @ set PG14
- STR R1,[R0] @ wykonanie zapalenia
- @ przygotowanie zgaszenia diody PG14 i zapalenia PG13
- @ od teraz w R1 jest stan, jaki nale¿y wys³aæ do BSRR
- MOV R1,#0x40000000 @ set PG14
- ORR R1,#0x2000 @ reset PG13
- PRZELACZ_OPZ:
- LDR R2, =DELAY_INTERVAL @ za³adowanie czasu oczekiwania do R2
- OPZ:
- SUBS R2,R2,#1 @ zmniejsz pozosta³y czas oczekiwania
- CBNZ R2, OPZ @ je¿eli nie odliczono do zera, zmniejsz stan licznika (R2) i porównaj
- PRZELACZ:
- STR R1,[R0] @ zaœwieæ i zgaœ diody wysy³aj¹c stan R1 do BSRR
- CMP R1,#0x40000000 @ je¿eli to pierwszy raz wartoœæ R1 = 0x40002000 > 0x4000000
- @ usuñ komentarz poni¿szej instrukcji, je¿eli nie bêdzie dzia³aæ:
- @ IT LO
- BLO LR @ natomiast w drugim przejœciu 0x20004000 < 0x40000000 i wtedy nale¿y zakoñczyæ funkcjê
- @ (LR zawiera adres powrotu, BLO - B (skok) LO (lower flag))
- MOV R1,#0x20000000 @ reset PG13
- ORR R1,#0x4000 @ set PG14
- B PRZELACZ_OPZ:
- C:
- #include "main_base.h"
- unsigned short int on();
- int main(void) {
- // to jest jednorazowa konfiguracja
- RCC->AHB1ENR |= RCC_AHB1Periph_GPIOG;
- GPIOG->MODER |= GPIO_Mode_OUT << (14*2);// 1 - output
- GPIOG->OTYPER|= GPIO_OType_PP << 14;//0 - push-pull (def.)
- GPIOG->PUPDR |= GPIO_PuPd_NOPULL << (14*2);//0 - (default)
- RCC->AHB1ENR |= RCC_AHB1Periph_GPIOG;
- GPIOG->MODER |= GPIO_Mode_OUT << (13*2);// 1 - output
- GPIOG->OTYPER|= GPIO_OType_PP << 13;//0 - push-pull (def.)
- GPIOG->PUPDR |= GPIO_PuPd_NOPULL << (13*2);//0 - (default)
- RCC->AHB1ENR |= RCC_AHB1Periph_GPIOA;
- GPIOA->MODER |= GPIO_Mode_IN; // 0 - input (default)
- GPIOA->PUPDR |= GPIO_PuPd_NOPULL ; // 0 - (default)
- while (1) {
- GPIOG->BSRR = 0x80004000; // dodany pocz¹tek 0x8000 gasz¹cy diodê PG14
- if(GPIOA->IDR&1)
- on();
- }
- }
Add Comment
Please, Sign In to add comment