7. Blikání LED v assembleru

Cíle cvičení

  1. Seznámit se s instrukční sadou
  2. Seznámit se se zápisem programu v assembleru
  3. Vytvořit program v assembleru, který bude blikat s LED2 na nucleu nebo s jinou LED na rozšiřujícím kitu
  4. Ověřit funkčnost ostatních instrukcí, např. BL, AND, OR, EOR, LSR, LSL, …

Co je třeba si připravit

  1. Prostudovat instrukční sadu od strany 50 nebo alespoň sekci Vybraná instrukční sada pro STM32
  2. Zopakovat si práci s registry RCC, GPIOx mikrokontroléru STM32F401 v referenčním manuálu a předchozího cvičení
  3. Prostudovat příklad blikání s LED v assembleru v sekci příkladů: 01 - GPIO LED

Podklady pro cvičení

Kódy pro cvičení

  .global main_asm
 
  .equ   RCC_BASE,               0x40023800
  .equ   RCC_AHB1ENR_OFFSET,     0x30
  .equ   RCC_AHB1ENR_GPIOA_EN,   0x0001
 
  .equ   GPIOA_BASE,             0x40020000
  .equ   GPIO_MODER_OFFSET,      0x00
  .equ   GPIO_ODR_OFFSET,        0x0014
  .equ   GPIO_MODER_OUTPUT_PA5,  0x0400
  .equ   GPIO_ODR_PA5,           0x0020
 
  .equ   DELAY_MS,               500
  .equ   COUNT_1MS,              5332
 
@ ----------------------------
delay_function:
   bx lr
 
@ ----------------------------
blink_led:
   bx lr
 
@ ----------------------------
init_function:
   bx	lr
 
@ ----------------------------
main_asm:
   bl init_function
 
loop:
   bl delay_function
   bl blink_led
 
   b loop

Počítadlo cyklů

V každém jádře ARM procesoru lze najít blok DWT (Data Watchpoint and Trace Unit), který počítá počet instrukcních cyklů, které procesor vykonal. Lze tímto způsobem si ověřit, jak dlouho bude trvat zpoždění, v našem případě počet cyklů pro 500ms. Tuto informaci najdete v Cortex ARM M4 Technical Reference Manual. Konkrétně registr DWT_CYCCNT na adrese 0xE0001004 nám udává počet cyklů.

courses/b2m37mam/labs/07.txt · Last modified: 2025/11/11 18:49 by nentvond