====== 9. Blikání LED v assembleru ====== ===== Cíle cvičení ===== - Seznámit se s instrukční sadou - Seznámit se se zápisem programu v assembleru - Vytvořit program v assembleru, který bude blikat s LED2 na nucleu nebo s jinou LED na rozšiřujícím kitu - Ověřit funkčnost ostatních instrukcí, např. BL, AND, OR, EOR, LSR, LSL, ... ===== Co je třeba si připravit ===== - Prostudovat {{ :courses:b2m37mam:stm32f4_instruction_set.pdf#page=50 |instrukční sadu}} od strany 50 nebo alespoň sekci [[courses:b2m37mam:tutorials:asm_stm32|Vybraná instrukční sada pro STM32]] - Zopakovat si práci s registry RCC, GPIOx mikrokontroléru STM32F401 v {{ :courses:b2m37mam:stm32f401_refmanual.pdf |referenčním manuálu}} a předchozího cvičení - Prostudovat příklad blikání s LED v assembleru v sekci příkladů: [[courses:b2m37mam:priklady:stm32:01-gpio|01 - GPIO LED]] ===== Podklady pro cvičení ===== {{ :courses:b2m37mam:labs:mam_2023-cviceni_9.pdf | Podklady pro 9. cvičení-Skalický}} {{ :courses:b2m37mam:labs:terminal.zip | USART terminál}} {{ :courses:b2m37mam:labs:cortex-m4_generic_user_guide.pdf | Jádro ARM M4}} {{ :courses:b2m37mam:labs:cortex_m4_technical_ref_manual.pdf | Cortex ARM M4 Technical Reference Manual}} {{ :courses:b2m37mam:stm32f401_refmanual.pdf | Referenční manuál STM32F401 }} {{ :courses:b2m37mam:stm32f4_instruction_set.pdf | Instrukční sada STM32F4}} ===== Kódy pro cvičení ===== .global main_asm .equ RCC_BASE, 0x40023800 .equ RCC_AHB1ENR_OFFSET, 0x30 .equ RCC_AHB1ENR_GPIOA_EN, 0x0001 .equ GPIO_BASE, 0x40020000 .equ GPIO_MODER_OFFSET, 0x00 .equ GPIOA_ODR_OFFSET, 0x0014 .equ GPIOA_MODER_OUTPUT_PA5, 0x0400 .equ GPIOA_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