SIM_SCGC5 EQU 0x40048038
GPIOB_PSOR EQU 0x400FF044
GPIOB_PCOR EQU 0x400FF048
GPIOB_PDDR EQU 0x400FF054
GPIOD_PDIR EQU 0x400FF0D0
GPIOD_PDDR EQU 0x400FF0D4
;inputs:
PORTD_PCR0 EQU 0x4004C000
PORTD_PCR2 EQU 0x4004C008
;outputs:
PORTB_PCR1 EQU 0x4004A004
PORTB_PCR2 EQU 0x4004A008
PORTB_PCR3 EQU 0x4004A00C
;input masks:
SEATSWITCH_MASK EQU 0x00000001
BELTSWITCH_MASK EQU 0x00000004
;output masks:
GREEN_MASK EQU 0x00000002
YELLOW_MASK EQU 0x00000004
FLRED_MASK EQU 0x00000008
;delay counter:
DELAY_COUNTER1 EQU 0x04000000
DELAY_COUNTER2 EQU 0x00020000
AREA asm_area, CODE, READONLY
EXPORT asm_main
asm_main
BL init_gpio
stateA
BL greenoff
BL yellowoff
BL flashingredoff
LDR R2,=SEATSWITCH_MASK
BL CHECK_INPUT
BEQ stateB
BNE stateA
stateB
BL greenoff
BL yellowon
BL flashingredoff
LDR R0,=DELAY_COUNTER1
BL delay
LDR R2,=SEATSWITCH_MASK
BL CHECK_INPUT
BNE stateA
LDR R2,=BELTSWITCH_MASK
BL CHECK_INPUT
BEQ stateD
BNE stateC
stateC
BL greenoff
BL yellowon
BL flashingredon
LDR R0,=DELAY_COUNTER2
BL delay
BL flashingredoff
LDR R0,=DELAY_COUNTER2
BL delay
LDR R2,=SEATSWITCH_MASK
BL CHECK_INPUT
BNE stateA
LDR R2,=BELTSWITCH_MASK
BL CHECK_INPUT
BEQ stateD
BNE stateC
stateD
BL greenon
BL yellowon
BL flashingredoff
LDR R2,=SEATSWITCH_MASK
BL CHECK_INPUT
BNE stateA
LDR R2,=BELTSWITCH_MASK
BL CHECK_INPUT
BNE stateB
BEQ stateD
greenon
LDR R0,=GPIOB_PSOR
LDR R1,[R0]
LDR R2,=GREEN_MASK
ORRS R1,R2
STR R1,[R0]
BX LR
greenoff
LDR R0,=GPIOB_PCOR
LDR R1,[R0]
LDR R2,=GREEN_MASK
ORRS R1,R2
STR R1,[R0]
BX LR
yellowon
LDR R0,=GPIOB_PSOR
LDR R1,[R0]
LDR R2,=YELLOW_MASK
ORRS R1,R2
STR R1,[R0]
BX LR
yellowoff
LDR R0,=GPIOB_PCOR
LDR R1,[R0]
LDR R2,=YELLOW_MASK
ORRS R1,R2
STR R1,[R0]
BX LR
flashingredon
LDR R0,=GPIOB_PSOR
LDR R1,[R0]
LDR R2,=FLRED_MASK
ORRS R1,R2
STR R1,[R0]
BX LR
flashingredoff
LDR R0,=GPIOB_PCOR
LDR R1,[R0]
LDR R2,=FLRED_MASK
ORRS R1,R2
STR R1,[R0]
BX LR
CHECK_INPUT
LDR R0,=GPIOD_PDIR
LDR R1,[R0]
TST R1,R2
BX LR
delay
SUBS R0,#1
BNE delay
BX LR
init_gpio
LDR R0,=SIM_SCGC5
LDR R1,[R0]
LDR R2,=0x00003E00
ORRS R1,R2
STR R1,[R0]
;outputs:
LDR R0,=PORTB_PCR1
LDR R1,=0x00000100
STR R1,[R0]
LDR R0,=PORTB_PCR2
LDR R1,=0x00000100
STR R1,[R0]
LDR R0,=PORTB_PCR3
LDR R1,=0x00000100
STR R1,[R0]
;inputs:
LDR R0,=PORTD_PCR0
LDR R1,=0x00000103
STR R1,[R0]
LDR R0,=PORTD_PCR2
LDR R1,=0x00000103
STR R1,[R0]
;data direction:
LDR R2,=GREEN_MASK
LDR R0,=GPIOB_PDDR
LDR R1,[R0]
ORRS R1,R2
STR R1,[R0]
LDR R2,=YELLOW_MASK
LDR R0,=GPIOB_PDDR
LDR R1,[R0]
ORRS R1,R2
STR R1,[R0]
LDR R2,=FLRED_MASK
LDR R0,=GPIOB_PDDR
LDR R1,[R0]
ORRS R1,R2
STR R1,[R0]
LDR R0,=GPIOB_PSOR
LDR R1,[R0]
ORRS R1,R2
STR R1,[R0]
BX LR
END
This is the whole code and I am using Keil Uvision 5 and this is assembly language.
This is the errors that I am getting when I run the code with above the snippet:
assembling main.s...
main.s(74): error: A1163E: Unknown opcode asm_area, , expecting opcode or Macro
main.s(76): error: A1163E: Unknown opcode asm_main , expecting opcode or Macro
main.s(80): error: A1355U: A Label was found which was in no AREA
"main.s" - 3 Error(s), 0 Warning(s).
User contributions licensed under CC BY-SA 3.0