• Nenhum resultado encontrado

NOP

Não realiza nenhuma operação

Pode ser elimininada no pipeline (i.e. pode ser executado em tempo 0)

Uso: alinhamento de código em fronteira de word ou double-word

SEV

Send Event Formato:

SEV

Informa da ocorrência de um evento

Seria usado com WFE que não existe no LPC11xx

© Prof. Dr. Douglas Renaux

SVC

Chamada ao Supervisor (S.O.) Formato

SVC #imm // 0 .. 255 Gera uma exceção do tipo SVC

A ISR pode ler o valor de #imm para identificar o serviço solicitado

WFI

Wait for Interrupt Formato:

WFI

entra em modo de baixo consumo até que:

exceção

IRQ, mesmo que mascarada por PRIMASK

solicitação de DEBUG

© Prof. Dr. Douglas Renaux

Módulo 6

Acesso à Memória

© Prof. Dr. Douglas Renaux

© Prof. Dr. Douglas Renaux

Memória – Processadores 13xx

Módulo 7

Exceções/Interrupções

© Prof. Dr. Douglas Renaux

Interrupções são uma forma eficiente de se responder às demandas solicitadas pelos periféricos.

Alternativa é polling:

desperdício de consultas

atendimento mais demorado

Interrupções

Estrutura típica de Interrupção

217

Microprocessor Core

(e.g Cortex-M)

Interrupt Controller

Peripheral 1

P2 P3 P4

Pn

IRQ

Interrupções

Princípio de funcionamento

durante a execução de um programa, um sinal de hardware (IRQ = Interrupt Request) é ativado.

um controlador de interrupções percebe o sinal, verifica se está habilitado (desmascarado) e sua prioridade e então informa o processador da existência de um pedido de interrupção pendente

o processador verifica se as interrupções estão habilitadas e finaliza a execução da instrução corrente

SALVAMENTO DE CONTEXTO (registradores, palavra de status)

[em alguns casos] - muda o ponteiro de pilha para IRQ_STACK

busca no vetor de interrupção: identifica quem é a rotina responsável pelo atendimento daquela interrupção específica

execução da ISR (parte do salvamento de contexto pode ser feito aqui)

Interrupções

É um processo complexo

Qualquer falha em algum passo causa uma parada total do sistema

Depuração difícil, principalmente porque é um evento assíncrono

Um programador só é realmente um programador de sistemas embarcados quando sabe trabalhar bem com o atendimento de interrupções.

Quando se usa RTOS, em geral, passa-se ao RTOS a responsabilidade de tratar as IRQs.

219

Controlador de Interrupção

Em geral são vetorizados:

detectam automaticamente qual dos pedidos de interrupção ativo é o mais prioritário, consultam a tabela de endereços de ISR (vetor de

interrupção) e entregam ao processador o endereço da ISR.

portanto, a CPU só precisa ler o endereço da ISR e executar a partir dali

Desabilitando o Atendimento de IRQs

Também chamado de mascaramento de IRQs No controlador de interrupções é possível

mascarar / desmascarar IRQs específicas:

p.ex. mascarar apenas a IRQ da UART2

No processador é possível

mascarar / desmascarar o atendimento de interrupções por completo.

221

Teste e Depuração

Teste e Depuração de ISRs é uma atividade complexa.

Quando finalmente se consegue atender à primeira interrupção:

o teste NÃO acaba aqui !!!

atender a segunda IRQ do mesmo periférico também requer teste e depuração

p.ex. esquecer de enviar um EOI impede o atendimento do pedido seguinte.

Importante testar situações de stress:

Como registrar uma ISR num Cortex-M3

Basta colocar o nome da ISR na tabela de

vetores de exceção localizada no endereço 0 da memória.

233

Como registrar uma ISR num Cortex-M3

Cortex-M:

o vetor de interrupções fica na memória do processador a partir do endereço 0.

basta armazenar a tabela com os endereços das ISRs nesta região de memória.

Interrupções - Conceitos

Latência:

tempo entre o pedido de interrupção (ativação do sinal IRQ) até o início da execução da ISR:

