@.CharSet=CP1251
@GNU AS

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

@ +-----------------------------------------------------------------+
@ |     Демонстрационный проект для OLED LCD SSD1306 128x32         |
@ +-----------------------------------------------------------------+
@ | mcu: STM32F401CCU6 (black pill)                                 |
@ | lcd: SSD1306, 0.96 inch, 128x32                                   |
@ +-----------------------------------------------------------------+
@ | подключение:                                                    |
@ | PB6 - SCL,  PB7 - SDA, VCC - 3V, GND - GND                      |
@ +-----------------------------------------------------------------+
@ | фотографии в каталоге doc проекта                               |
@ +-----------------------------------------------------------------+

.section .asmcode

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

.INCLUDE       "/src/periph/gpio/rcc_ahb1enr_gpio_set.inc"    @ настройка тактирования GPIO
.INCLUDE       "/src/periph/gpio/gpio_b_conf.inc"             @ настройка пинов GPIO_B

                    MOV             R0, 100
                    BL              SYSTICK_DELAY

                    BL              I2C_INIT @ инициализация интерфейса i2c1

                    BL              LCD_SSD1306_INIT    @ инициализация дисплея на SSD1306

                    BL              LCD_SSD1306_CLEAR

                    @ вывод линии перед инверсным выводом текста слева
                    MOV             R0, 4
                    MOV             R1, 16
                    MOV             R2, 0
                    MOV             R3, 14
                    MOV             R4, 16
                    BL              LCD_LINE

                    MOV             R0, 3
                    MOV             R1, 16
                    MOV             R2, 0
                    MOV             R3, 3
                    MOV             R4, 113
                    BL              LCD_LINE

                    ADR             R4, TEXT_SH1107_INIT
                    BL              LCD_PUTSTR

                    ADR             R4, TEXT_SH1107_TEST
                    BL              LCD_PUTSTR

                    @ вывод рамки
                    MOV             R0, 0
                    MOV             R1, 0
                    MOV             R2, 0
                    MOV             R3, 31
                    MOV             R4, 127
                    BL              LCD_RECT

                    BL              LCD_SSD1306_REFRESH

MAIN_LOOP:          B    MAIN_LOOP

TEXT_SH1107_INIT:   .BYTE           0x01
                    .SHORT          4    @ Y
                    .SHORT          17    @ X
                    .WORD           0x01    @ Color
                    .ASCIZ          "SSD1306 init"

TEXT_SH1107_TEST:   .BYTE           0x01
                    .SHORT          18    @ Y
                    .SHORT          32    @ X
                    .WORD           0x00    @ Color
                    .ASCIZ          "128 x 32"


