Demonstration of a spin lock

Dependencies:   ELEC350-Practicals-FZ429

Fork of Task617Solution-mbedos-FZ429 by University of Plymouth - Stages 1, 2 and 3

Committer:
noutram
Date:
Thu Nov 09 14:43:39 2017 +0000
Revision:
8:ad00c9036add
Demonstration of a spin lock

Who changed what in which revision?

UserRevisionLine numberNew contents of line
noutram 8:ad00c9036add 1 AREA asm_func, CODE, READONLY
noutram 8:ad00c9036add 2 ; Export my_asm function location so that C compiler can find it and link
noutram 8:ad00c9036add 3 EXPORT myasm
noutram 8:ad00c9036add 4 myasm
noutram 8:ad00c9036add 5
noutram 8:ad00c9036add 6 ; Write assmebler here
noutram 8:ad00c9036add 7 MOV R1, #0x20000000
noutram 8:ad00c9036add 8 BX R1 ; THIS IS BAD
noutram 8:ad00c9036add 9 BX LR
noutram 8:ad00c9036add 10
noutram 8:ad00c9036add 11 EXPORT spinlock
noutram 8:ad00c9036add 12 spinlock
noutram 8:ad00c9036add 13 LDREX R1,[R0] ;Read counter
noutram 8:ad00c9036add 14 SUBS R1, #1 ;Subtract 1
noutram 8:ad00c9036add 15 ITT PL ;IF True True >= 0
noutram 8:ad00c9036add 16 STREXPL R2,R1,[R0] ;TRY UPDATE
noutram 8:ad00c9036add 17 CMPPL R2,#0 ;SUCCEED?
noutram 8:ad00c9036add 18 BNE spinlock
noutram 8:ad00c9036add 19 BX LR
noutram 8:ad00c9036add 20
noutram 8:ad00c9036add 21 EXPORT spinunlock
noutram 8:ad00c9036add 22 spinunlock
noutram 8:ad00c9036add 23 LDREX R1,[R0]
noutram 8:ad00c9036add 24 ADD R1,#1
noutram 8:ad00c9036add 25 STREX R2,R1,[R0]
noutram 8:ad00c9036add 26 CMP R2,#0
noutram 8:ad00c9036add 27 BNE spinunlock
noutram 8:ad00c9036add 28 BX LR
noutram 8:ad00c9036add 29 END