A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Aspectos de Interrupção

Apresentações semelhantes


Apresentação em tema: "Aspectos de Interrupção"— Transcrição da apresentação:

1 Aspectos de Interrupção
Processador Plasma Aspectos de Interrupção Wang Jiang Chau Grupo de Projeto de Sistemas Eletrônicos e Software Aplicado Laboratório de Microeletrônica – LME Depto. Sistemas Eletrônicos- EPUSP

2 Plasma: Espaço de Endereçamento
Mapa de espaço de memória -32 bits As implementações internas de periféricos e memórias podem usar espaço menor Memória RAM (ram.vhd) é de 8KB, de 13 bits O espaço de endereçamento de um processador é dado pelo número de bits do bus de endereço. Em arquiteturas de 32 bits como o MIPS 32, caso do CPU do Plasma, o bus de endereço é de 32 bits, o que dá um espaço de 232 endereços. Quando nem todo o espaço é utilizado pela memória RAM (o que é bastante comum), deve-se tomar cuidado com o endereçamento, pois os programas que rodarão no processador podem ter instruções que enderecem valores mais altos que os existentes. Em sistemas de uso geral, para os quais pode-se se fazer “upgrades” das memórias durante o seu tempo de vida (ou de utilização), o sistema operacional pode tratar do problema através da técnica de memória virtual. Já para sistemas embutidos, de uso específico, não se espera alterações no tamanho da memórias durante o seu uso (do sistema), e muitas vezes não se utiliza SOs, o programa assembly e o espaço de memória estão mais amarrados. Em geral, no projeto de hardware já se determina os endereçamentos atribuídos a memórias e periféricos. O programa montador poderá fazer a adequação do programa assembly ao espaço de memória pré-definida.

3 Plasma: Mapa de Endereçamento
Dispositivos Espaço de endereçamento Posição Memória Interna (RAM) 8 KB (13 bits) 0x0 a 0x1FFF Memória Externa 1 MB (20 bits) 0x a 0x100FFFFF Periféricos Específico (32 bits) a restante O mapa de endereçamento definido para o Plasma é dado no slide. Desta forma, fica estabelecido como o espaço é reservado no sistema Plasma. Na distribuição do Plasma que usamos na disciplina de PSI-2553, a memória externa não está implementada; apenas a memória interna existe (RAM.VHD). Esta distribuição do Plasma já possui alguns periféricos implementados. Apesar de um grande espaço de endereçamento estar garantido aos periféricos, apenas um número bem limitado destes podem ser implementados, devido à forma como os registradores IRQ_Mask e IRQ_Status foram definidos, com apenas 8 bits válidos.

4 Registrador de Periférico(8/32 bits)
Plasma: Tabela de Endereçamento Endereço Registrador de Periférico(8/32 bits) 0x Uart 0x IRQ Mask 0x IRQ Status 0x GPIO Out (Set bits) 0x GPIO Out (Clear bits) 0x GPIO In 0x Counter 0x Ethernet transmit count No Plasma, do espaço de endereçamento reservado para periféricos, os endereços específicos da tabela do slide são utilizados para registradores específicos. A informação constante da tabela: É declarada em software para que as instruções de escrita e leitura dos dados dos periféricos possam ser realizadas nos endereços indicados; É implementada em hardware de tal forma que o endereço colocado no bus de endereços possa ser decodificada pelo periférico para identificação do destinatário dos dados.

5 Registrador IRQ_Mask mapeamento das requisições permitidas 8 bits
0x : ADDI $8, $0, 0xfa000f43 SB $8, 0x ($0) O registrador IRQ_Mask, assim como o IRQ_Status, utilizam apenas os 8 bits menos significativos para identificar o periférico a ser mascarado e/ou ativado. No exemplo do slide, o IRQ_Mask tem seu valor carregado por software. O usuário insere as instruções correspondentes à escrita e leitura no registrador, no seu código de programa a fim de estabelecer, pontualmente e dinamicamente, o mascaramento de periféricos. Neste exemplo, os periféricos correspondentes aos bits 6, 1 e 0 serão mascarados, isto é, quando suas interrupções forem solicitadas, elas serão aceitas.

6 Registrador/Periférico
Registrador IRQ_Status Indicação das requisições reais 8 bits Bit Registrador/Periférico UartDataAvailable 1 ^UartWriteBusy 2 ^Counter 3 Counter 4 EthernetReceive 5 EthernetSendDone 6 ^GPIO 7 GPIO 0x : O slide mostra explicitamente a que periférico corresponde cada um dos 8 bits atribuídos à identificação dos periféricos. Pode-se observar que pode haver mais de um bit associado a um mesmo dispositivo, como é o caso do UART, onde a ativação do bit 0 indicaria que o dispositivo serial pede para o processador leia dados da interface, enquanto a ativação do bit 1 indicaria que a saída seria pede para que dados sejam enviados pelo processador. O registrador IRQ_Status dever escrito em hardware e lido em software. Em detalhes: cada periférico, ao requisitar interrupção para alguma tarefa (exemplo do UART acima), ativará o bit correspondente do IRQ_Status. Cabe ao: hardware transformar o sinal de interrupção de qualquer periférico em um sinal de interrupção única do processador do Plasma, o qual opera com interrupção fixa; software ler os dados do IRQ_Status para identificar qual o periférico que está solicitando a interrupção e saber de onde receber ou para onde enviar os dados. Atenção: como só há um pino de interrupção (fixa), o IRQ_Status é fundamental para se poder determinar qual periférico solicitou a interrupção. Indica que o UART Write está requisitando a Interrupção

7 Co- processador para Exceções
Hardware especial junto ao MIPS Registradores especiais para Exception Handling MTC0 $epc, $s1 (escreve no registrador especial epc o valor de $s1) MFC0 $s1, $epc (armazena em $s1 o valor do registrador special epc) Obs. Endereço para interrupção é 0x3c (por hardware) (*fixo*) (*como posso ter  interrupts?*) O Plasma implementa funções de interrupção do MIPS para que interrupções por software possam ser realizadas. O hardware que auxilia na realização de tais operações é conhecido como coprocessador de exceções (ou de interrupções). O slide ilustra algumas instruções e registradores que podem ser utilizados para tal finalidade.

8 Aspectos de Software-1 Definido no boot.asm 0x3c: lui $a2, 0x2000
lw $a0, 0x20($a2) #IRQ_STATUS lw $a2, 0x10($a2) #IRQ_MASK and $a0, $a0, $a2 jal OS_InterruptServiceRoutine Exemplo de código assembly que trata de interrupção fixa. Explicando: Ao ocorrer a interrupção fixa por hardware (algum periférico solicita a interrupção), o programa, de qualquer ponto que esteja, armazena os dados temporários na pilha e salta par ao endereço 3c; O valor de IRQ_Status (0x ) é transferido para $a0 O valor de IRQ_Mask (0x ) é transferido para $a2 (observe-se que o IRQ_Mask já foi programado anteriormente com a máscara) $a0 recebe o resultado da operação AND (bitwise) entre IRQ_Mask e IRQ_Status $a0 contém, então, a informação de todos os periféricos, que autorizados pelo mascaramento, estão solicitando a interrrupção. Ocorre o salto para a rotina de interrupção programado pelo projetista do sistema embutido (lembrar que, pela convenção de compiladores do MIPS, o argumento da rotina é o $a0 ´.

9 Aspectos de Software-2 AND de IRQ_Mask e IRQ_Status :
deixa o periérico interruptor identificado passa este valor (diferente de 0) como argumento Interrupção continua por: Assembly (label para OS_InterruptServiceRoutine ) Programa C (próximo slide) procedimento OS_InterruptServiceRoutine determina-se o interruptor no procedimento

10 Determinação do periférico
//Endereços de hardware #define UART x //Bit do IRQ #define IRQ_UART_READ_AVAILABLE 0x01 #define MemoryRead(A) (*(volatile unsigned int*)(A)) #define MemoryWrite(A,V) *(volatile unsigned int*)(A)=(V) void OS_InterruptServiceRoutine(unsigned int status) { char c = '0'; if( status & IRQ_UART_READ_AVAILABLE) c = (char) MemoryRead(UART); MemoryWrite(UART, c); } int main() …. for(;;) ; Argumento Trata-se de um exemplo de ISR (inicia pela sintaxe void OS_Int... Etc. Pontos importantes: Uma variável UART é definido com valor 0x que corresponde exatamente aoendereço do UART, visto no slide 4. Uma variável IRQ_UART_READ_AVAILABLE é definido com valor que corresponde exatamente ao bit do UART/leitura, visto no slide 6. Como poderia haver mais de um periférico solicitando interrupção, cabe ao ISR determinar a prioridade de execução através de uma sequência de IF-THEN-ELSEs. No caso deste exemplo, em particular, há apenas um periférico sendo checado no ISR. Só haveria duas opções: a) a solicitação vem do UART, então o IF avalia para “TRUE” e leitura e escrita é realizada para a UART; b) a solicitação não vem do UART, então o IF avalia para “FALSE” e nada é realizado. Determinação do periférico


Carregar ppt "Aspectos de Interrupção"

Apresentações semelhantes


Anúncios Google