@.CharSet=CP1251
@GNU AS

@
@ Демонстрационная программа для STM32Discovery
@        микроконтроллер STM32F100RB6
@        (без настройки тактирования)
@
@             Мигание светодиода
@
@ Используемый порт: GPIOC
@ Используемый пин:  9
@

.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 + RCC_APB2ENR_IOPCEN_N * 4
                         MOV          R1, 1
                         STR          R1, [ R0 ]

                    @ Настройка пина 8 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
                         STR          R1, [ R0, GPIO_CRH ]

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

                    @ зажгем светодиод
                         MOV          R1, 1 << 9
                         STR          R1, [ R0, GPIO_ODR ]

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

                    @ потушим светодиод
                         MOV          R1, 0
                         STR          R1, [ R0, GPIO_ODR ]

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

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



