Advertisement
teplofizik

system.s (8)

Aug 11th, 2012
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Системный файл
  2. ; Плата STM32F4-Discovery
  3. ; http://teplofizik.diary.ru/p179559800.htm
  4.  
  5.     ; Проверять выравнивание стека (8 байт)
  6.     PRESERVE8
  7.  
  8.     ; Секция переменных
  9.     AREA    RAM, NOINIT, READWRITE, ALIGN=3
  10.  
  11.                 EXPORT  SysTickCount
  12.  
  13. ; Счётчик миллисекунд
  14. SysTickCount    DCD 0
  15.  
  16.     AREA    |.text|, CODE, READONLY
  17.  
  18.             EXPORT SystemInit
  19.             EXPORT SysTickInit
  20.             EXPORT delay
  21.            
  22.             GET stm32f4xx.inc
  23.  
  24. ; Частота тактирования (МГц) HSI
  25. F_CPU            EQU 16000000
  26. ; Значение для перезагрузки счётчика системного таймера
  27. F_SYSTICKRELOAD  EQU (F_CPU / 1000)
  28.  
  29.  
  30. ; Инициализация системы тактирования
  31. ; Аргументы: нет
  32. ; Результат: нет
  33. SystemInit  PROC
  34.            
  35.             BX  LR ; Возвращаемся обратно
  36.            
  37.             ENDP
  38.  
  39. ; Настройка системного таймера
  40. ; Аргументы: нет
  41. ; Результат: нет
  42. SysTickInit PROC
  43.             PUSH {LR}
  44.            
  45.             ; Обнулим счётчик миллисекунд
  46.             MOV32 R0, SysTickCount
  47.             MOV   R1, #0
  48.             STR   R1, [R0]
  49.            
  50.             ; Базовый адрес системного таймера
  51.             MOV32 R0, STK_BASE
  52.            
  53.             ; Значение для перезагрузки
  54.             ; Частота таймера: F_CPU / 8 = 2000000 Гц
  55.             ; Тик 1 раз в миллисекунду
  56.             MOV32 R1, F_SYSTICKRELOAD
  57.             STR   R1, [R0, #STK_LOAD_OFFSET]
  58.  
  59.             ; Запуск и разрешение прерывания
  60.             MOV   R1, #0
  61.             ORR   R1, #STK_CTRL_ENABLE  ; Разрешить тактирование
  62.             ORR   R1, #STK_CTRL_TICKINT ; Разрешить прерывание
  63.             STRH  R1, [R0, #STK_CTRL_OFFSET]
  64.            
  65.  
  66.             POP  {PC}
  67.             ENDP
  68.  
  69. ; Программная задержка
  70. ; Аргументы: 1
  71. ;  R0 - величина задержки
  72. ; Результат: нет
  73. delay       PROC
  74.             ; Вычитаем единицу
  75.             SUBS R0, R0, #1
  76.             ; Пока не обнулилась, крутим дальше
  77.             BNE  delay
  78.            
  79.             BX   LR
  80.             ENDP
  81.  
  82.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement