@.CharSet=CP1251
@GNU AS

@ +--------------------------------------------------------------------+
@ |     Демонстрационный проект подключения LCD дисплея на ST7565      |
@ |     и использование библиотеки дополнительных функций дисплея      |
@ |                 devices\st7565r\lcd_func.asm                       |
@ +--------------------------------------------------------------------+

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

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

.section .asmcode

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

                    BL         SYSTICK_INIT          @ инициализация системного таймера

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

                    BL         LCD_ST7565R_CLEAR

                  @ вывод рамки по экрану
                    MOV        R0, 10              @ Y
                    MOV        R1, 20              @ X
                    MOV        R3, 57              @ Y
                    MOV        R4, 103             @ X
                    MOV        R2, 1               @ обычный вывод
                    BL         LCD_RECT            @ прямоугольник

                 @ вывод текста
                    ADR        R4, ADR_TEXT       @ вывод текста
                    BL         LCD_PUTSTR         @ заданного во FLASH

                 @ вывод HEX-числа
                    MOV        R0, 40             @ Y
                    MOV        R1, 37             @ X
                    MOV        R2, 1              @ обычный вывод
                    LDR        R4, = 0xA1B2C3D4   @ число для вывода
                    MOV        R5, 8              @ количество символов для вывода
                    BL         LCD_PUTHEX

                 @ вывод текста
                    ADR        R4, ADR_TEXT1      @ вывод текста
                    BL         LCD_PUTSTR         @ заданного во FLASH

                    BL         LCD_ST7565R_REFRESH    @ обновить изображение на экране

led_blink:
                    @ включим gpio используемый для светодиодов
                    LDR        R2, = PERIPH_BASE + PERIPH_BB_BASE + ( RCC_BASE + RCC_APB2ENR ) * 32
                    STR        R1, [ R2, RCC_APB2ENR_IOPCEN_N  * 4 ]

                    @ настройка режима работы пинов GPIOC 8 & 9 Leds
                    LDR        R2, = GPIOC
                    LDR        R4, [ R2, GPIO_CRH ]
                    MOV        R3, GPIO_MODE_OUT50
                    BFI        R4, R3, (8-8) * 4, 4
                    BFI        R4, R3, (9-8) * 4, 4
                    STR        R4, [ R2, GPIO_CRH ]

                    MOV        R1, 1
                    MOV        R0, 0

                    LDR        R2, = PERIPH_BASE + PERIPH_BB_BASE + ( GPIOC_BASE + GPIO_ODR ) * 32
                    STR        R0, [ R2, 8 * 4 ]
                    STR        R1, [ R2, 9 * 4 ]

                    LDR        R0, = 500
                    BL         SYSTICK_DELAY

                    STR        R0, [ R2, 9 * 4 ]
                    STR        R1, [ R2, 8 * 4 ]

                    LDR        R0, = 500
                    BL         SYSTICK_DELAY

                    mov r5, 1

MAIN_LOOP:          SUBS       R6, R5, 1
                    NOP
                    NOP
                    NOP
                    B          MAIN_LOOP

ADR_TEXT:
                    .BYTE      1                  @ задать координаты
                    .SHORT     14, 40              @ Y, X
                    .WORD      1                  @ обычный вывод
                    .ASCII     "ST7565R"          @ текст

                    .BYTE      1
                    .SHORT     22, 58
                    .WORD      1
                    .ASCII     "НА"

                    .BYTE      1
                    .SHORT     30, 32
                    .WORD      0                  @ инверсия текста
                    .ASCII     "АССЕМБЛЕРЕ"
                    .BYTE      0                  @ закончить вывод

ADR_TEXT1:
                    .BYTE      1                  @ задать координаты
                    .SHORT     49, 35             @ Y, X
                    .WORD      1                  @ обычный вывод
                    .ASCIZ     "DMA + SPI"        @ текст



