Advertisement
Guest User

Untitled

a guest
May 27th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 2.35 KB | None | 0 0
  1. .syntax unified
  2. .global main, EXTI0_IRQHandler, EXTI1_IRQHandler
  3.  
  4. .include "macros.s"
  5.  
  6.  
  7.  
  8. main:
  9.   bl init_gpio
  10.   bl init_audio
  11. starter:
  12.   GPIOx_ODR_set E, 12
  13.   mov r8, #0                    @ this will be our counter to ensure we only send 32 bits
  14.   mov r6, #0                    @ we will use this for the received message
  15.   mov r5, #32                   @ this will be our counter to ensure we only receive 32 bits
  16. @  mov r10, #31                  @ counter to ensure we lsl correctly to get the msb every loop
  17.   ldr r11, =0b10100001101110000111111111111111 @ store 440hz msg into r10
  18.   bl sender
  19.   bl clear_control_andCounter
  20.  
  21.  
  22.  
  23. sender:
  24.   push {lr}
  25.   cmp r8, #32
  26.   it ne
  27.   blne sender_message
  28.   it eq
  29.   bleq starter
  30.   pop {lr}
  31.   bl sender
  32.   bx lr
  33.  
  34. sender_message:
  35.   push {lr}
  36.   mov r12, #0
  37.   mov r12, r11  @r10 would be the binary msg
  38.   lsr r12, #31
  39.   cmp r12, #0
  40.   it eq
  41.   bleq write_bit_off
  42.   it ne
  43.   blne write_bit_on
  44.   pop {lr}
  45.   bx lr
  46.  
  47.  
  48.  
  49. write_bit_off:
  50.   GPIOx_ODR_clear E, 14
  51.   GPIOx_ODR_toggle E, 13
  52.   add r8, #1
  53.   lsl r11, #1
  54.   bx lr
  55.  
  56. write_bit_on:
  57.   GPIOx_ODR_set E, 14
  58.   GPIOx_ODR_toggle E, 13
  59.   add r8, #1
  60.   lsl r11, #1
  61.   bx lr
  62.  
  63.  
  64. clear_control_andCounter:
  65.   push {lr}
  66.   GPIOx_ODR_clear E, 12
  67.   mov r8, #0
  68.   pop {lr}
  69.   bx lr
  70.  
  71.  
  72.  
  73. data_reader:
  74.   push {lr}
  75.   GPIOx_IDR_read E, 11
  76.   it eq
  77.   bleq data_0_handler
  78.   it ne
  79.   blne data_1_handler
  80.   pop {lr}
  81.   bx lr
  82.  
  83. data_0_handler:
  84.   push {lr}
  85.   subs r5, #1
  86.   lsl r6, #1
  87.   pop {lr}
  88.   bx lr
  89.  
  90.  
  91. data_1_handler:
  92.   push {lr}
  93.   subs r5, #1
  94.   mov r4, #1
  95.   lsl r6, #1
  96.   orr r6, r6, r4
  97.   pop {lr}
  98.   bx lr
  99.  
  100. @  ldr r0, =storage
  101. @  ldr r1, [r0]
  102. @  lsl r1, #1
  103. @  str r1, [r0]
  104.  
  105. loop:
  106.   nop
  107.   b loop
  108.   @ good luck!
  109.  
  110.  
  111. continue:
  112.   push {lr}
  113.   cmp r5, #0
  114.   it ne
  115.   blne data_reader
  116.   pop {lr}
  117.   bx lr
  118.  
  119.  
  120. .type EXTI0_IRQHandler, %function
  121. EXTI0_IRQHandler:
  122.   push {lr}
  123.   @ mark this interrupt as "cleared" (i.e. no longer pending)
  124.   EXTI_PR_clear_pending 0
  125.   mov r6, #4
  126.  
  127.   GPIOx_IDR_read H, 0
  128.   it eq
  129.   moveq r7, #0
  130.   it ne
  131.   movne r7, #1
  132.   pop {lr}
  133.   bx lr
  134.  
  135.  
  136. .type EXTI1_IRQHandler, %function
  137. EXTI1_IRQHandler:
  138.   push {lr}
  139.   @ mark this interrupt as "cleared" (i.e. no longer pending)
  140.   EXTI_PR_clear_pending 0
  141.   @ check if control is 0
  142.   cmp r7, #1
  143.   it eq  @ if not, continue to data_receiver
  144.   bleq continue
  145.   pop {lr}
  146.   bx lr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement