Advertisement
teplofizik

led.s (5)

Aug 7th, 2012
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Драйвер светодиодов
  2. ; Плата STM32F4-Discovery
  3. ; http://teplofizik.diary.ru/p179425307.htm
  4.  
  5.     AREA    |.text|, CODE, READONLY
  6.  
  7.             EXPORT LedInit
  8.             EXPORT LedOn
  9.             EXPORT LedOff
  10.  
  11.             GET stm32f4xx.inc
  12.  
  13. ; Объявления
  14.  
  15. ; Получить маску для зажигания светодиода по его номеру
  16. ; Аргументы: 1
  17. ;  R0 - номер светодиода, от 0 до 3
  18. ; Результат: маска, если номер не верный, в R0 будет 0.
  19. GetPinMask  PROC
  20.             CMP  R0, #3
  21.             BGT   GetPinMask_error
  22.            
  23.             MOV R1, #GPIO_BSSR_PIN12
  24.             LSL R0, R1, R0
  25.            
  26.             B   GetPinMask_return
  27.            
  28. GetPinMask_error ; Ошибка
  29.             MOV   R0, #0
  30.            
  31. GetPinMask_return
  32.             BX    LR
  33.             ENDP
  34.  
  35. ; Погасить светодиод по его номеру
  36. ; Аргументы: 1
  37. ;  R0 - номер светодиода, от 0 до 3
  38. ; Результат: нет
  39. LedOff      PROC
  40.             ; Сохраним в стеке адрес возврата
  41.             PUSH {LR}
  42.  
  43.             ; Получить маску
  44.             BL   GetPinMask
  45.            
  46.             ; В R0 теперь маска
  47.             ; Погасить выбронный светодиод
  48.             LDR R1, =GPIOD_BASE
  49.             STRH R0, [R1, #GPIO_BSRRH_OFFSET]
  50.            
  51.             ; Возврат из процедуры
  52.             POP  {PC}
  53.             ENDP
  54.            
  55. ; Зажечь светодиод по его номеру
  56. ; Аргументы: 1
  57. ;  R0 - номер светодиода, от 0 до 3
  58. ; Результат: нет
  59. LedOn       PROC
  60.             ; Сохраним в стеке адрес возврата
  61.             PUSH {LR}
  62.  
  63.             ; Получить маску
  64.             BL   GetPinMask
  65.            
  66.             ; В R0 теперь маска
  67.             ; Зажечь выбронный светодиод
  68.             LDR R1, =GPIOD_BASE
  69.             STRH R0, [R1, #GPIO_BSRRL_OFFSET]
  70.            
  71.             ; Возврат из процедуры
  72.             POP  {PC}
  73.             ENDP
  74.  
  75. ; Инициализация выводов, подключённых к светодиодам
  76. ; Аргументы: нет
  77. ; Результат: нет
  78. LedInit     PROC
  79.             ; Разрешим тактирование порта D
  80.             ; Загрузим в регистр R0 адрес регистра RCC_AHB1ENR
  81.             LDR R0, =RCC_AHB1ENR
  82.             ; Прочитаем в регистр R1 его содержимое
  83.             LDR R1, [R0]
  84.             ; Установим бит тактирования порта D
  85.             ORR R1, R1, #RCC_AHB1ENR_GPIODEN
  86.             ; Запишем обратно
  87.             STR R1, [R0]
  88.            
  89.             ; Установим режим работы выводов (выход)
  90.             LDR R0, =GPIOD_BASE
  91.             ; Прочитаем в регистр R1 его содержимое
  92.             LDR R1, [R0, #GPIO_MODER_OFFSET]
  93.            
  94.             ; Установим необходимые биты для выводов 12-15
  95.             ORR R1, R1, #GPIO_MODER_MODER12_0
  96.             ORR R1, R1, #GPIO_MODER_MODER13_0
  97.             ORR R1, R1, #GPIO_MODER_MODER14_0
  98.             ORR R1, R1, #GPIO_MODER_MODER15_0
  99.            
  100.             ; Запишем обратно
  101.             STR R1, [R0, #GPIO_MODER_OFFSET]
  102.            
  103.             ; Подтяжка к питанию
  104.             LDR R0, =GPIOD_BASE
  105.             LDR R1, [R0, #GPIO_PUPDR_OFFSET]
  106.            
  107.             ; Установим необходимые биты для выводов 12-15
  108.             ORR R1, R1, #GPIO_PUPDR_PUPDR12_0
  109.             ORR R1, R1, #GPIO_PUPDR_PUPDR13_0
  110.             ORR R1, R1, #GPIO_PUPDR_PUPDR14_0
  111.             ORR R1, R1, #GPIO_PUPDR_PUPDR15_0
  112.            
  113.             ; Запишем обратно
  114.             STR R1, [R0, #GPIO_PUPDR_OFFSET]
  115.            
  116.             BX  LR
  117.             ENDP
  118.  
  119.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement