voik3

Untitled

Jun 17th, 2019
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. ASM:
  2. .syntax unified
  3. .set PRESCALER_MAX,50
  4. .set PERIPH_BASE,0x40000000
  5. .set AHB1PERIPH_OFFSET, 0x00020000
  6. .set GPIOG_BASE,PERIPH_BASE+AHB1PERIPH_OFFSET+0x1800
  7. .set BSRR_OFFSET,0x18
  8. .set DELAY_INTERVAL,0x186004
  9.  
  10. .global on
  11.  
  12. on:
  13. @ R0 przez ca³y czas przechowuje adres BSRR
  14. start:
  15. LDR R0,=GPIOG_BASE+BSRR_OFFSET @ przypisanie do R0 adresu BSRR
  16. MOV R1,#0x20000000 @ reset PG13
  17. ORR R1,#0x4000 @ set PG14
  18. STR R1,[R0] @ wykonanie zapalenia
  19. @ przygotowanie zgaszenia diody PG14 i zapalenia PG13
  20. @ od teraz w R1 jest stan, jaki nale¿y wys³aæ do BSRR
  21. MOV R1,#0x40000000 @ set PG14
  22. ORR R1,#0x2000 @ reset PG13
  23.  
  24. PRZELACZ_OPZ:
  25. LDR R2, =DELAY_INTERVAL @ za³adowanie czasu oczekiwania do R2
  26. OPZ:
  27. SUBS R2,R2,#1 @ zmniejsz pozosta³y czas oczekiwania
  28. CBNZ R2, OPZ @ je¿eli nie odliczono do zera, zmniejsz stan licznika (R2) i porównaj
  29. PRZELACZ:
  30. STR R1,[R0] @ zaœwieæ i zgaœ diody wysy³aj¹c stan R1 do BSRR
  31. CMP R1,#0x40000000 @ je¿eli to pierwszy raz wartoœæ R1 = 0x40002000 > 0x4000000
  32. @ usuñ komentarz poni¿szej instrukcji, je¿eli nie bêdzie dzia³aæ:
  33. @ IT LO
  34. BLO LR @ natomiast w drugim przejœciu 0x20004000 < 0x40000000 i wtedy nale¿y zakoñczyæ funkcjê
  35. @ (LR zawiera adres powrotu, BLO - B (skok) LO (lower flag))
  36. MOV R1,#0x20000000 @ reset PG13
  37. ORR R1,#0x4000 @ set PG14
  38. B PRZELACZ_OPZ:
  39.  
  40. C:
  41. #include "main_base.h"
  42.  
  43. unsigned short int on();
  44.  
  45. int main(void) {
  46. // to jest jednorazowa konfiguracja
  47. RCC->AHB1ENR |= RCC_AHB1Periph_GPIOG;
  48. GPIOG->MODER |= GPIO_Mode_OUT << (14*2);// 1 - output
  49. GPIOG->OTYPER|= GPIO_OType_PP << 14;//0 - push-pull (def.)
  50. GPIOG->PUPDR |= GPIO_PuPd_NOPULL << (14*2);//0 - (default)
  51. RCC->AHB1ENR |= RCC_AHB1Periph_GPIOG;
  52. GPIOG->MODER |= GPIO_Mode_OUT << (13*2);// 1 - output
  53. GPIOG->OTYPER|= GPIO_OType_PP << 13;//0 - push-pull (def.)
  54. GPIOG->PUPDR |= GPIO_PuPd_NOPULL << (13*2);//0 - (default)
  55. RCC->AHB1ENR |= RCC_AHB1Periph_GPIOA;
  56. GPIOA->MODER |= GPIO_Mode_IN; // 0 - input (default)
  57. GPIOA->PUPDR |= GPIO_PuPd_NOPULL ; // 0 - (default)
  58. while (1) {
  59. GPIOG->BSRR = 0x80004000; // dodany pocz¹tek 0x8000 gasz¹cy diodê PG14
  60. if(GPIOA->IDR&1)
  61. on();
  62. }
  63. }
Add Comment
Please, Sign In to add comment