1#ifndef __ZBOOT_MACRO_H 2#define __ZBOOT_MACRO_H 3 4/* The LIST command is used to include comments in the script */ 5.macro LIST comment 6.endm 7 8/* The ED command is used to write a 32-bit word */ 9.macro ED, addr, data 10 LDR r0, 1f 11 LDR r1, 2f 12 STR r1, [r0] 13 B 3f 141 : .long \addr 152 : .long \data 163 : 17.endm 18 19/* The EW command is used to write a 16-bit word */ 20.macro EW, addr, data 21 LDR r0, 1f 22 LDR r1, 2f 23 STRH r1, [r0] 24 B 3f 251 : .long \addr 262 : .long \data 273 : 28.endm 29 30/* The EB command is used to write an 8-bit word */ 31.macro EB, addr, data 32 LDR r0, 1f 33 LDR r1, 2f 34 STRB r1, [r0] 35 B 3f 361 : .long \addr 372 : .long \data 383 : 39.endm 40 41/* The WAIT command is used to delay the execution */ 42.macro WAIT, time, reg 43 LDR r1, 1f 44 LDR r0, 2f 45 STR r0, [r1] 4610 : 47 LDR r0, [r1] 48 CMP r0, #0x00000000 49 BNE 10b 50 NOP 51 B 3f 521 : .long \reg 532 : .long \time * 100 543 : 55.endm 56 57/* The DD command is used to read a 32-bit word */ 58.macro DD, start, end 59 LDR r1, 1f 60 B 2f 611 : .long \start 622 : 63.endm 64 65/* loop until a given value has been read (with mask) */ 66.macro WAIT_MASK, addr, data, cmp 67 LDR r0, 2f 68 LDR r1, 3f 69 LDR r2, 4f 701: 71 LDR r3, [r0, #0] 72 AND r3, r1, r3 73 CMP r2, r3 74 BNE 1b 75 B 5f 762: .long \addr 773: .long \data 784: .long \cmp 795: 80.endm 81 82/* read 32-bit value from addr, "or" an immediate and write back */ 83.macro ED_OR, addr, data 84 LDR r4, 1f 85 LDR r5, 2f 86 LDR r6, [r4] 87 ORR r5, r6, r5 88 STR r5, [r4] 89 B 3f 901: .long \addr 912: .long \data 923: 93.endm 94 95/* read 32-bit value from addr, "and" an immediate and write back */ 96.macro ED_AND, addr, data 97 LDR r4, 1f 98 LDR r5, 2f 99 LDR r6, [r4] 100 AND r5, r6, r5 101 STR r5, [r4] 102 B 3f 1031: .long \addr 1042: .long \data 1053: 106.endm 107 108#endif /* __ZBOOT_MACRO_H */ 109