HW: detecção, processamento no Cont. IRQ

tempo de finalização da instrução corrente

tempo que as IRQs estão desabilitadas

outras ISR em execução (aninhamento x prioridade)

no device driver

no RTOS

na aplicação

Tempo de Resposta (pior caso):

Somar:

Pior caso da Latência

Pior caso do tempo de execução da ISR.

235

Exceções

Qualquer solicitação para mudança do fluxo normal de um programa.

interrupção

detecção de falha / erro (p.ex. acesso desalinhado)

Exceções

Estados

Inativo (inactive) = não ativo nem pendente

Pendente (pending) = aguardando atendimento (p.ex. pedido de interrupção – irq – de

periférico)

Ativo (active) = em atendimento

pode haver mais de uma interrupção em

atendimento (interrupções aninhadas – nested)

Ativo e Pendente = interrupção em atendimento e outro pedido da mesma fonte está pendente

© Prof. Dr. Douglas Renaux

Tipos de Exceção

Reset – reinício da execução (modo Thread) (-3) NMI - prioridade -2

HardFault – prioridade -1

falha genérica: representa todas as classes de falhas que não foram tratadas

SVC – causada pela instrução SVC (Supervisor Call)

PendSV – solicitação de serviço (p.ex.

chaveamento de contexto)

Configurável: prioridade de 0 (default) a 3

Prioridades: valor menor significa maior prioridade

PRIMASK: pode mascarar as IRQ com prioridade configurável

© Prof. Dr. Douglas Renaux

Atendimento

Um atendimento de exceção ocorre quando:

existe uma exceção pendente com prioridade suficiente (*); e

o processador está em modo Thread; ou

a exceção pendente é de prioridade maior que a exceção sendo atendida (preempção)

(*) prioridade suficiente significa prioridade maior do que o limite estabelecido no PRIMASK

© Prof. Dr. Douglas Renaux

Atendimento (2)

Stacking – salva o estado

O SP está alinhado em double-word

se necessário pula um word antes de começar o empilhamento

Atendimento (3)

O processador lê do vector_table o endereço do handler;

LR := EXC_RETURN (ver próximo slide)

após o stacking, a execução se dá a partir do handler, a exceção passa ao status de ativa Se durante o stacking ocorreu outra exceção

de maior prioridade então esta é atendida (late-arriving exception)

© Prof. Dr. Douglas Renaux© Prof. Dr. Douglas Renaux

Atendimento (4)

Retorno de Exceção

Ocorre quando uma instrução escreve no PC um dos valores de EXC_RETURN

As instruções que podem ser usadas para retorno de exceção são POP e BX

© Prof. Dr. Douglas Renaux

Tratamento de Faltas

Todas as faltas causam HardFault

Trava se a falta ocorre no handler da NMI ou HardFault Faltas:

SVC

BKPT fora de depuração (i.e. não conectado ao IAR)

erro de acesso a memória (erro de barramento) em LD ou ST

tentativa de execução em área XN

tentativa de execução causando erro de barramento

erro de barramento em acesso ao vector_table

Hard Faults

© Prof. Dr. Douglas Renaux

Módulo 8

ATPCS

ATPCS

ARM-Thumb Procedure Call Std Passagem de parâmetros:

- primeiros parâmetros em R0 .. R3 demais parâmetros pela pilha

- retorno: R0 ou R1:R0

© Prof. Dr. Douglas Renaux

ATPCS – Tipos de Dados

Tipo Tamanho Tipo Tamanho

char 8 bits [ ] 32 bits

short 16 bits struct ptr = 32 bits

int 32 bits float 32 bits

unsigned 32 bits double 64 bits

long 32 bits enum = int

long long 64 bits

* 32 bits

ATPCS

Quem tem a obrigação de salvar o valor dos registradores caso interesse manter este valor após a chamada de uma função ?

- rotina chamada: deve salvar R4 – R11 antes de alterar

- R0 – R3,R12 podem ser livremente utilizados pela rotina chamada

© Prof. Dr. Douglas Renaux

