Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- RS = $E ; 14
- EN = $F ; 15
- DATA4 = $1A ; 26
- DATA5 = $13 ; 19
- DATA6 = $D ; 13
- DATA7 = $6 ; 6
- b start
- init_display:
- push {r11, lr}
- add r11, sp, #0 ; Initialize Frame Pointer
- sub sp, sp, #16 ; Initialize local stack
- mov r0, RS
- bl set_gpio_to_output
- mov r0, EN
- bl set_gpio_to_output
- mov r0, DATA4
- bl set_gpio_to_output
- mov r0, DATA5
- bl set_gpio_to_output
- mov r0, DATA6
- bl set_gpio_to_output
- mov r0, DATA7
- bl set_gpio_to_output
- mov r0, #0x33
- mov r1, #0
- bl write8
- mov r0, #0x32
- mov r1, #0
- bl write8
- mov r0, #0x06
- mov r1, #0
- bl write8
- mov r0, #0x0C
- mov r1, #0
- bl write8
- mov r0, #0x28
- mov r1, #0
- bl write8
- mov r0, #1
- mov r1, #0
- bl write8
- bl long_delay
- mov r0, #0x4E
- mov r1, #1
- bl write8
- sub sp, r11, #0
- pop {r11, pc}
- pulse_enable:
- push {lr}
- mov r0, EN
- bl turn_gpio_off
- bl delay
- mov r0, EN
- bl turn_gpio_on
- bl delay
- mov r0, EN
- bl turn_gpio_off
- pop {pc}
- write8:
- ; r0: value between 0 and 255 to be written
- ; r1: 0 if command else data
- push {r11, lr}
- add r11, sp, #0 ; Initialize Frame Pointer
- sub sp, sp, #16 ; Initialize local stack
- str r0, [r11, #-4]
- str r1, [r11, #-8]
- bl long_delay
- ; START RS
- ; Write the value of the rs based on the passed value in r1
- ldr r5, [r11, #-8]
- cmp r5, #0
- beq write8_rs_command
- write8_rs_data:
- mov r0, RS
- bl turn_gpio_on
- b write8_rs_done
- write8_rs_command:
- mov r0, RS
- bl turn_gpio_off
- b write8_rs_done
- write8_rs_done:
- ; END RS
- ; START Write Upper 4 bits
- ldr r5, [r11, #-4]
- lsr r1, r5, #4
- mov r0, DATA4
- bl set_pin_if_lsb_is_set
- lsr r1, r5, #5
- mov r0, DATA5
- bl set_pin_if_lsb_is_set
- lsr r1, r5, #6
- mov r0, DATA6
- bl set_pin_if_lsb_is_set
- lsr r1, r5, #7
- mov r0, DATA7
- bl set_pin_if_lsb_is_set
- ; END Write Upper 4 bits
- bl pulse_enable
- ; START Write Lower 4 bits
- ldr r5, [r11, #-4]
- mov r1, r5
- mov r0, DATA4
- bl set_pin_if_lsb_is_set
- lsr r1, r5, #1
- mov r0, DATA5
- bl set_pin_if_lsb_is_set
- lsr r1, r5, #2
- mov r0, DATA6
- bl set_pin_if_lsb_is_set
- lsr r1, r5, #3
- mov r0, DATA7
- bl set_pin_if_lsb_is_set
- ; END Write Lower 4 bits
- bl pulse_enable
- sub sp, r11, #0
- pop {r11, pc}
- set_pin_if_lsb_is_set:
- ; r0 = pin to set
- ; r1 = value to check
- push {lr}
- and r1, r1, #1
- cmp r1, #0
- beq lsb_off
- lsb_on:
- bl turn_gpio_on
- b lsb_done
- lsb_off:
- bl turn_gpio_off
- b lsb_done
- lsb_done:
- pop {pc}
- delay:
- push {lr}
- mov r0, #1
- bl sleep
- pop {pc}
- long_delay:
- push {lr}
- mov r0, #3
- bl sleep
- pop {pc}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement