Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .syntax unified
- .global main, EXTI0_IRQHandler, EXTI1_IRQHandler
- .include "macros.s"
- main:
- bl init_gpio
- bl init_audio
- starter:
- GPIOx_ODR_set E, 12
- mov r8, #0 @ this will be our counter to ensure we only send 32 bits
- mov r6, #0 @ we will use this for the received message
- mov r5, #32 @ this will be our counter to ensure we only receive 32 bits
- @ mov r10, #31 @ counter to ensure we lsl correctly to get the msb every loop
- ldr r11, =0b10100001101110000111111111111111 @ store 440hz msg into r10
- bl sender
- bl clear_control_andCounter
- sender:
- push {lr}
- cmp r8, #32
- it ne
- blne sender_message
- it eq
- bleq starter
- pop {lr}
- bl sender
- bx lr
- sender_message:
- push {lr}
- mov r12, #0
- mov r12, r11 @r10 would be the binary msg
- lsr r12, #31
- cmp r12, #0
- it eq
- bleq write_bit_off
- it ne
- blne write_bit_on
- pop {lr}
- bx lr
- write_bit_off:
- GPIOx_ODR_clear E, 14
- GPIOx_ODR_toggle E, 13
- add r8, #1
- lsl r11, #1
- bx lr
- write_bit_on:
- GPIOx_ODR_set E, 14
- GPIOx_ODR_toggle E, 13
- add r8, #1
- lsl r11, #1
- bx lr
- clear_control_andCounter:
- push {lr}
- GPIOx_ODR_clear E, 12
- mov r8, #0
- pop {lr}
- bx lr
- data_reader:
- push {lr}
- GPIOx_IDR_read E, 11
- it eq
- bleq data_0_handler
- it ne
- blne data_1_handler
- pop {lr}
- bx lr
- data_0_handler:
- push {lr}
- subs r5, #1
- lsl r6, #1
- pop {lr}
- bx lr
- data_1_handler:
- push {lr}
- subs r5, #1
- mov r4, #1
- lsl r6, #1
- orr r6, r6, r4
- pop {lr}
- bx lr
- @ ldr r0, =storage
- @ ldr r1, [r0]
- @ lsl r1, #1
- @ str r1, [r0]
- loop:
- nop
- b loop
- @ good luck!
- continue:
- push {lr}
- cmp r5, #0
- it ne
- blne data_reader
- pop {lr}
- bx lr
- .type EXTI0_IRQHandler, %function
- EXTI0_IRQHandler:
- push {lr}
- @ mark this interrupt as "cleared" (i.e. no longer pending)
- EXTI_PR_clear_pending 0
- mov r6, #4
- GPIOx_IDR_read H, 0
- it eq
- moveq r7, #0
- it ne
- movne r7, #1
- pop {lr}
- bx lr
- .type EXTI1_IRQHandler, %function
- EXTI1_IRQHandler:
- push {lr}
- @ mark this interrupt as "cleared" (i.e. no longer pending)
- EXTI_PR_clear_pending 0
- @ check if control is 0
- cmp r7, #1
- it eq @ if not, continue to data_receiver
- bleq continue
- pop {lr}
- bx lr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement