Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Пример работы с контроллером прерываний NVIC
- ; STM32F4-Discovery
- ; Проверять выравнивание стека (8 байт)
- PRESERVE8
- ; Секция переменных
- AREA RAM, NOINIT, READWRITE, ALIGN=3
- Counter DCD 0 ; Счётчик переполнений таймера
- AREA |.text|, CODE, READONLY
- GET stm32f4xx.inc
- GET nvic.inc
- ; Прерывание от таймера 6
- EXPORT TIM6_DAC_IRQHandler
- TIM6_DAC_IRQHandler PROC
- ; Прерывание автоматически сохраняет состояние регистров 0-3, 12, LR, PC на стеке
- ; Увеличим счётчик на 1
- LDR R0, =Counter
- LDR R1, [R0]
- ADD R1, #1
- STR R1, [R0]
- ; Сбросим флаг прерывания (иначе никогда из него не выйдем)
- LDR R0, =TIMER6_BASE
- LDR R1, [R0, #TIM_SR_OFFSET]
- MVN R2, #TIM_SR_UIF
- AND R1, R2
- STR R1, [R0, #TIM_SR_OFFSET]
- BX LR
- ENDP
- ; Заглушка инициализации системы тактирования
- EXPORT SystemInit
- SystemInit PROC
- ; Возврат
- BX LR
- ENDP
- ; Главная программа
- EXPORT __main
- __main PROC
- ; Сбросим счётчик
- MOV R1, #0
- LDR R7, =Counter
- STR R1, [R7]
- ; Разрешим прерывание от таймера 6
- MOV R0, #TIM6_DAC_IRQn
- BL NVIC_EnableIRQ
- ; Загружаем базовое смещение регистра настройки тактирования
- LDR R0, =RCC_APB1ENR
- ; Установить флаг разрешения тактирования таймера 6
- LDR R1, [R0]
- ORR R1, #RCC_APB1ENR_TIM6EN
- STR R1, [R0]
- ; Загружаем базовое смещение таймера 6
- LDR R0, =TIMER6_BASE
- ; Записываем, до скольки считать
- LDR R1, =0x8000 ; Числа от балды
- STR R1, [R0, #TIM_ARR_OFFSET]
- ; Настраиваем предделитель таймера
- LDR R1, =0x0100 ; Числа от балды
- STR R1, [R0, #TIM_PSC_OFFSET]
- ; Разрешаем генерацию прерывания
- MOV R1, #TIM_DIER_UIE
- STR R1, [R0, #TIM_DIER_OFFSET]
- ; Включаем таймер TIM6
- MOV R1, #TIM_CR1_CEN ; Разрешить счёт
- STR R1, [R0, #TIM_CR1_OFFSET]
- __mainloop ; Вечный цикл
- ; Прочитаем регистр CNT (сколько насчитал таймер)
- LDR R1, [R0, #TIM_CNT_OFFSET]
- ; Прочитаем содержимое переменной-счётчика
- LDR R3, [R7]
- ; Новый круг~
- B __mainloop
- ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement