Advertisement
Guest User

Untitled

a guest
Aug 6th, 2012
871
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Test STM32F4-Assembler project
  2. ; Ня
  3.  
  4.     AREA    |.text|, CODE, READONLY
  5.  
  6. RCC_AHB1ENR           EQU 0x40023830
  7. RCC_AHB1ENR_GPIODEN   EQU 0x00000008 ; 3 бит
  8.  
  9. GPIOD_BASE            EQU 0x40020C00
  10.  
  11. GPIO_MODER_OFFSET     EQU 0x00000000
  12. GPIO_MODER_MODER12_0  EQU 0x01000000
  13. GPIO_MODER_MODER13_0  EQU 0x04000000
  14. GPIO_MODER_MODER14_0  EQU 0x10000000
  15. GPIO_MODER_MODER15_0  EQU 0x40000000
  16.  
  17. GPIO_PUPDR_OFFSET     EQU 0x0000000C
  18. GPIO_PUPDR_PUPDR12_0  EQU 0x01000000
  19. GPIO_PUPDR_PUPDR13_0  EQU 0x04000000
  20. GPIO_PUPDR_PUPDR14_0  EQU 0x10000000
  21. GPIO_PUPDR_PUPDR15_0  EQU 0x40000000
  22.  
  23. GPIO_BSRRL_OFFSET     EQU 0x00000018 ; Сброс
  24. GPIO_BSRRH_OFFSET     EQU 0x0000001A ; Установка
  25.  
  26. DELAY_COUNTER         EQU 0x000F4240 ; 1000000UL
  27.  
  28. GPIO_BSSR_PIN12       EQU 0x00001000 ; 12 бит
  29. GPIO_BSSR_PIN13       EQU 0x00002000 ; 13 бит
  30. GPIO_BSSR_PIN14       EQU 0x00004000 ; 14 бит
  31. GPIO_BSSR_PIN15       EQU 0x00008000 ; 15 бит
  32.  
  33. ; Инициализация системы тактирования
  34.             EXPORT SystemInit
  35. SystemInit  PROC
  36.            
  37.             BX LR ; Возвращаемся обратно
  38.            
  39.             ENDP
  40.  
  41. ; Программная задержка
  42. ; R0 - величина задержки
  43. delay       PROC
  44.             ; Вычитаем единицу
  45.             SUBS R0, R0, #1
  46.             ; Пока не обнулилась, крутим дальше
  47.             BNE delay
  48.            
  49.             BX LR
  50.             ENDP
  51.  
  52.             EXPORT __main
  53. __main      PROC
  54.            
  55.             NOP
  56.            
  57.             ; Разрешим тактирование порта D
  58.            
  59.             ; Загрузим в регистр R0 адрес регистра RCC_AHB1ENR
  60.             LDR R0, =RCC_AHB1ENR
  61.             ; Прочитаем в регистр R1 его содержимое
  62.             LDR R1, [R0]
  63.             ; Установим бит тактирования порта D
  64.             ORR R1, R1, #RCC_AHB1ENR_GPIODEN
  65.             ; Запишем обратно
  66.             STR R1, [R0]
  67.            
  68.             ; Установим режим работы выводов (выход)
  69.             LDR R0, =GPIOD_BASE
  70.             ; Прочитаем в регистр R1 его содержимое
  71.             LDR R1, [R0, #GPIO_MODER_OFFSET]
  72.            
  73.             ; Установим необходимые биты для выводов 12-15
  74.             ORR R1, R1, #GPIO_MODER_MODER12_0
  75.             ORR R1, R1, #GPIO_MODER_MODER13_0
  76.             ORR R1, R1, #GPIO_MODER_MODER14_0
  77.             ORR R1, R1, #GPIO_MODER_MODER15_0
  78.            
  79.             ; Запишем обратно
  80.             STR R1, [R0, #GPIO_MODER_OFFSET]
  81.            
  82.             ; Подтяжка к питанию
  83.             LDR R0, =GPIOD_BASE
  84.             LDR R1, [R0, #GPIO_PUPDR_OFFSET]
  85.            
  86.             ; Установим необходимые биты для выводов 12-15
  87.             ORR R1, R1, #GPIO_PUPDR_PUPDR12_0
  88.             ORR R1, R1, #GPIO_PUPDR_PUPDR13_0
  89.             ORR R1, R1, #GPIO_PUPDR_PUPDR14_0
  90.             ORR R1, R1, #GPIO_PUPDR_PUPDR15_0
  91.            
  92.             ; Запишем обратно
  93.             STR R1, [R0, #GPIO_PUPDR_OFFSET]
  94.            
  95.             ; В регистр R1 запишем адрес GPIOD
  96.             LDR R1, =GPIOD_BASE
  97.             ; В регистр R2 запишем величину задержки
  98.             LDR R2, =DELAY_COUNTER
  99.            
  100. __mainloop
  101.             ; Зажжём 12 бит
  102.             MOV R4, #GPIO_BSSR_PIN12 ; 12 бит
  103.             STR R4, [R1, #GPIO_BSRRL_OFFSET]
  104.            
  105.             ; Задержка
  106.             MOV R0, R2
  107.             BL  delay
  108.            
  109.             ; Погасим 12 бит
  110.             STR R4, [R1, #GPIO_BSRRH_OFFSET]
  111.            
  112.             ; Зажжём 13 бит
  113.             MOV R4, #GPIO_BSSR_PIN13 ; 13 бит
  114.             STR R4, [R1, #GPIO_BSRRL_OFFSET]
  115.            
  116.             ; Задержка
  117.             MOV R0, R2
  118.             BL  delay
  119.            
  120.             ; Погасим 13 бит
  121.             STR R4, [R1, #GPIO_BSRRH_OFFSET]
  122.            
  123.             ; Зажжём 14 бит
  124.             MOV R4, #GPIO_BSSR_PIN14 ; 14 бит
  125.             STR R4, [R1, #GPIO_BSRRL_OFFSET]
  126.            
  127.             ; Задержка
  128.             MOV R0, R2
  129.             BL  delay
  130.            
  131.             ; Погасим 14 бит
  132.             STR R4, [R1, #GPIO_BSRRH_OFFSET]
  133.            
  134.             ; Зажжём 15 бит
  135.             MOV R4, #GPIO_BSSR_PIN15 ; 15 бит
  136.             STR R4, [R1, #GPIO_BSRRL_OFFSET]
  137.            
  138.             ; Задержка
  139.             MOV R0, R2
  140.             BL  delay
  141.            
  142.             ; Погасим 15 бит
  143.             STR R4, [R1, #GPIO_BSRRH_OFFSET]
  144.            
  145.             ; На очередной круг
  146.             B __mainloop
  147.  
  148.             ENDP
  149.  
  150.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement