Advertisement
teplofizik

main.s (5)

Aug 7th, 2012
407
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Test STM32F4-Assembler project
  2. ; http://teplofizik.diary.ru/p179425307.htm
  3.  
  4. ; 1. Первая версия.
  5. ; 2. Оформленные функции управления светодиодов.
  6. ; 3. Разделение по модулям.
  7. ; 4. Инициализация стандартной библиотеки и подключение C-файла
  8. ; 5. Реализация SPI и подключение акселерометра.
  9.  
  10.     AREA    |.text|, CODE, READONLY
  11.  
  12.     GET led.inc    ; Драйвер светодиодов
  13.     GET button.inc ; Драйвер кнопки
  14.     GET system.inc ; Задержка
  15.     GET spi.inc    ; SPI
  16.     GET accel.inc  ; Акселерометр
  17.     GET math.inc   ; Математика
  18.    
  19. ; Объявления
  20. ACCEL_PERIOD         EQU 100 ; Период опроса акселерометра
  21.  
  22.             EXPORT main
  23. main        PROC
  24.            
  25.             ; Инициализация кнопок и светодиодов
  26.             BL LedInit
  27.             BL ButtonInit
  28.             ; Инициализация SPI
  29.             BL SpiInit
  30.             ; Инициализация акселерометра
  31.             BL AccelInit
  32.            
  33.             ; R4 - счётчик ШИМ
  34.             MOV R4, #0
  35.            
  36.             ; R5 - период опроса акселерометра
  37.             LDR R5, =ACCEL_PERIOD
  38.          
  39.             ; R6-R8, XYZ
  40.          
  41. ; Главный цикл программы          
  42. __mainloop
  43.             ; Если кнопка нажата - светятся все светодиоды.
  44.             BL  ButtonGet
  45.            
  46.             CMP R0, #1
  47.             BEQ __button_1
  48.            
  49. __button_0
  50.             ; Кнопка не нажата
  51.             ; Погасим светодиод 0
  52.             MOV R0, #0
  53.             BL  LedOff
  54.             B __button_end
  55. __button_1
  56.             ; Кнопка нажата
  57.             ; Зажжём светодиод 0
  58.             MOV R0, #0
  59.             BL  LedOn
  60.  
  61. __button_end
  62.  
  63.             ; ШИМ (по совпадении R4 и R6 светодиод гаснет
  64.             CMP R6, R4        
  65.  
  66.             BNE __skippwmX
  67.  
  68.             ; Гасим светодиод 1
  69.             MOV R0, #1
  70.             BL  LedOff
  71. __skippwmX
  72.            
  73.             ; ШИМ (по совпадении R4 и R7 светодиод гаснет
  74.             CMP R7, R4        
  75.  
  76.             BNE __skippwmY
  77.  
  78.             ; Гасим светодиод 2
  79.             MOV R0, #2
  80.             BL  LedOff
  81. __skippwmY
  82.  
  83.             ; ШИМ (по совпадении R4 и R8 светодиод гаснет
  84.             CMP R8, R4        
  85.  
  86.             BNE __skippwmZ
  87.  
  88.             ; Гасим светодиод 3
  89.             MOV R0, #3
  90.             BL  LedOff
  91. __skippwmZ
  92.            
  93.             ; +1, отрежем старшую часть
  94.             ADD  R4, #1
  95.             ANDS R4, #0xFF
  96.  
  97.             BNE __mainloop
  98.             ; Зажигаем светодиоды - новый цикл
  99.            
  100.             ; Если равны 0 регистры сравнения, то не зажигаем.
  101.             CMP R6, #0
  102.             BEQ __skipx
  103.            
  104.            
  105.             MOV R0, #1
  106.             BL  LedOn
  107. __skipx
  108.  
  109.             CMP R7, #0
  110.             BEQ __skipy
  111.  
  112.             MOV R0, #2
  113.             BL  LedOn
  114.  
  115. __skipy
  116.  
  117.             CMP R8, #0
  118.             BEQ __skipz
  119.            
  120.             MOV R0, #3
  121.             BL  LedOn
  122.      
  123. __skipz      
  124.             ; Период проверим
  125.             SUBS R5, #1
  126.             BNE __mainloop
  127.  
  128.             ; Перезарядим счётчик
  129.             LDR R5, =ACCEL_PERIOD
  130.  
  131.             ; Прочитаем ускорение по осям. Получим модуль числа
  132.             BL AccelX
  133.             BL abs8
  134.             MOV R6, R0
  135.            
  136.             BL AccelY
  137.             BL abs8
  138.             MOV R7, R0
  139.  
  140.             BL AccelZ
  141.             BL abs8
  142.             MOV R8, R0
  143.            
  144.             ; На очередной круг
  145.             B __mainloop
  146.  
  147.             ENDP
  148.  
  149.     END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement