@.CharSet=CP1251
@GNU AS

@ +----------------------------------------------------------------------------+
@ |         Пример подключения дисплея LCD 5110 (на Philips PCD8544)           |
@ |                                 к STM32F100                                |
@ +----------------------------------------------------------------------------+
@ | Передача данных на дисплей может быть осуществлена двумя способами:        |
@ | - hard SPI - модуль PREIPH / SPI / SPI_TX с задействованием хардварного    |
@ |              SPI микроконтроллера (на выбор SPI1 / SPI2                    |
@ | - Soft SPI - модуль PERIPH / SPI / SOFT_SPI - с программно реализованым    |
@ |              протоколом SPI                                                |
@ |                                                                            |
@ | Модуль реализующий функции LCD: devices\pcd8544\lcd5510.asm                |
@ | в модуле определяется подключение сигналов RST, DC(A0), CS(CSE)            |
@ |                                                                            |
@ | Модуль реализующий дополнительный функции вывода на LCD:                   |
@ |                                              devices\pcd8544\lcd_func.asm  |
@ |                                                                            |
@ | определение пинов передачи данных SCK (CLK), DIN (MOSI) происходит в соот- |
@ | ветствующем модуле SPI в  periph \ spi                                     |
@ | - spi_tx.asm                                                               |
@ | или                                                                        |
@ | - soft_spi.asm                                                             |
@ |                                                                            |
@ +----------------------------------------------------------------------------+
@ | Процедуры реализованные в lcd5110.asm:                                     |
@ |                                                                            |
@ | LCD5110_INIT - инициализация дисплея, модуль вызывает инициализацию SPI    |
@ |                                                                            |
@ | LCD5110_REFRESH - отправка изображения с буфера экрана на дисплей          |
@ |                                                                            |
@ | LCD5110_CLEAR   - очистка буфера дисплея                                   |
@ |                                                                            |
@ | LCD5110_PIXEL - рисование точки                                            |
@ |                                                                            |
@ | LCD5110_CHAR  - вывод символа                                              |
@ |                                                                            |
@ +----------------------------------------------------------------------------+
@ | Процедуры реализованные в lcd_func.asm                                     |
@ |                                                                            |
@ |     LCD_PUTSTR:   Вывод строки по координатам:                             |
@ |                   R0:Y, R1:X, R2:COLOR R4:ADR_TEXT                         |
@ |                   Текст должен заканчиваться нулевым символом              |
@ |                   Управляющий код: 0x01, .short Y, .short X, .word col     |
@ |                                                                            |
@ |     LCD_PUTHEX:   Вывод шестнадцатеричного числа:                          |
@ |                   R0:Y, R1:X, R2:COLOR R4:HEXVal, R5:DigitCol              |
@ |                                                                            |
@ |     LCD_PUTDEC:   Вывод десятичного числа:                                 |
@ }                   R0:Y, R1:X, R2:COLOR R4:DECVal, R5:DigitCol              |
@ |                                                                            |
@ |     LCD_LINE:     Вывод линии:                                             |
@ |                   R0:Y1, R1:X1, R2:COLOR R3:Y2, R4:X2                      |
@ |                                                                            |
@ |     LCD_RECT:     Вывод прямоугольника:                                    |
@ |                   R0:Y1, R1:X1, R2:COLOR R3:Y2, R4:X2                      |
@ |                                                                            |
@ +----------------------------------------------------------------------------+
.syntax unified     @ синтаксис исходного кода
.thumb              @ тип используемых инструкций Thumb
.cpu cortex-m3      @ процессор


.section .asmcode

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

                    BL         SYSCLK24        @ настройка тактирования на 24 мгц

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

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

                 @ вывод рамки по экрану
                    MOV        R0, 0              @ Y
                    MOV        R1, 0              @ X
                    MOV        R3, 47             @ Y
                    MOV        R4, 83             @ X
                    BL         LCD_RECT           @ обычный вывод

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

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

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

MAIN_LOOP:          B          MAIN_LOOP

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

                    .BYTE      1
                    .SHORT     12, 38
                    .WORD      1
                    .ASCII     "НА"

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


