#ifndef __ZBOOT_MACRO_H #define __ZBOOT_MACRO_H /* The LIST command is used to include comments in the script */ .macro LIST comment .endm /* The ED command is used to write a 32-bit word */ .macro ED, addr, data LDR r0, 1f LDR r1, 2f STR r1, [r0] B 3f 1 : .long \addr 2 : .long \data 3 : .endm /* The EW command is used to write a 16-bit word */ .macro EW, addr, data LDR r0, 1f LDR r1, 2f STRH r1, [r0] B 3f 1 : .long \addr 2 : .long \data 3 : .endm /* The EB command is used to write an 8-bit word */ .macro EB, addr, data LDR r0, 1f LDR r1, 2f STRB r1, [r0] B 3f 1 : .long \addr 2 : .long \data 3 : .endm /* The WAIT command is used to delay the execution */ .macro WAIT, time, reg LDR r1, 1f LDR r0, 2f STR r0, [r1] 10 : LDR r0, [r1] CMP r0, #0x00000000 BNE 10b NOP B 3f 1 : .long \reg 2 : .long \time * 100 3 : .endm /* The DD command is used to read a 32-bit word */ .macro DD, start, end LDR r1, 1f B 2f 1 : .long \start 2 : .endm /* loop until a given value has been read (with mask) */ .macro WAIT_MASK, addr, data, cmp LDR r0, 2f LDR r1, 3f LDR r2, 4f 1: LDR r3, [r0, #0] AND r3, r1, r3 CMP r2, r3 BNE 1b B 5f 2: .long \addr 3: .long \data 4: .long \cmp 5: .endm /* read 32-bit value from addr, "or" an immediate and write back */ .macro ED_OR, addr, data LDR r4, 1f LDR r5, 2f LDR r6, [r4] ORR r5, r6, r5 STR r5, [r4] B 3f 1: .long \addr 2: .long \data 3: .endm /* read 32-bit value from addr, "and" an immediate and write back */ .macro ED_AND, addr, data LDR r4, 1f LDR r5, 2f LDR r6, [r4] AND r5, r6, r5 STR r5, [r4] B 3f 1: .long \addr 2: .long \data 3: .endm #endif /* __ZBOOT_MACRO_H */