Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Системный файл
- ; Плата STM32F4-Discovery
- ; http://teplofizik.diary.ru/p179559800.htm
- ; Проверять выравнивание стека (8 байт)
- PRESERVE8
- ; Секция переменных
- AREA RAM, NOINIT, READWRITE, ALIGN=3
- EXPORT SysTickCount
- ; Счётчик миллисекунд
- SysTickCount DCD 0
- AREA |.text|, CODE, READONLY
- EXPORT SystemInit
- EXPORT SysTickInit
- EXPORT delay
- GET stm32f4xx.inc
- ; Частота тактирования (МГц) HSI
- F_CPU EQU 16000000
- ; Значение для перезагрузки счётчика системного таймера
- F_SYSTICKRELOAD EQU (F_CPU / 1000)
- ; Инициализация системы тактирования
- ; Аргументы: нет
- ; Результат: нет
- SystemInit PROC
- BX LR ; Возвращаемся обратно
- ENDP
- ; Настройка системного таймера
- ; Аргументы: нет
- ; Результат: нет
- SysTickInit PROC
- PUSH {LR}
- ; Обнулим счётчик миллисекунд
- MOV32 R0, SysTickCount
- MOV R1, #0
- STR R1, [R0]
- ; Базовый адрес системного таймера
- MOV32 R0, STK_BASE
- ; Значение для перезагрузки
- ; Частота таймера: F_CPU / 8 = 2000000 Гц
- ; Тик 1 раз в миллисекунду
- MOV32 R1, F_SYSTICKRELOAD
- STR R1, [R0, #STK_LOAD_OFFSET]
- ; Запуск и разрешение прерывания
- MOV R1, #0
- ORR R1, #STK_CTRL_ENABLE ; Разрешить тактирование
- ORR R1, #STK_CTRL_TICKINT ; Разрешить прерывание
- STRH R1, [R0, #STK_CTRL_OFFSET]
- POP {PC}
- ENDP
- ; Программная задержка
- ; Аргументы: 1
- ; R0 - величина задержки
- ; Результат: нет
- delay PROC
- ; Вычитаем единицу
- SUBS R0, R0, #1
- ; Пока не обнулилась, крутим дальше
- BNE delay
- BX LR
- ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement