//exemplo 2 entrada e saída digital
void setup () // função de configuração
{
asm("movi a15,0x3FF44020"); //move endereço do registrador especial gpio_enable_reg para acumulador a15.
asm("movi a14,0b00000000000000000000000000000100"); //move a palavra binária de configuração par ao acumulador a14 - bit 2 = saída digital .
asm("s32i a14,a15,0"); // armazena a palvra binária que está no a14 no registrador a15.
} //fim setup
void loop () // função de processamento (laço infinito)
{
asm("verifica:"); //está nomeando uma linha no código como "verifica" (rótulo).
asm ("movi a15,0x33FF44040");// move o endereço do registrador GPIO_IN1_REG para o a15, pois ele vai do 32 ao 39.
asm("l32i a14,a15,0");// carrega a palavra binária (estados das entradas) do endereço de memória do a15 no a14. (a14 agora apresenta os estados das GPIO's da 32 a 39).
asm("bbsi a14,2,desliga");// mostra os estados das GPIO's de 32 a 39. desvia o programa para a linha "desliga" se bit 2 (GPIO 34) está em set (NÂO PRESSIONADO).
asm("bbci a14,2,liga"); //desvia o programa para a linha "liga" se bit 2 (GPIO 34) está em CLEAR (PRESSIONADO).
asm("j verifica"); // pula para a linha verifica.
asm("desliga: ");// rotulo para linha (desliga). agora vamos fazer o comando para desligar o led de status do esp32
asm("movi a13,0x33FF44004"); // move para o registrador GPIO_OUT_REG (GPIO 0 a 31) para acumulador a13
//desliga o led
asm("movi a12,0b00000000000000000000000000000000"); // move a apalavra binária para a a12 para desligar
asm("s32i a12,a13,0"); // realiza o desligamento do led // acumula na posição de memória do a13 a configuração do a12.
asm("j verifica"); // pula para a linha verifica.
//liga o led
asm("liga: ");
asm("movi a13,0x33FF44004");
asm("movi a12,0b0000000000000000000000000000100");
asm("s32i a12,a13,0");
asm("j verifica");
} // fim loop