@.CharSet=CP1251
@GNU AS

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

@ +-----------------------------------------------------------------+
@ |      Демонстрационный проект для OLED LCD SH1107 128x64         |
@ +-----------------------------------------------------------------+
@ | mcu: STM32F401CCU6 (black pill)                                 |
@ | lcd: SH1107, 1.3 inch, 128x64                                   |
@ +-----------------------------------------------------------------+
@ | подключение:                                                    |
@ | 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_SH1107_INIT    @ инициализация дисплея на SH1107

                    BL              LCD_SH1107_CLEAR   @ очистим буфер экрана

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

                    ADR             R4, TEXT_SH1107_INIT
                    BL              LCD_PUTSTR

                    ADR             R4, TEXT_SH1107_TEST
                    BL              LCD_PUTSTR

                    ADR             R4, TEXT_SH1107_char
                    BL              LCD_PUTSTR

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

                    BL              LCD_SH1107_REFRESH   @ обновление дисплея из буфера

MAIN_LOOP:          B    MAIN_LOOP


TEXT_SH1107_INIT:   .BYTE           0x01
                    .SHORT          10    @ Y
                    .SHORT          22    @ X
                    .WORD           0x01    @ Color Инверсный вывод
                    .ASCIZ          "SH1107 init"

TEXT_SH1107_TEST:   .BYTE           0x01
                    .SHORT          25    @ Y
                    .SHORT          24    @ X
                    .WORD           0x00    @ Color
                    .ASCIZ          "Test PRINT"

TEXT_SH1107_char:   .BYTE           0x01
                    .SHORT          40    @ Y
                    .SHORT          33    @ X
                    .WORD           0x00    @ Color
                    .ASCIZ          "128 х 64 "


