Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Test STM32F4-Assembler project
- ; http://teplofizik.diary.ru/p179425307.htm
- ; 1. Первая версия.
- ; 2. Оформленные функции управления светодиодов.
- ; 3. Разделение по модулям.
- ; 4. Инициализация стандартной библиотеки и подключение C-файла
- ; 5. Реализация SPI и подключение акселерометра.
- AREA |.text|, CODE, READONLY
- GET led.inc ; Драйвер светодиодов
- GET button.inc ; Драйвер кнопки
- GET system.inc ; Задержка
- GET spi.inc ; SPI
- GET accel.inc ; Акселерометр
- GET math.inc ; Математика
- ; Объявления
- ACCEL_PERIOD EQU 100 ; Период опроса акселерометра
- EXPORT main
- main PROC
- ; Инициализация кнопок и светодиодов
- BL LedInit
- BL ButtonInit
- ; Инициализация SPI
- BL SpiInit
- ; Инициализация акселерометра
- BL AccelInit
- ; R4 - счётчик ШИМ
- MOV R4, #0
- ; R5 - период опроса акселерометра
- LDR R5, =ACCEL_PERIOD
- ; R6-R8, XYZ
- ; Главный цикл программы
- __mainloop
- ; Если кнопка нажата - светятся все светодиоды.
- BL ButtonGet
- CMP R0, #1
- BEQ __button_1
- __button_0
- ; Кнопка не нажата
- ; Погасим светодиод 0
- MOV R0, #0
- BL LedOff
- B __button_end
- __button_1
- ; Кнопка нажата
- ; Зажжём светодиод 0
- MOV R0, #0
- BL LedOn
- __button_end
- ; ШИМ (по совпадении R4 и R6 светодиод гаснет
- CMP R6, R4
- BNE __skippwmX
- ; Гасим светодиод 1
- MOV R0, #1
- BL LedOff
- __skippwmX
- ; ШИМ (по совпадении R4 и R7 светодиод гаснет
- CMP R7, R4
- BNE __skippwmY
- ; Гасим светодиод 2
- MOV R0, #2
- BL LedOff
- __skippwmY
- ; ШИМ (по совпадении R4 и R8 светодиод гаснет
- CMP R8, R4
- BNE __skippwmZ
- ; Гасим светодиод 3
- MOV R0, #3
- BL LedOff
- __skippwmZ
- ; +1, отрежем старшую часть
- ADD R4, #1
- ANDS R4, #0xFF
- BNE __mainloop
- ; Зажигаем светодиоды - новый цикл
- ; Если равны 0 регистры сравнения, то не зажигаем.
- CMP R6, #0
- BEQ __skipx
- MOV R0, #1
- BL LedOn
- __skipx
- CMP R7, #0
- BEQ __skipy
- MOV R0, #2
- BL LedOn
- __skipy
- CMP R8, #0
- BEQ __skipz
- MOV R0, #3
- BL LedOn
- __skipz
- ; Период проверим
- SUBS R5, #1
- BNE __mainloop
- ; Перезарядим счётчик
- LDR R5, =ACCEL_PERIOD
- ; Прочитаем ускорение по осям. Получим модуль числа
- BL AccelX
- BL abs8
- MOV R6, R0
- BL AccelY
- BL abs8
- MOV R7, R0
- BL AccelZ
- BL abs8
- MOV R8, R0
- ; На очередной круг
- B __mainloop
- ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement