New

Dependents:   main

Committer:
ndiaz6
Date:
Mon Nov 11 18:34:01 2013 +0000
Revision:
0:168c04989363
Yes;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ndiaz6 0:168c04989363 1 AREA dig_out, CODE, READONLY
ndiaz6 0:168c04989363 2 ;--------------------OVERVIEW------------------------
ndiaz6 0:168c04989363 3 ; This file contains ARM Assembly language functions to set
ndiaz6 0:168c04989363 4 ; designated pins to General Purpose Output. It uses
ndiaz6 0:168c04989363 5 ; the PINSELx Register to Set the Pin Function to GPIO.
ndiaz6 0:168c04989363 6 ; Then, it uses the FIOxDIR register to set the
ndiaz6 0:168c04989363 7 ; direction of the pin to output. It also contains functions
ndiaz6 0:168c04989363 8 ; to write a digital HIGH or LOW to these output pins. It uses
ndiaz6 0:168c04989363 9 ; the FIOxCLR AND FIOxSET registers to clear/set the
ndiaz6 0:168c04989363 10 ; port bits respectively. Refer to the Pinnames.h
ndiaz6 0:168c04989363 11 ; file to see which LPC1768 pins a given mbed module is
ndiaz6 0:168c04989363 12 ; connected to. Then, refer to Chapters 8 and 9 of the
ndiaz6 0:168c04989363 13 ; LPC1768 User Manual to acquire information on the GPIO
ndiaz6 0:168c04989363 14 ; registers and their addresses.
ndiaz6 0:168c04989363 15 ;
ndiaz6 0:168c04989363 16 ; Example:
ndiaz6 0:168c04989363 17 ; LED1 is on GPIO port 1 bit 18 according to Pinnames.h
ndiaz6 0:168c04989363 18 ; For this bit: -the PINSEL3 register determines its pin function
ndiaz6 0:168c04989363 19 ; -the FIO1DIR register determines its pin direction
ndiaz6 0:168c04989363 20 ; According to the LPC1768 User Manual: -PINSEL3 is located at 0x4002C00C
ndiaz6 0:168c04989363 21 ; -FIO1DIR is located at 0x2009C020
ndiaz6 0:168c04989363 22 ; Now refer to the dig_out_LED1 function below to see the execution
ndiaz6 0:168c04989363 23 ;------------------------------------------------------
ndiaz6 0:168c04989363 24 ;
ndiaz6 0:168c04989363 25 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 26 EXPORT dig_out_LED1
ndiaz6 0:168c04989363 27 dig_out_LED1
ndiaz6 0:168c04989363 28 ;========dig_out_LED1========
ndiaz6 0:168c04989363 29 ; LED1 LOCATED AT PORT-1 PIN-18
ndiaz6 0:168c04989363 30 LDR R0, =0x4002C00C ; LOAD ADDRESS OF PINSEL3 REGISTER
ndiaz6 0:168c04989363 31 MOV.W R1, #0x00040000 ; MOVE BIT MASK (FOR BIT 18) INTO TEMP REGISTER (0x40000 = 0x01 << 18)
ndiaz6 0:168c04989363 32 ; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER
ndiaz6 0:168c04989363 33 LDR R2, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR REGISTER
ndiaz6 0:168c04989363 34 MOV R3, #0x30 ; FORM BITMASK FOR PINSEL3 REGISTER (clear appropriate bits)
ndiaz6 0:168c04989363 35 B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 36 ;
ndiaz6 0:168c04989363 37 ;
ndiaz6 0:168c04989363 38 ;
ndiaz6 0:168c04989363 39 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 40 EXPORT LED1_write
ndiaz6 0:168c04989363 41 LED1_write
ndiaz6 0:168c04989363 42 ;========LED1_write=========
ndiaz6 0:168c04989363 43 ; LED1 LOCATED AT PORT-1 PIN-18
ndiaz6 0:168c04989363 44 LDR R1, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR (PORT 1 BASE REGISTER)
ndiaz6 0:168c04989363 45 MOV.W R2, #0x040000 ; MOVE BIT MASK (FOR BIT 18) INTO TEMP REGISTER (0x40000 = 0x01 << 18)
ndiaz6 0:168c04989363 46 B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 47 ;
ndiaz6 0:168c04989363 48 ;
ndiaz6 0:168c04989363 49 ;
ndiaz6 0:168c04989363 50 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 51 EXPORT dig_out_LED2
ndiaz6 0:168c04989363 52 dig_out_LED2
ndiaz6 0:168c04989363 53 ;========dig_out_LED2========
ndiaz6 0:168c04989363 54 ; LED2 LOCATED AT PORT-1 PIN-20
ndiaz6 0:168c04989363 55 LDR R0, =0x4002C00C ; LOAD ADDRESS OF PINSEL3 REGISTER
ndiaz6 0:168c04989363 56 LDR R1, =0x00100000 ; MOVE BIT MASK (FOR BIT 20) INTO TEMP REGISTER (0x100000 = 0x01 << 20)
ndiaz6 0:168c04989363 57 LDR R2, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR REGISTER
ndiaz6 0:168c04989363 58 MOV.W R3, #0x300 ; FORM BITMASK FOR PINSEL3 REGISTER (clear appropriate bits)
ndiaz6 0:168c04989363 59 ; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER
ndiaz6 0:168c04989363 60 B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 61 ;
ndiaz6 0:168c04989363 62 ;
ndiaz6 0:168c04989363 63 ;
ndiaz6 0:168c04989363 64 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 65 EXPORT LED2_write
ndiaz6 0:168c04989363 66 LED2_write
ndiaz6 0:168c04989363 67 ;========LED2_write=========
ndiaz6 0:168c04989363 68 ; LED2 LOCATED AT PORT-1 PIN-20
ndiaz6 0:168c04989363 69 LDR R1, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR (PORT 1 BASE REGISTER)
ndiaz6 0:168c04989363 70 LDR R2, =0x0100000 ; MOVE BIT MASK (FOR BIT 20) INTO TEMP REGISTER (0x100000 = 0x01 << 20)
ndiaz6 0:168c04989363 71 B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 72 ;
ndiaz6 0:168c04989363 73 ;
ndiaz6 0:168c04989363 74 ;
ndiaz6 0:168c04989363 75 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 76 EXPORT dig_out_LED3
ndiaz6 0:168c04989363 77 dig_out_LED3
ndiaz6 0:168c04989363 78 ;========dig_out_LED3========
ndiaz6 0:168c04989363 79 ; LED3 LOCATED AT PORT-1 PIN-21
ndiaz6 0:168c04989363 80 LDR R0, =0x4002C00C ; LOAD ADDRESS OF PINSEL3 REGISTER
ndiaz6 0:168c04989363 81 LDR R1, =0x00200000 ; MOVE BIT MASK (FOR BIT 21) INTO TEMP REGISTER (0x200000 = 0x01 << 21)
ndiaz6 0:168c04989363 82 LDR R2, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR REGISTER
ndiaz6 0:168c04989363 83 MOV.W R3, #0xC00 ; FORM BITMASK FOR PINSEL3 REGISTER (clear appropriate bits)
ndiaz6 0:168c04989363 84 ; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER
ndiaz6 0:168c04989363 85 B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 86 ;
ndiaz6 0:168c04989363 87 ;
ndiaz6 0:168c04989363 88 ;
ndiaz6 0:168c04989363 89 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 90 EXPORT LED3_write
ndiaz6 0:168c04989363 91 LED3_write
ndiaz6 0:168c04989363 92 ;========LED3_write=========
ndiaz6 0:168c04989363 93 ; LED3 LOCATED AT PORT-1 PIN-21
ndiaz6 0:168c04989363 94 LDR R1, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR (PORT 1 BASE REGISTER)
ndiaz6 0:168c04989363 95 LDR R2, =0x0200000 ; MOVE BIT MASK (FOR BIT 21) INTO TEMP REGISTER (0x200000 = 0x01 << 21)
ndiaz6 0:168c04989363 96 B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 97 ;
ndiaz6 0:168c04989363 98 ;
ndiaz6 0:168c04989363 99 ;
ndiaz6 0:168c04989363 100 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 101 EXPORT dig_out_LED4
ndiaz6 0:168c04989363 102 dig_out_LED4
ndiaz6 0:168c04989363 103 ;========dig_out_LED4========
ndiaz6 0:168c04989363 104 ; LED4 LOCATED AT PORT-1 PIN-23
ndiaz6 0:168c04989363 105 LDR R0, =0x4002C00C ; LOAD ADDRESS OF PINSEL3 REGISTER
ndiaz6 0:168c04989363 106 LDR R1, =0x00800000 ; MOVE BIT MASK (FOR BIT 23) INTO TEMP REGISTER (0x800000 = 0x01 << 23)
ndiaz6 0:168c04989363 107 LDR R2, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR REGISTER
ndiaz6 0:168c04989363 108 MOV.W R3, #0xC000 ; FORM BITMASK FOR PINSEL3 REGISTER (clear appropriate bits)
ndiaz6 0:168c04989363 109 ; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER
ndiaz6 0:168c04989363 110 B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 111 ;
ndiaz6 0:168c04989363 112 ;
ndiaz6 0:168c04989363 113 ;
ndiaz6 0:168c04989363 114 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 115 EXPORT LED4_write
ndiaz6 0:168c04989363 116 LED4_write
ndiaz6 0:168c04989363 117 ;========LED4_write=========
ndiaz6 0:168c04989363 118 ; LED4 LOCATED AT PORT-1 PIN-23
ndiaz6 0:168c04989363 119 LDR R1, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR (PORT 1 BASE REGISTER)
ndiaz6 0:168c04989363 120 LDR R2, =0x0800000 ; MOVE BIT MASK (FOR BIT 21) INTO TEMP REGISTER (0x800000 = 0x01 << 23)
ndiaz6 0:168c04989363 121 B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 122 ;
ndiaz6 0:168c04989363 123 ;
ndiaz6 0:168c04989363 124 ;
ndiaz6 0:168c04989363 125 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 126 EXPORT dig_out_P11
ndiaz6 0:168c04989363 127 dig_out_P11
ndiaz6 0:168c04989363 128 ;========dig_out_P11========
ndiaz6 0:168c04989363 129 ; P11 LOCATED AT PORT-0 PIN-18
ndiaz6 0:168c04989363 130 LDR R0, =0x4002C004 ; LOAD ADDRESS OF PINSEL1 REGISTER
ndiaz6 0:168c04989363 131 MOV.W R1, #0x00040000 ; MOVE BIT MASK (FOR BIT 18) INTO TEMP REGISTER (0x40000 = 0x01 << 18)
ndiaz6 0:168c04989363 132 ; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER
ndiaz6 0:168c04989363 133 LDR R2, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 REGISTER
ndiaz6 0:168c04989363 134 MOV R3, #0x30 ; FORM BITMASK FOR PINSEL1 REGISTER (clear appropriate bits)
ndiaz6 0:168c04989363 135 B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 136 ;
ndiaz6 0:168c04989363 137 ;
ndiaz6 0:168c04989363 138 ;
ndiaz6 0:168c04989363 139 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 140 EXPORT P11_write
ndiaz6 0:168c04989363 141 P11_write
ndiaz6 0:168c04989363 142 ;========P11_write=========
ndiaz6 0:168c04989363 143 ; P11 LOCATED AT PORT-0 PIN-18
ndiaz6 0:168c04989363 144 LDR R1, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 (PORT 0 BASE REGISTER)
ndiaz6 0:168c04989363 145 MOV.W R2, #0x040000 ; MOVE BIT MASK (FOR BIT 18) INTO TEMP REGISTER (0x40000 = 0x01 << 18)
ndiaz6 0:168c04989363 146 B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 147 ;
ndiaz6 0:168c04989363 148 ;
ndiaz6 0:168c04989363 149 ;
ndiaz6 0:168c04989363 150 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 151 EXPORT dig_out_P12
ndiaz6 0:168c04989363 152 dig_out_P12
ndiaz6 0:168c04989363 153 ;========dig_out_P12========
ndiaz6 0:168c04989363 154 ; P12 LOCATED AT PORT-0 PIN-17
ndiaz6 0:168c04989363 155 LDR R0, =0x4002C004;
ndiaz6 0:168c04989363 156 MOV.W R1, #0x020000;
ndiaz6 0:168c04989363 157 ;
ndiaz6 0:168c04989363 158 LDR R2, =0x2009C000;
ndiaz6 0:168c04989363 159 MOV R3, #0xC
ndiaz6 0:168c04989363 160 B dig_out_exec ; * REPLACE THIS INSTRUCTION WITH CORRECT CODE
ndiaz6 0:168c04989363 161 ;
ndiaz6 0:168c04989363 162 ;
ndiaz6 0:168c04989363 163 ;
ndiaz6 0:168c04989363 164 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 165 EXPORT P12_write
ndiaz6 0:168c04989363 166 P12_write
ndiaz6 0:168c04989363 167 ;========P12_write=========
ndiaz6 0:168c04989363 168 ; P12 LOCATED AT PORT-0 PIN-17
ndiaz6 0:168c04989363 169 LDR R1, =0x2009C000;
ndiaz6 0:168c04989363 170 MOV.W R2, #0x020000;
ndiaz6 0:168c04989363 171 B write_exec ; * REPLACE THIS INSTRUCTION WITH CORRECT CODE
ndiaz6 0:168c04989363 172 ;
ndiaz6 0:168c04989363 173 ;
ndiaz6 0:168c04989363 174 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 175 EXPORT dig_out_P13
ndiaz6 0:168c04989363 176 dig_out_P13
ndiaz6 0:168c04989363 177 ;========dig_out_P13========
ndiaz6 0:168c04989363 178 ; P13 LOCATED AT PORT-0 PIN-15
ndiaz6 0:168c04989363 179 LDR R0, =0x4002C000 ; LOAD ADDRESS OF PINSEL0 REGISTER
ndiaz6 0:168c04989363 180 MOV.W R1, #0x00008000 ; MOVE BIT MASK (FOR BIT 15) INTO TEMP REGISTER (0x08000 = 0x01 << 15)
ndiaz6 0:168c04989363 181 ; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER
ndiaz6 0:168c04989363 182 LDR R2, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 REGISTER
ndiaz6 0:168c04989363 183 LDR R3, =0x70000000 ; FORM BITMASK FOR PINSEL0 REGISTER (clear appropriate bits)
ndiaz6 0:168c04989363 184 B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 185 ;
ndiaz6 0:168c04989363 186 ;
ndiaz6 0:168c04989363 187 ;
ndiaz6 0:168c04989363 188 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 189 EXPORT P13_write
ndiaz6 0:168c04989363 190 P13_write
ndiaz6 0:168c04989363 191 ;========P13_write=========
ndiaz6 0:168c04989363 192 ; P13 LOCATED AT PORT-0 PIN-15
ndiaz6 0:168c04989363 193 LDR R1, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 (PORT 0 BASE REGISTER)
ndiaz6 0:168c04989363 194 MOV.W R2, #0x008000 ; MOVE BIT MASK (FOR BIT 15) INTO TEMP REGISTER (0x08000 = 0x01 << 15)
ndiaz6 0:168c04989363 195 B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 196 ;
ndiaz6 0:168c04989363 197 ;
ndiaz6 0:168c04989363 198 ;
ndiaz6 0:168c04989363 199 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 200 EXPORT dig_out_P14
ndiaz6 0:168c04989363 201 dig_out_P14
ndiaz6 0:168c04989363 202 ;========dig_out_P14========
ndiaz6 0:168c04989363 203 ; P14 LOCATED AT PORT-0 PIN-16
ndiaz6 0:168c04989363 204 LDR R0, =0x4002C004 ; LOAD ADDRESS OF PINSEL1 REGISTER
ndiaz6 0:168c04989363 205 MOV.W R1, #0x00010000 ; MOVE BIT MASK (FOR BIT 16) INTO TEMP REGISTER (0x10000 = 0x01 << 16)
ndiaz6 0:168c04989363 206 ; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER
ndiaz6 0:168c04989363 207 LDR R2, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 REGISTER
ndiaz6 0:168c04989363 208 MOV R3, #0x03 ; FORM BITMASK FOR PINSEL0 REGISTER (clear appropriate bits)
ndiaz6 0:168c04989363 209 B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 210 ;
ndiaz6 0:168c04989363 211 ;
ndiaz6 0:168c04989363 212 ;
ndiaz6 0:168c04989363 213 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 214 EXPORT P14_write
ndiaz6 0:168c04989363 215 P14_write
ndiaz6 0:168c04989363 216 ;========P14_write=========
ndiaz6 0:168c04989363 217 ; P14 LOCATED AT PORT-0 PIN-16
ndiaz6 0:168c04989363 218 LDR R1, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 (PORT 0 BASE REGISTER)
ndiaz6 0:168c04989363 219 MOV.W R2, #0x010000 ; MOVE BIT MASK (FOR BIT 16) INTO TEMP REGISTER (0x10000 = 0x01 << 16)
ndiaz6 0:168c04989363 220 B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 221 ;
ndiaz6 0:168c04989363 222 ;
ndiaz6 0:168c04989363 223 ;
ndiaz6 0:168c04989363 224 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 225 EXPORT dig_out_P15
ndiaz6 0:168c04989363 226 dig_out_P15
ndiaz6 0:168c04989363 227 ;========dig_out_P15========
ndiaz6 0:168c04989363 228 ; P15 LOCATED AT PORT-0 PIN-23
ndiaz6 0:168c04989363 229 LDR R0, =0x4002C004 ; LOAD ADDRESS OF PINSEL1 REGISTER
ndiaz6 0:168c04989363 230 LDR R1, =0x00800000 ; MOVE BIT MASK (FOR BIT 23) INTO TEMP REGISTER (0x800000 = 0x01 << 23)
ndiaz6 0:168c04989363 231 LDR R2, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 REGISTER
ndiaz6 0:168c04989363 232 MOV.W R3, #0x7000 ; FORM BITMASK FOR PINSEL1 REGISTER (clear appropriate bits)
ndiaz6 0:168c04989363 233 ; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER
ndiaz6 0:168c04989363 234 B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 235 ;
ndiaz6 0:168c04989363 236 ;
ndiaz6 0:168c04989363 237 ;
ndiaz6 0:168c04989363 238 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 239 EXPORT P15_write
ndiaz6 0:168c04989363 240 P15_write
ndiaz6 0:168c04989363 241 ;========P15_write=========
ndiaz6 0:168c04989363 242 ; P15 LOCATED AT PORT-0 PIN-23
ndiaz6 0:168c04989363 243 LDR R1, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 (PORT 0 BASE REGISTER)
ndiaz6 0:168c04989363 244 MOV.W R2, #0x0800000 ; MOVE BIT MASK (FOR BIT 23) INTO TEMP REGISTER (0x800000 = 0x01 << 23)
ndiaz6 0:168c04989363 245 B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 246 ;
ndiaz6 0:168c04989363 247 ;
ndiaz6 0:168c04989363 248 ;
ndiaz6 0:168c04989363 249 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 250 EXPORT dig_out_P16
ndiaz6 0:168c04989363 251 dig_out_P16
ndiaz6 0:168c04989363 252 ;========dig_out_P16========
ndiaz6 0:168c04989363 253 ; P16 LOCATED AT PORT-0 PIN-24
ndiaz6 0:168c04989363 254 LDR R0, =0x4002C004 ; LOAD ADDRESS OF PINSEL1 REGISTER
ndiaz6 0:168c04989363 255 LDR R1, =0x01000000 ; MOVE BIT MASK (FOR BIT 24) INTO TEMP REGISTER (0x1000000 = 0x01 << 24)
ndiaz6 0:168c04989363 256 LDR R2, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 REGISTER
ndiaz6 0:168c04989363 257 MOV.W R3, #0x30000 ; FORM BITMASK FOR PINSEL1 REGISTER (clear appropriate bits)
ndiaz6 0:168c04989363 258 ; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER
ndiaz6 0:168c04989363 259 B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 260 ;
ndiaz6 0:168c04989363 261 ;
ndiaz6 0:168c04989363 262 ;
ndiaz6 0:168c04989363 263 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 264 EXPORT P16_write
ndiaz6 0:168c04989363 265 P16_write
ndiaz6 0:168c04989363 266 ;========P16_write=========
ndiaz6 0:168c04989363 267 ; P16 LOCATED AT PORT-0 PIN-24
ndiaz6 0:168c04989363 268 LDR R1, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 (PORT 0 BASE REGISTER)
ndiaz6 0:168c04989363 269 MOV.W R2, #0x1000000 ; MOVE BIT MASK (FOR BIT 23) INTO TEMP REGISTER (0x1000000 = 0x01 << 24)
ndiaz6 0:168c04989363 270 B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 271 ;
ndiaz6 0:168c04989363 272 ;
ndiaz6 0:168c04989363 273 ;
ndiaz6 0:168c04989363 274 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 275 EXPORT dig_out_P17
ndiaz6 0:168c04989363 276 dig_out_P17
ndiaz6 0:168c04989363 277 ;========dig_out_P17========
ndiaz6 0:168c04989363 278 ; P17 LOCATED AT PORT-0 PIN-25
ndiaz6 0:168c04989363 279 LDR R0, =0x4002C004 ; LOAD ADDRESS OF PINSEL1 REGISTER
ndiaz6 0:168c04989363 280 LDR R1, =0x02000000 ; MOVE BIT MASK (FOR BIT 25) INTO TEMP REGISTER (0x1000000 = 0x01 << 25)
ndiaz6 0:168c04989363 281 LDR R2, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 REGISTER
ndiaz6 0:168c04989363 282 MOV.W R3, #0xC0000 ; FORM BITMASK FOR PINSEL1 REGISTER (clear appropriate bits)
ndiaz6 0:168c04989363 283 ; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER
ndiaz6 0:168c04989363 284 B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 285 ;
ndiaz6 0:168c04989363 286 ;
ndiaz6 0:168c04989363 287 ;
ndiaz6 0:168c04989363 288 ; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK
ndiaz6 0:168c04989363 289 EXPORT P17_write
ndiaz6 0:168c04989363 290 P17_write
ndiaz6 0:168c04989363 291 ;========P17_write=========
ndiaz6 0:168c04989363 292 ; P17 LOCATED AT PORT-0 PIN-25
ndiaz6 0:168c04989363 293 LDR R1, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 (PORT 0 BASE REGISTER)
ndiaz6 0:168c04989363 294 MOV.W R2, #0x2000000 ; MOVE BIT MASK (FOR BIT 24) INTO TEMP REGISTER (0x1000000 = 0x01 << 25)
ndiaz6 0:168c04989363 295 B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES
ndiaz6 0:168c04989363 296 ;
ndiaz6 0:168c04989363 297 ;
ndiaz6 0:168c04989363 298 ;
ndiaz6 0:168c04989363 299 dig_out_exec
ndiaz6 0:168c04989363 300 ;========dig_out_execution========
ndiaz6 0:168c04989363 301 ; SET PIN FUNCTION TO GPIO
ndiaz6 0:168c04989363 302 LDR R4, [R0] ; \
ndiaz6 0:168c04989363 303 BIC R4, R3 ; - APPLY BITMASK FOR PINSELx REGISTER (clear appropriate bits)
ndiaz6 0:168c04989363 304 STR R4, [R0] ; STORE BITMASK IN PINSELx REGISTER
ndiaz6 0:168c04989363 305 ;
ndiaz6 0:168c04989363 306 ; SET UP GPIO PORT FOR OUTPUT DIRECTION (WITH SPECIFIED BITMASK IN REGISTER R2)
ndiaz6 0:168c04989363 307 LDR R6, [R2] ; \
ndiaz6 0:168c04989363 308 ORR R6, R1 ; - ACQUIRE BITMASK FOR FIOxDIR REGISTER (1 = Output)
ndiaz6 0:168c04989363 309 STR R6, [R2] ; STORE BITMASK IN FIOxDIR REGISTER
ndiaz6 0:168c04989363 310 ;
ndiaz6 0:168c04989363 311 ;RETURN TO MAIN
ndiaz6 0:168c04989363 312 BX LR ; RETURN TO MAIN USING LINKER REGISTER
ndiaz6 0:168c04989363 313 ;
ndiaz6 0:168c04989363 314 ;
ndiaz6 0:168c04989363 315 ;
ndiaz6 0:168c04989363 316 write_exec
ndiaz6 0:168c04989363 317 ;========write_execution=========
ndiaz6 0:168c04989363 318 ; CLEAR/SET BASED ON INPUT VALUE
ndiaz6 0:168c04989363 319 CMP R0, #0 ; VALUE == 0 ?
ndiaz6 0:168c04989363 320 ITE EQ ; (IF-THEN-ELSE) ON NEXT TWO INSTRUCTIONS USING "EQ" FLAG
ndiaz6 0:168c04989363 321 STREQ R2, [R1,#0x1C] ; if==0, CLEAR LED1 BIT
ndiaz6 0:168c04989363 322 STRNE R2, [R1,#0x18] ; if==1, SET LED1 BIT
ndiaz6 0:168c04989363 323 ;
ndiaz6 0:168c04989363 324 ; RETURN TO MAIN
ndiaz6 0:168c04989363 325 BX LR ; RETURN TO MAIN USING LINKER REGISTER
ndiaz6 0:168c04989363 326 ;
ndiaz6 0:168c04989363 327 ;
ndiaz6 0:168c04989363 328 ;
ndiaz6 0:168c04989363 329 END