Funções criada em Assembly podem ser chamadas por um código escrito em linguagem C. Para tal, é necessário exportar o nome da função e usar o modificador extern .
Funções escritas em Assembly
Copy SIM_SCGC5 EQU 0x40048038
PORTB_PCR18 EQU 0x4004A000 + 4 * 18
GPIOB_PSOR EQU 0x400FF044
GPIOB_PCOR EQU 0x400FF048
GPIOB_PTOR EQU 0x400FF04C
GPIOB_PDDR EQU 0x400FF054
RED_MASK EQU 0x00040000
AREA |.text|, CODE, READONLY
EXPORT redon
EXPORT redoff
EXPORT init_gpio
redon PROC
LDR R0,=GPIOB_PCOR
LDR R1,=RED_MASK
STR R1,[R0]
BX LR
ENDP
redoff PROC
LDR R0,=GPIOB_PSOR
LDR R1,=RED_MASK
STR R1,[R0]
BX LR
ENDP
init_gpio PROC
LDR R0,=SIM_SCGC5
LDR R1,[R0]
LDR R2,=0x00003E00
ORRS R1,R2
STR R1,[R0]
LDR R0,=PORTB_PCR18
LDR R1,=0x00000100
STR R1,[R0]
LDR R2,= RED_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
ENDP
END
Chamada das funções em linguagem C
Copy extern void redon(void);
extern void redoff(void);
extern void init_gpio(void);
int main()
{
//configurações iniciais
init_gpio();
while(1){
//programa em loop infinito
redon();
redoff();
}
return 0;
}