Advertisement
Guest User

Untitled

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