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 ;
}