A MIDI piano synthesizer that implements the Karplus Strong physical modeling algorithm.

Dependencies:   mbed USBDevice PinDetect

Committer:
asuszek
Date:
Mon Apr 25 23:58:15 2016 +0000
Revision:
22:b800e1766647
Parent:
18:26d93c5b9bb6
Fixed LED bug

Who changed what in which revision?

UserRevisionLine numberNew contents of line
asuszek 18:26d93c5b9bb6 1 AREA binary_clock, CODE, READONLY
asuszek 18:26d93c5b9bb6 2 EXPORT my_leds
asuszek 18:26d93c5b9bb6 3
asuszek 18:26d93c5b9bb6 4 ; Define some constants to make things more readable.
asuszek 18:26d93c5b9bb6 5 ALLLEDS EQU 0xB40000 ; Bit mask for all 4 LEDs.
asuszek 18:26d93c5b9bb6 6 LEDBASEADDR EQU 0x2009C020
asuszek 18:26d93c5b9bb6 7 LEDSETOFF EQU 0x18
asuszek 18:26d93c5b9bb6 8 LEDCLROFF EQU 0x1C
asuszek 18:26d93c5b9bb6 9
asuszek 18:26d93c5b9bb6 10 my_leds
asuszek 18:26d93c5b9bb6 11 ; First clear all of the LEDs.
asuszek 18:26d93c5b9bb6 12 LDR R1, =LEDBASEADDR
asuszek 18:26d93c5b9bb6 13 LDR R2, =ALLLEDS
asuszek 18:26d93c5b9bb6 14 STR R2, [R1, #LEDCLROFF]
asuszek 18:26d93c5b9bb6 15
asuszek 18:26d93c5b9bb6 16 ; Make sure we only use the 4 LSBs.
asuszek 18:26d93c5b9bb6 17 AND R0, R0, #0xF
asuszek 18:26d93c5b9bb6 18 ; Reverse bits to make LED order more intuitive.
asuszek 18:26d93c5b9bb6 19 RBIT R0, R0
asuszek 18:26d93c5b9bb6 20 LSR R0, R0, #28
asuszek 18:26d93c5b9bb6 21
asuszek 18:26d93c5b9bb6 22 ; Store the 4th bit in R2.
asuszek 18:26d93c5b9bb6 23 UBFX R2, R0, #0x3, #0x1
asuszek 18:26d93c5b9bb6 24 ; Clear bit 4 of the input.
asuszek 18:26d93c5b9bb6 25 BIC R0, R0, #0x8
asuszek 18:26d93c5b9bb6 26 ; If R2 is set, place a bit in bit 5.
asuszek 18:26d93c5b9bb6 27 BFI R0, R2, #0x4, #0x1
asuszek 18:26d93c5b9bb6 28
asuszek 18:26d93c5b9bb6 29 ; Shift input right once to store and delete LSB.
asuszek 18:26d93c5b9bb6 30 LSRS R0, R0, #1
asuszek 18:26d93c5b9bb6 31
asuszek 18:26d93c5b9bb6 32 ; Now bit 1 is stored in C and R0 contains bits 2, 3, and 4 starting at the LSB position.
asuszek 18:26d93c5b9bb6 33 ; Shift R0 left to put bits 2, 3, and 4 in the correct position.
asuszek 18:26d93c5b9bb6 34 LSL R0, R0, #20
asuszek 18:26d93c5b9bb6 35
asuszek 18:26d93c5b9bb6 36 ; Conditionally insert bit 1 into R0.
asuszek 18:26d93c5b9bb6 37 ORRCS R0, R0, #0x040000 ; LED1
asuszek 18:26d93c5b9bb6 38
asuszek 18:26d93c5b9bb6 39 ; Now use our full mask to set correct LEDs.
asuszek 18:26d93c5b9bb6 40 STR R0, [R1, #LEDSETOFF]
asuszek 18:26d93c5b9bb6 41
asuszek 18:26d93c5b9bb6 42 ; Return
asuszek 18:26d93c5b9bb6 43 BX LR
asuszek 18:26d93c5b9bb6 44 ALIGN
asuszek 18:26d93c5b9bb6 45 END
asuszek 18:26d93c5b9bb6 46