AULA4 – Introdução a Microcontrolador Disciplina: Aplicações Avançadas de Microprocessadores (AAM) Profa. Ana T. Y. Watanabe [email protected] “Bem-aventurado aquele que lê, e os que ouvem as palavras desta profecia, e guardam as coisas que nela estão escritas; porque o tempo está próximo.” Apocalipse 1:3 Tópicos da aula: • Gerador de Clock – MCG (Multi-Purpose Clock Generator) • Mapa de Memória do JM60 • Registrador SOPT1 • Código em Assembly • Exercício prático Gerador de Clock – MCG (MultiPurpose Clock Generator) •O módulo gerador de Clock (MCG) fornece várias opções de fonte de clock para o MCU; • O módulo pode ser selecionado por filtro de sincronização por freqüência-locked loop (FLL) ou por phase-locked loop (PLL); • Também pode ser selecionado por referência interna ou externa (XOSC) com cristal; • Qualquer que seja a fonte de clock escolhido, ele é passado através de um divisor de bus reduzida que permite uma menor freqüência de clock de saída. Gerador de Clock – MCG (Multi-Purpose Clock Generator) •Gerador de Clock – MCG (Multi-Purpose Clock Generator) Existem 9 modos de operação do MCG: • FLL Engaged Internal (FEI) • FLL Engaged External (FEE) • FLL Bypassed Internal (FBI) • FLL Bypassed External (FBE) • PLL Engaged External (PEE) • PLL Bypassed External (PBE) • Bypassed Low Power Internal (BLPI) • Bypassed Low Power External (BLPE) • Stop •Gerador de Clock – MCG (Multi-Purpose Clock Generator) •Modos de Operação: •Gerador de Clock – MCG (Multi-Purpose Clock Generator) •Gerador de Clock – MCG (Multi-Purpose Clock Generator) Após o reset o MCG vai para o modo FEI; Typical fMCGOUT = 16 MHz; BUSCLK = fMCGOUT /2 = 8 MHz; MAPA DE MEMÓRIA DO JM60 REGISTRADOR SOPT1: DESABILITA COP EXERCÍCIO PRÁTICO: Escrever em linguagem assembly um programa que faz acender todos os leds alternadamente da placa do JM60. •Código em Assembly ; Include derivative-specific definitions INCLUDE 'derivative.inc‘ ; variable/data section ; ORG RAMStart ; Insert your data definition here TEMPO1: DS.B 2 TEMPO2: DS.B 2 ; ; code section ; ORG ROMStart Inicio: ; Desabilita o COP lda SOPT1 and #63 sta SOPT1 •Código em Assembly mainLoop: ; PISCA OS LEDS DA PLACA DEMOJM ; PTE2 => LED1 ; PTE3 => LED2 ; PTF0 => LED3 ; PTF1 => LED4 ; PTC2 => LED5 ; PTC4 => LED6 ; PTF5 => LED7 ; PTD2 => LED8 BCLR 2,PTED ; ACENDE LED1 BSET 2,PTEDD ; DIREÇÃO DE PTE2 => SAIDA BSET 3,PTED ; APAGA LED2 BSET 3,PTEDD ; DIREÇÃO DE PTE3 => SAIDA BSET 0,PTFD ; APAGA LED3 BSET 0,PTFDD ; DIREÇÃO DE •Código em Assembly mainLoop: ; PISCA OS LEDS DA PLACA DEMOJM ; PTE2 => LED1 ; PTE3 => LED2 ; PTF0 => LED3 ; PTF1 => LED4 ; PTC2 => LED5 ; PTC4 => LED6 ; PTF5 => LED7 ; PTD2 => LED8 BCLR 2,PTED ; ACENDE LED1 BSET 2,PTEDD ; DIREÇÃO DE PTE2 => SAIDA BSET 3,PTED ; APAGA LED2 BSET 3,PTEDD ; DIREÇÃO DE PTE3 => SAIDA BSET 0,PTFD ; APAGA LED3 BSET 0,PTFDD ; DIREÇÃO DE PTF0 => SAIDA •Código em Assembly BSET 1,PTFD ; APAGA LED4 BSET 1,PTFDD ; DIREÇÃO DE PTF1 => SAIDA BSET 2,PTCD ; APAGA LED5 BSET 2,PTCDD ; DIREÇÃO DE PTC2 => SAIDA BSET 4,PTCD ; APAGA LED6 BSET 4,PTCDD ; DIREÇÃO DE PTC4 => SAIDA BSET 5,PTFD ; APAGA LED7 BSET 5,PTFDD ; DIREÇÃO DE PTF5 => SAIDA BSET 2,PTDD ; APAGA LED8 BSET 2,PTDDD ; DIREÇÃO DE PTD2 => SAIDA •Código em Assembly JSR TIMER BSET 2,PTED BCLR 3,PTED JSR TIMER BSET 3,PTED BCLR 0,PTFD JSR TIMER BSET 0,PTFD BCLR 1,PTFD JSR TIMER BSET 1,PTFD BCLR 2,PTCD JSR TIMER BSET 2,PTCD BCLR 4,PTCD JSR TIMER BSET 4,PTCD BCLR 5,PTFD JSR TIMER BSET 5,PTFD BCLR 2,PTDD JSR TIMER BSET 2,PTDD BRA ; TIMER ; APAGA LED1 ; ACENDE LED2 ; TIMER ; APAGA LED2 ; ACENDE LED3 ; TIMER ; APAGA LED3 ; ACENDE LED4 ; TIMER ; APAGA LED4 ; ACENDE LED5 ; TIMER ; APAGA LED5 ; ACENDE LED6 ; TIMER ; APAGA LED6 ; ACENDE LED7 ; TIMER ; APAGA LED7 ; ACENDE LED8 ; TIMER ; APAGA LED8 mainLoop •Código em Assembly TIMER: LDHX #$FFFF STHX TEMPO1 ; ARMAZENA EM TEMPO1 => #$FFFF LDHX #0010 STHX TEMPO2 ; ARMAZENA EM TEMPO2 => #0010 LDHX #$0000 ; CARREGA HX COM 0 LOOP1: AIX #$01 ; INCREMENTA HX COM 1 CPHX TEMPO1 ; VERIFICA SE CHEGOU EM TEMPO1 BEQ FIM PSHH ; GUARDA H NA PILHA PSHX ; GUARDA L NA PILHA LDHX #$0000 ; CARREGA HX COM 0 LOOP2: AIX #$01 ; INCREMENTA HX COM 1 CPHX TEMPO2 ; VERIFICA SE CHEGOU EM TEMPO1 BNE LOOP2 PULX PULH JMP LOOP1 FIM: RTS •Código em Assembly ;************************************************ ************** ;* Interrupt Vectors * ;************************************************ ************** ORG $FFFE DC.W Inicio ; Reset