@.CharSet=CP1251
@GNU AS

@ +--------------------------------------------------------+
@ |    Демонстрационная программа для STM32 VL Discovery   |
@ |           микроконтроллер  STM32F100RBT6               |
@ |            (без настройки тактирования)                |
@ +--------------------------------------------------------+
@ |            Мигание светодиода                          |
@ |                                                        |
@ | Используемый порт: GPIOC                               |
@ | Используемые пины: 9, 8 (перемигивание)                |
@ |                                                        |
@ +--------------------------------------------------------+

.syntax unified     @ синтаксис исходного кода
.thumb              @ тип используемых инструкций Thumb
.cpu cortex-m3      @ процессор

.INCLUDE  "/src/inc/rcc.inc"
.INCLUDE  "/src/inc/gpio.inc"
.section .asmcode

@ основная программа
.global Start
Start:              @ поместите код своей программы ниже

                    @ включим тактирование GPIO C   (при помощи BitBanding)
                         LDR          R0, = PERIPH_BASE + PERIPH_BB_BASE + ( RCC_BASE + RCC_APB2ENR ) * 32
                         MOV          R1, 1
                         STR          R1, [ R0, RCC_APB2ENR_IOPCEN_N * 4 ]

                    @ Настройка пина 9 GPIO C на выход с частотой 50 мгц
                         LDR          R0, = PERIPH_BASE + GPIOC_BASE
                         LDR          R1, [ R0, GPIO_CRH ]
                         MOV          R2, GPIO_MODE_OUT50
                         BFI          R1, R2, GPIO_CRH_MODE9_N, 4
                         BFI          R1, R2, GPIO_CRH_MODE8_N, 4
                         STR          R1, [ R0, GPIO_CRH ]

MAIN_LOOP:               @ главный цикл мигания, начало цикла

                    @ зажгем 1-ый потушим 2-ой светодиод
                         MOV         R1, 1 << 8
                         STR          R1, [ R0, GPIO_ODR ]

                    @ пауза
                         LDR          R1, = 0xfffff
pause1:                  SUBS         R1, R1, 1
                         BNE          pause1

                    @ потушим 1-ый и зажгем 2-ой светодиод
                         MOV          R1, 2 << 8
                         STR          R1, [ R0, GPIO_ODR ]

                    @ пауза
                         LDR          R1, = 0xfffff
pause2:                  SUBS         R1, R1, 1
                         BNE          pause2

                         B            MAIN_LOOP    @ циклимся на начало мигания



