@.CharSet=CP1251
@GNU AS

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

@.DESC type=module
@ +---------------------------------------------------------+
@ |  Демо проект использования основанных на протоколе I2C  |
@ |  устройств: дисплей SSD1306 (32x128) и датчик AM2320    |
@ |              STM32F411CEUx (black pill)                 |
@ +---------------------------------------------------------+
@ |                                                         |
@ |  Подключение дисплея и датчика:                         |
@ |   I2C1: пины B6(SCL) B7(SDA)                            |
@ +---------------------------------------------------------+
.section .asmcode

@ основная программа
.global Start
Start:              @ поместите код своей программы ниже
@                    BL              SYSCLK100_START    @ настройка  тактирования
                    BL              SYSCLK84_START     @ настройка  тактирования 84 МГц
                    BL              SYSTICK_START      @ запуск SysTick

.INCLUDE  "/src/periph/rcc/rcc_ahb1enr_gpio_set.inc"         @ тактирование gpio
.INCLUDE  "/src/periph/gpio/gpio_b_conf.inc"                 @ конфигурация gpio b

                    MOV             R0, 1
                    BL              I2C_INIT           @ инициализация I2C1

                    BL              AM2320_INIT
                    BL              SSD1306_INIT
                    BL              printStatic

                    MOV             R8, 1

MAIN_LOOP:
                    BL              AM2320_ReadData
                    MOV             R6, R1             @ Temperature * 10
                    MOV             R7, R2             @ Humidity * 10
                    MOV             R9, R3             @ CRC

                    MOV             R0, 0              @ Y
                    MOV             R1, 23             @ X
                    MOV             R4, R6
                    MOV             R5, 4
                    BL              LCD_PUTDEC

                    MOV             R0, 8             @ Y
                    MOV             R4, R7
                    BL              LCD_PUTDEC

                    MOV             R0, 16             @ Y
                    MOV             R4, R8             @ count
                    BL              LCD_PUTDEC

                    MOV             R0, 24             @ Y
                    MOV             R4, R9             @ =CRC
                    BL              LCD_PUTHEX

                    BL              SSD1306_UpdateScreen

                    MOV             R0, 500
                    BL              SYSTICK_DELAY
                    ADD             R8, R8, 1
                    B               MAIN_LOOP

printStatic:
                    PUSH            { LR }

                    MOV             R0, 0              @ Y
                    MOV             R1, 1              @ X
                    LDR             R4, =Temp
                    MOV             R5, 7
                    BL              LCD_PUTSTR

                    MOV             R0, 8             @ Y
                    LDR             R4, =Hum
                    BL              LCD_PUTSTR

                    MOV             R0, 16             @ Y
                    LDR             R4, =Count         @ count
                    BL              LCD_PUTSTR

                    MOV             R0, 24             @ Y
                    LDR             R4, =CRC           @ =CRC
                    BL              LCD_PUTSTR

                    BL              SSD1306_UpdateScreen

                    POP             { PC }


.SECTION       .rodata
.ALIGN         4
Temp:               .ASCIZ          "T: "
Hum:                .ASCIZ          "H: "
Count:              .ASCIZ          "C: "
CRC:                .ASCIZ          "CRC: "