Código de Entrada e Saída de Função

PUSH {R4-R7,LR}

POP {R4-R7,LR}

MOV PC,LR

PUSH {R4-R7,LR}

Exercício – continuação MDC

2) Como transformar em subrotina ?

3) Como chamar a partir de outra rotina em assembly ?

4) Como chamar a partir de uma função em C ?

© Prof. Dr. Douglas Renaux

Exercício de Alinhamento

C:

struct s { char a;

short b;

char c;

int d;

© Prof. Dr. Douglas Renaux

Alinhamento Assembly (n) 0 1 2 3

C: #pragma pack(n) 1 2 4 8

bytes bits

1 8 bool

char X 1 X 1 X 1 X 1

2 16 short X 1 X 2 X 2 X 2

4 32

int

unsigned long

* float

X 1 X 2 X 4 X 4

8 64 long long

double X 1 X 2 X 4 X 8

x1 - objeto armazenado em qualquer endereço

x2 - objeto armazenado em endereços pares

x4 - objeto armazenado em endereços múltiplos de 4

x8 - objeto armazenado em endereço múltiplo de 8

Prova – questão 2

Janela de registradores Janela de memória

Janela de watch / variáveis

Janela de stack ? / janela de memória na região stack

Prova – questão 3

Formas:

1. LR tem um código especial começando por 0xFFFFFFF_

2. Modo do processador:

handler (ver IPSR)

main stack (CONTROL) privilegiado (CONTROL)

© Prof. Dr. Douglas Renaux

Prova – Questão 4

DRAM – RAM dinâmica – requer refresh periódico 1 bit = 1 cap+1 tr

acesso: end_linha+ RAS + precarga bit_lines end_coluna+CAS

RD/WR

leitura é destrutiva: reescrever todos os capacitores da linha após leitura

SDRAM = DRAM com sinal de clock acesso = clk + RAS + end linha

Prova – Questão 4

SRAM – RAM estática – não requer refresh mais rápida

1 bit = 6 transistores

operação muito simples,

acesso: endereços, CS, RD/WR

leitura: dados disponíveis no final do ciclo

escrita: dados devem ser enviados no início do ciclo DRAM – RAM dinâmica – requer refresh periódico

1 bit = 1 cap+1 tr

acesso: end_linha+ RAS + precarga bit_lines end_coluna+CAS

RD/WR

leitura é destrutiva: reescrever todos os capacitores da linha após leitura© Prof. Dr. Douglas Renaux

Prova 2015 - Questão 1

PUBLIC bcd

SECTION .text : CODE (2) THUMB

#define R2_acc1 R2

#define R3_acc2 R3

#define R4_ten R4

#define R5_mult R5

#define R12_digit R12 bcd:

push {R4_ten, R5_mult}

mov R4_ten,#10 mov R5_mult,#10 and R2_acc1,R0,#0xF

op2:

mov R5_mult,#10 and R3_acc2,R1,#0xF next_dig2:

lsrs R1,R1,#4 beq end

and R12_digit,R1,#0xF

mla R3_acc2,R12_digit,R5_mult,R3_acc2 mul R5_mult,R5_mult,R4_ten

b next_dig2 end:

mul R0,R2_acc1,R3_acc2 pop {R4_ten, R5_mult}

BX LR

CLK CLK

CLK

CLK

Questão 3

Atendimento (4)

© Prof. Dr. Douglas Renaux

Estudo do problema Planejar

algoritmo

alocação de memória alocação de variáveis escrever código

Projeto PWM

Objetivo:

Usar um timer do LPC1343 para gerar um sinal PWM de ciclo de trabalho (duty cycle)

variável. Uma vez filtrado este sinal deve produzir uma onda senoidal.

Requisitos:

Freq onda senoidal: 50 a 1000 Hz

Número de amostras por ciclo: >= 32

Resolução das amostras: >= 256 (8 bits)

© Prof. Dr. Douglas Renaux

PWM

© Prof. Dr. Douglas Renaux

FPB e Amplificador

© Prof. Dr. Douglas Renaux

Documentos relacionados