Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Драйвер светодиодов
- ; Плата STM32F4-Discovery
- ; http://teplofizik.diary.ru/p179425307.htm
- AREA |.text|, CODE, READONLY
- EXPORT LedInit
- EXPORT LedOn
- EXPORT LedOff
- GET stm32f4xx.inc
- ; Объявления
- ; Получить маску для зажигания светодиода по его номеру
- ; Аргументы: 1
- ; R0 - номер светодиода, от 0 до 3
- ; Результат: маска, если номер не верный, в R0 будет 0.
- GetPinMask PROC
- CMP R0, #3
- BGT GetPinMask_error
- MOV R1, #GPIO_BSSR_PIN12
- LSL R0, R1, R0
- B GetPinMask_return
- GetPinMask_error ; Ошибка
- MOV R0, #0
- GetPinMask_return
- BX LR
- ENDP
- ; Погасить светодиод по его номеру
- ; Аргументы: 1
- ; R0 - номер светодиода, от 0 до 3
- ; Результат: нет
- LedOff PROC
- ; Сохраним в стеке адрес возврата
- PUSH {LR}
- ; Получить маску
- BL GetPinMask
- ; В R0 теперь маска
- ; Погасить выбронный светодиод
- LDR R1, =GPIOD_BASE
- STRH R0, [R1, #GPIO_BSRRH_OFFSET]
- ; Возврат из процедуры
- POP {PC}
- ENDP
- ; Зажечь светодиод по его номеру
- ; Аргументы: 1
- ; R0 - номер светодиода, от 0 до 3
- ; Результат: нет
- LedOn PROC
- ; Сохраним в стеке адрес возврата
- PUSH {LR}
- ; Получить маску
- BL GetPinMask
- ; В R0 теперь маска
- ; Зажечь выбронный светодиод
- LDR R1, =GPIOD_BASE
- STRH R0, [R1, #GPIO_BSRRL_OFFSET]
- ; Возврат из процедуры
- POP {PC}
- ENDP
- ; Инициализация выводов, подключённых к светодиодам
- ; Аргументы: нет
- ; Результат: нет
- LedInit PROC
- ; Разрешим тактирование порта D
- ; Загрузим в регистр R0 адрес регистра RCC_AHB1ENR
- LDR R0, =RCC_AHB1ENR
- ; Прочитаем в регистр R1 его содержимое
- LDR R1, [R0]
- ; Установим бит тактирования порта D
- ORR R1, R1, #RCC_AHB1ENR_GPIODEN
- ; Запишем обратно
- STR R1, [R0]
- ; Установим режим работы выводов (выход)
- LDR R0, =GPIOD_BASE
- ; Прочитаем в регистр R1 его содержимое
- LDR R1, [R0, #GPIO_MODER_OFFSET]
- ; Установим необходимые биты для выводов 12-15
- ORR R1, R1, #GPIO_MODER_MODER12_0
- ORR R1, R1, #GPIO_MODER_MODER13_0
- ORR R1, R1, #GPIO_MODER_MODER14_0
- ORR R1, R1, #GPIO_MODER_MODER15_0
- ; Запишем обратно
- STR R1, [R0, #GPIO_MODER_OFFSET]
- ; Подтяжка к питанию
- LDR R0, =GPIOD_BASE
- LDR R1, [R0, #GPIO_PUPDR_OFFSET]
- ; Установим необходимые биты для выводов 12-15
- ORR R1, R1, #GPIO_PUPDR_PUPDR12_0
- ORR R1, R1, #GPIO_PUPDR_PUPDR13_0
- ORR R1, R1, #GPIO_PUPDR_PUPDR14_0
- ORR R1, R1, #GPIO_PUPDR_PUPDR15_0
- ; Запишем обратно
- STR R1, [R0, #GPIO_PUPDR_OFFSET]
- BX LR
- ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement