Advertisement
teplofizik

nvic.s (asm_nvic)

Nov 19th, 2012
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Драйвер NVIC
  2. ; Плата STM32F4-Discovery
  3.  
  4.     ; Проверять выравнивание стека (8 байт)
  5.     PRESERVE8
  6.     AREA    |.text|, CODE, READONLY
  7.  
  8.     GET stm32f4xx.inc
  9.  
  10. ; Разрешить прерывание по его номеру
  11. ; Аргументы: 1
  12. ;  R0: номер прерывания
  13. ; Результат: нет
  14.                EXPORT NVIC_EnableIRQ
  15. NVIC_EnableIRQ PROC
  16.                ; Вычислим номер регистра и его позицию.
  17.                ; R1 - номер регистра (3 старших бита из восьми)
  18.                MOV   R1, R0
  19.                LSR   R1, #5
  20.                
  21.                ; R2 - номер бита (5 младших бит)
  22.                MOV   R2, R0
  23.                AND   R2, #0x1F
  24.                
  25.                ; R1 - смещение до регистра от базового (*4)
  26.                LSL   R1, #2
  27.                
  28.                ; R0 - маска выбранного бита
  29.                MOV   R0, #0x01
  30.                LSL   R0, R2
  31.                
  32.                ; Базовый адрес регистров включения прерываний
  33.                MOV32 R2, NVIC_ISER_BASE
  34.                
  35.                ; Адрес нужного регистра NVIC_ISER[IRQ >> 5]
  36.                ADD   R2, R1
  37.                
  38.                ; Установить бит в регистре
  39.                LDR   R1, [R2]
  40.                ORR   R1, R0
  41.                STR   R1, [R2]
  42.                
  43.                ; Готово, выходим
  44.                BX    LR
  45.                ENDP
  46.  
  47.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement