arquitetura de processadores digitais

Upload: soares-engenharia

Post on 05-Jul-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/15/2019 Arquitetura de Processadores Digitais

    1/49

     

    Universidade de Brasília

    Arquitetura de

    Processadores

    Digitais

  • 8/15/2019 Arquitetura de Processadores Digitais

    2/49

    SumárioDMA .............................................................................................................................................. 2

    DMA........................................................................................................................................... 4

    ADC + DAC + DMA + 8253 ......................................................................................................... 4

    PROVA TREINO ............................................................................................................................. 8

    Considerações gerais: ......................................................................................................... 10

    Circuito interface: ............................................................................................................... 11

    Rotina void dma_adc (void) ............................................................................................... 12

    Rotina rmediap (void) ......................................................................................................... 14

    Rotina int_eoc (void) .......................................................................................................... 15

    Rotina interrupt int_serial (void) ....................................................................................... 16

    Rotina interrupt int_paralela (void) ................................................................................... 17

    Rotina interrupt paralela (void) ......................................................................................... 18Rotina main (void) .............................................................................................................. 19

    Completo ............................................................................................................................. 21

    INTERRUPÇÃO ............................................................................................................................. 25

    INTERUPÇÃO ........................................................................................................................... 32

    INTERRUPÇÃO SERIAL ............................................................................................................. 34

  • 8/15/2019 Arquitetura de Processadores Digitais

    3/49

    DMA

  • 8/15/2019 Arquitetura de Processadores Digitais

    4/49

    OPERAÇÃO DE DMA PASSO A PASSO:

  • 8/15/2019 Arquitetura de Processadores Digitais

    5/49

    DMA#include

    #include

    void main(void){

    long end20, off, seg;char far *pt;

    pt = farmalloc(2*10k);seg = FP_SEG(pt);off = FP_OFF(pt);

    end20 = seg8);//MSB QTD

    outportb(2,end20);//endereçooutportb(2,end20>>8);//endereço

    outportb(0x83,end20>>16);//endereçooutportb(0x0A,1);//apaga máscara

    while((inportb(8)&2)==0);outportb(0x0A,5);//ativa máscara

    }while((inportb(8)&2)==0){ //para ver quantas conversões foram feitas

    x = inportb(3);

    x = (x

  • 8/15/2019 Arquitetura de Processadores Digitais

    6/49

    vet12 = getvect(0x0C);setvect(0x0D,rot_eoc);setvect(0x0C,rot_ser);

    hab = inportb(0x21);outportb(0x21,hab&0xCF);

    // programação do dma

    pt1 = far malloc(16);seg = FP_SEG(pt1);

    off = FP_OFFF(pt1);adr20 = (seg16) != ((adr20+8)>>16))//verifica a fronteira de página

    adr20 = adr20+8;adrda = (FP_SEG(pt2)8);// endereço +outportb(0x83,adr20>>16);//------+

    outportb(7,0);//-----------------+outportb(7,0);

    outportb(6,adrda);// canal3 +outportb(6,adrda>>8);outportb(6,adrda>>16);//---------+

    outportb(0x0B,0x55);// modooutportb(0x0B,0x5B);//-----outportb(0x0A,1);// habilitações

    outportb(0x0A,3);//-------------}void interrupt rot_eoc(void){

    sum = 0;for(i=0;i

  • 8/15/2019 Arquitetura de Processadores Digitais

    7/49

  • 8/15/2019 Arquitetura de Processadores Digitais

    8/49

  • 8/15/2019 Arquitetura de Processadores Digitais

    9/49

    PROVA TREINO

  • 8/15/2019 Arquitetura de Processadores Digitais

    10/49

  • 8/15/2019 Arquitetura de Processadores Digitais

    11/49

    Considerações gerais:

    #include

    #include

    #define TxB 0x3F8 // Define o endereço do TxB#define RxB 0x3F8 // Define o endereço do RxB#define DLL 0x3F8 // Define o endereço do DLL#define DLM 0x3F9 // Define o endereço doDLM#define LCR 0x3FB // Define o endereço do LCR

    #define IER 0X3F9 // Define o endereço do IER

    char far *media,*buffer;void interrupt (*vet12)(void);void interrupt (*vet13)(void);void interrupt (*vet15)(void);

  • 8/15/2019 Arquitetura de Processadores Digitais

    12/49

    Circuito interface:

    Fig. 1: Interface 1

  • 8/15/2019 Arquitetura de Processadores Digitais

    13/49

    Rotina void dma_adc void)

    Executa as inicializações necessárias para o ADC transferir para a memória via canal 1 de DMA.

    void dma_adc (void){outportb (CS0,0);

    buffer = farmalloc (2*8); // aloca 2*8 espaços na memória para bufferseg = FP_SEG(buffer); // registra o segment de bufferoff = FP_OFF(buffer);

    adr20 = (seg16 != (adr20 + 8)>> 16)

    adr20 = adr20 + 8;outportb(0XC,0);

    outportb(2,adr20);outportb(2,adr20>>8);

    outportb(0x83,adr20>>16);outportb(3,7);

    outportb(3,0);outportb(0XB,5);

    outportb(0xA,1);}

  • 8/15/2019 Arquitetura de Processadores Digitais

    14/49

    Rotina void dma_dac (void) 

    void dma_dac (void){media = farmalloc(1);seg = FP_SEG(media);off = FP_OFF(media);adr20 = (seg8);outportb(0x81,adr20>>16);

    outportb(5,0);outportb(5,0);outportb(0XB,0x5A);outportb(0xA,2);

    }

  • 8/15/2019 Arquitetura de Processadores Digitais

    15/49

    Rotina rmediap void)

    void rmediap(void){

    posição = inportb(3);if (posição = 0){i = 6;}else if(posição = 1){i = 5;} // dava para usar switch-caseelse if(posição = 2){i = 4;}else if(posição = 3){i = 3;}else if(posição = 4){i = 2;}else if(posição = 5){i = 1;}else if(posição = 6){i = 0;}

    else if(posição = 7){i = 7;}for(j=0,j++,j>3;}

  • 8/15/2019 Arquitetura de Processadores Digitais

    16/49

    Rotina int_eoc void)

    void interrupt int_eoc(void){

    int i,posição,soma = 0;rmediap();outportb(CS1,0);outportb(0X20,0X20);

    }

  • 8/15/2019 Arquitetura de Processadores Digitais

    17/49

    Rotina interrupt int_serial void)

    void interrupt int_serial(void){

    c = inportb(RxB);

    if(c>=0x30 & c

  • 8/15/2019 Arquitetura de Processadores Digitais

    18/49

    Rotina interrupt int_paralela void)

    void interrupt int_paralela(void){

    canal = (inportb(0x379)>>3)&7;outportb(CS0+canal,0);outportb(0x20,0x20);

    }

  • 8/15/2019 Arquitetura de Processadores Digitais

    19/49

    Rotina interrupt paralela void)

    void paralela (int dado){

    outportb(0X378,dado);outportb(0X37A,1); //STRBwhile(inportb(0X37A)&2 == 0); // ACK

    }

  • 8/15/2019 Arquitetura de Processadores Digitais

    20/49

    Rotina main void)

    int main{

    long seg,off,adr20;int hab,pesos[8] = {64,32,16,8,4,2,1,1};

    char c;//interrupçõesvet12 = getvect(12);vet13 = getvect(13);vet15 = getvect(15);

    setvect(12,int_serial);setvect(13,int_eoc);setvect(15,int_paralela);

    hab = inportb(0x21);outportb(0x21,hab&0x4F);//serialoutportb (LCR, 7); // Define bit de parada e 8 bits

    outportb(IER, 1); // Define interrupção por dado disponíveloutportb(LCR, 0x87); // Aciona o acesso ao divisor

    outportb (DLL, 12); // Define N = 12, BR = 9600outportb (DLM, 0); // Define N = 12outportb (LCR, 7); // Define 2 bits de parada e 8 bits//DMAdma_adc();

  • 8/15/2019 Arquitetura de Processadores Digitais

    21/49

  • 8/15/2019 Arquitetura de Processadores Digitais

    22/49

    Completo

    #include #include

    #define TxB 0x3F8 // Define o endereço do TxB#define RxB 0x3F8 // Define o endereço do RxB#define DLL 0x3F8 // Define o endereço do DLL#define DLM 0x3F9 // Define o endereço doDLM#define LCR 0x3FB // Define o endereço do LCR#define IER 0X3F9 // Define o endereço do IER

    char far *media,*buffer;void interrupt (*vet12)(void);void interrupt (*vet13)(void);

    void interrupt (*vet15)(void);

    void dma_adc (void){outportb (CS0,0);buffer = farmalloc (2*8); // aloca 2*8 espaços na memória para bufferseg = FP_SEG(buffer); // registra o segment de bufferoff = FP_OFF(buffer);adr20 = (seg

  • 8/15/2019 Arquitetura de Processadores Digitais

    23/49

    void rmediap(void){posição = inportb(3);

    if (posição = 0){i = 6

    }else if(posição = 1){

    i = 5}else if(posição = 2){

    i = 4

    }else if(posição = 3){

    i = 3}else if(posição = 4){

    i = 2}else if(posição = 5){

    i = 1}else if(posição = 6){

    i = 0}else if(posição = 7){

    i = 7}

  • 8/15/2019 Arquitetura de Processadores Digitais

    24/49

    outportb(0xA,1);outportb(0xA,2);

    }outportb(0x20,0x20);

    }

    void interrupt int_paralela(void){canal = (inportb(0x379)>>3)&7;outportb(CS0+canal,0);outportb(0x20,0x20);

    }

    void paralela (int dado){outportb(0X378,dado);outportb(0X37A,1); //STRBwhile(inportb(0X37A)&2 == 0); // ACK

    }

    int main{

    long seg,off,adr20;int hab,pesos[8] = {64,32,16,8,4,2,1,1};char c;//interrupçõesvet12 = getvect(12);vet13 = getvect(13);

  • 8/15/2019 Arquitetura de Processadores Digitais

    25/49

    outportb(0xA,5);

    outportb(0xA,6);setvect(12,vet12);setvect(13,vet13);setvect(15,vet15);

    }

  • 8/15/2019 Arquitetura de Processadores Digitais

    26/49

    INTERRUPÇÃO

  • 8/15/2019 Arquitetura de Processadores Digitais

    27/49

  • 8/15/2019 Arquitetura de Processadores Digitais

    28/49

  • 8/15/2019 Arquitetura de Processadores Digitais

    29/49

  • 8/15/2019 Arquitetura de Processadores Digitais

    30/49

  • 8/15/2019 Arquitetura de Processadores Digitais

    31/49

  • 8/15/2019 Arquitetura de Processadores Digitais

    32/49

  • 8/15/2019 Arquitetura de Processadores Digitais

    33/49

    INTERUPÇÃO/* Modulo 3 - Aula 1 - 10 de novembro de 2009INTERRUPÇÕES*/

    /* IRQ2 IRQ5 IRQ2 IRQ5clk eoc clk eoc t

    -----+-------+-------+-------+------->DAC ler AD DACstart calc. start

    média*/#include

  • 8/15/2019 Arquitetura de Processadores Digitais

    34/49

    media=i=0;

    vetor2 = getvect(0xA); /* A = 13, endereço que atende ao IRQ2*/vetor5 = getvect(0xD); /* guarda vetores antigos*/setvect(0xA,Rot_IRQ2); //novos vetoressetvect(0xD,Rot_IRQ5); //novos vetores

    antigo = inportb(0x21); //21H = endereço da Palavra de Controle de OperaçãoOCW1

    outportb(0x21,antigo&0xDB);//hab IRQ2 e IRQ5 > XX0X X0XX > máscara 1101 1011

    (DBH)

    while(!kbhit()){if(band){

    printf("[%d] media = %d \n", aux, media);band = 0;

    }}

    outportb(0x21,antigo|0x24);//desabilta intsetvect(0xA,vetor2);//restaura vetor 2setvect(0xD,vetor5);//restaura vetor 5printf("Acabou!");

    }

    void interrupt Rot_IRQ2(void){outportb(CS1,0);//start

  • 8/15/2019 Arquitetura de Processadores Digitais

    35/49

    INTERRUPÇÃO SERIAL/* Aula 2 - Interrupção Serial - 17 de novembro de 2009LCR - modoLSR - status

    IER - enable interruptionIIR - identify interruption

    MCR - controle modemMSR - status modem

    DTRDSRRCTS

    */

    #include

    #include

    void interrupt *(ant4)(void);int flag, dado, velho, erros, x, z;

    int mestre(void){//inicializaçãoint n = 115200/9600;

  • 8/15/2019 Arquitetura de Processadores Digitais

    36/49

    }

    void interrupt rot_ser(void){dado = inportb(RxB);flag = 1;outportb(0x20,0x20);//EOI

    }

    //==================================================

    void interrupt *(ant4)(void);

    void rep(void){//inicializaçãoint n = 115200/9600;outportb(LCR,0x80); //progamar DLAB = 1outportb(DLL,n); //lsb do baud rateoutportb(DLM,n>>8); //msb do baud rate

    outportb(LCR,7); // 8 bits, sem paridade, 2 stopsoutportb(IER,1); //hab interrupçãooutportb(MCR,8); // out2 = 1

    ant4 = getvect(0x0C);setvect(0x0C,rot_ser);velho = inport(0x21);outportb(0x21,velho&0xEF);

  • 8/15/2019 Arquitetura de Processadores Digitais

    37/49

    INTERRUPÇÃO PARALELO/* aula 3 - interrupção paralela

    AD DAREG 378H7 D76 D65 D54 D43 WR2 OE

    1 START0 ALEREG 379H7* D76 EOC (IRQ7)5 D64 D53 D4REG 37AH3* D3 D32 D2/A2 D21* D1/A1 D10* D0/A0 D0

    Média móvel 8 no DAC

  • 8/15/2019 Arquitetura de Processadores Digitais

    38/49

    outportb(MCR,8);

    outportb(0x37A,0x10);//habilita IRQ7outportb(0x378,0);

    //guarda os vetores antigosvet4 = getvect(12);vet7 = getvect(15);setvect(12,rot_ser);setvect(15,rot_eoc);

    antigo = inportb(0x21);outportb(0x21,antigo&0x6F);

    //laço principalc = 0;while(c != 'f'){

    if(kbhit()){c = getch();

    if(c >= 0 && c

  • 8/15/2019 Arquitetura de Processadores Digitais

    39/49

    //flanco de subida do WRoutportb(0x378,(media&0xF0)||8);

    outportb(0x378,media&0xF0);

    //manda pelo serialoutportb(TxB,media);

    //ler ADCoutportb(0x37A,0x10|4);//programa como entradaoutportb(0x378,4);

    x = inportb(0x379)^0x80;y = inportb(0x37A)^0x0B;x = (x&0x80)+(x&0x38)

  • 8/15/2019 Arquitetura de Processadores Digitais

    40/49

    LABORATÓRIO

    Interrupção//----------------------------------------------------------------------------------------// UNIVERSIDADE DE BRASILIA// ARQUITETURA DE PROCESSADORES DIGITAIS// 1/2016//----------------------------------------------------------------------------------------// Daniela Aguiar de Carvalho Freitas// Renato da Silva Paes

    //----------------------------------------------------------------------------------------// Experimento 9// versao 5

    #include #include #include

    #define TXB 0x3F8#define RXB 0x3F8#define DLL 0x3F8#define DLM 0x3F9#define LCR 0x3FB#define LSR 0x3FD#define IER 0x3F9#define MCR 0x3FC

  • 8/15/2019 Arquitetura de Processadores Digitais

    41/49

    SERIAL_TXB();}

    /**/if (flag == 1){SERIAL_RXB();

    }}//fim whileprintf("ESC foi pressionado.\n");

    outportb(0x21,habilita|0x10); /*Bit 4 volta a ser 0*/

    setvect(12, vet12);}// fim main

    void SERIAL_TXB (void){caracter_Tx = getch();outportb(TXB, caracter_Tx);if (caracter_Tx = esc) fim=1;

    }// fim serial recebe

    void SERIAL_RXB(void){flag = 0;printf("%c",caracter_Rx);if (caracter_Rx = esc) fim=1;

    }

    void interrupt serial_RX(void){

  • 8/15/2019 Arquitetura de Processadores Digitais

    42/49

    Serial//----------------------------------------------------------------------------------------

    // UNIVERSIDADE DE BRASILIA// ARQUITETURA DE PROCESSADORES DIGITAIS// 1/2016//----------------------------------------------------------------------------------------// Daniela Aguiar de Carvalho Freitas// Renato Paes//----------------------------------------------------------------------------------------// Experimento 8

    // versao 3

    #include #include #include

    #define TXB 0x3F8#define RXB 0x3F8

    #define DLL 0x3F8#define DLM 0x3F9#define LCR 0x3Fb#define LSR 0x3FD

    void MENSAGENS(int m, int ct);void INICIALIZA_SERIAL(void);void SERIAL TXB (void);

  • 8/15/2019 Arquitetura de Processadores Digitais

    43/49

    /*habilita recepcao e transmissao e programa de paridade e bit de parada*/outportb(LCR, 7); /*8 bits, 2 stops e sem paridade*/

    //MENSAGENS(3,0);}// fim inicializa serial

    void SERIAL_TXB (void){caracter = getch(); /* Recebe o caractere*/

    //MENSAGENS(4,caracter);/*Rotina para enviar catacter*/outportb(TXB, caracter); /* Transmite pela porta serial*/

    while ((inportb(LSR)&0x20) == 0);/* THRE=1 quando byte já foi. *//*Retorna a 0 automaticamente apos a leitura*/

    }// fim serial recebe

    void SERIAL_RXB (void){//MENSAGENS(5,0);/*Rotina para receber catacter*/

    if((inportb(LSR)&1)!=0){ /*Se DR=1, dado está pronto*/

    caracter = inportb(RXB); /* Recebe pela porta serial*/if(caracter==0x0D){ /* Se ENTER for pressionada -> Carriage Return (0DH)*/

    MENSAGENS(6,0);}else { /* Se não, printa caractere*/

    MENSAGENS(7,caracter);}//if-esle

    }//if}// fim serial transmite

  • 8/15/2019 Arquitetura de Processadores Digitais

    44/49

    default:printf("...\n");

    }// fim switch case

    }// fim das mensagens

  • 8/15/2019 Arquitetura de Processadores Digitais

    45/49

    Linguagem C

    Comandos

  • 8/15/2019 Arquitetura de Processadores Digitais

    46/49

    case constante2:

    Instruções;

    break;

    default

    Instruções;

    }

    Farmalloc#include

    void *farmalloc (unsigned long nbytes);

    farmalloc reserva um bloco de memória de tamanho n bytes do heap

  • 8/15/2019 Arquitetura de Processadores Digitais

    47/49

     

    4

    IO

    TEMPORIZADOR

    SERIAL

    Rotinas para transmitir e receber caracteres:/*Rotina para transmitir caracter*/while(!(inport(0x2FD)&0x20));/*aguarda o bit THREE ir para 1*/ouportb(0x2f8,caracter);/*escreve no regist. de transmissão*/

    /*Rotina para receber caracter*/while(!(inport(0x2FD)&0x01));/*aguarda o bit DR ir para 1*/caracter = inportb(0x2f8);/*lê dado recebido*/

    40h41h42h43h

    /*1º: Definição da operação: canal 2, modo 3 e divisor freq.0180h*/outportb(0x43,0xB6); /*Escrita da palavra de controle 10110110*//*2º Carga do divisor de frequência no endereço do canal 2*/outportb(0x42,0x80); /*Carga byte LSB*/outportb(0x42,0x01); /*Carga byte LSB*/

    Transmiter

    ou receiver

    Latch Transceiver

    IOR -> in (lê) e IOW ->out (escreve)int ler_adc(){if((inportb(CS1)&0x80)==0){return0;}

    else{val_ad = inportb(CS2); return 1;}

        /    /   i   n   i   c   i   a    l   i   z   a   ç   ã   o    –

       p   r   e   p   a   r   a_

       s   e   r   i   a    l

       i   n   t   n  =   1   1   5   2   0   0    /   9   6   0   0  ;

        /    /    h   a    b   i    l   i   t   a   a   c   e   s   s   o   a   o    d   i   v   i   s   o   r

       o   u   t   p   o   r   t    b    (   L   C   R ,   0   x   8   0    )  ;    /    /   p   r   o   g   a   m   a   r   D   L   A   B  =   1   e   L   C   R  =   0   x   2   F   B

        /    /   a   t   u   a    l   i   z   a   ç   ã   o    d   o   s    d   i   v   i   s   o   r   e   s

       o   u   t   p   o   r   t    b    (   D   L   L ,   n

        )  ;    /    /    l   s    b   B   R   e   D   L   L  =   0   x   2   F   8

       o   u   t   p   o   r   t    b    (   D   L   M ,   n   >   >   8    )  ;    /    /   m   s    b   B   R   e   D   L   L  =   0   x   2   F   9

        /    /    h   a    b   i    l   i   t   a   r   e   c   e   p   ç   ã   o   e   t   r   a   n   s   m   i   s   s   ã   o   e   p   r   o   g   r   a   m   a   p   a   r   i    d   a    d

       e   e    b   i   t   s

        d   e   p   a   r   a    d   a

       o   u   t   p   o   r   t    b    (   L   C   R ,   7

        )  ;    /    /   8    b   i   t   s ,   s   e   m    p

       a   r   i    d   a    d   e ,   2   s   t   o   p   s

       o   u   t   p   o   r   t    b    (   I   E   R ,   1

        )  ;    /    /    h   a    b   i    l   i   t   a   i   n   t   e   r   r   u   p   ç   ã   o

       o   u   t   p   o   r   t    b    (   M   C   R ,   8

        )  ;    /    /   o   u   t   2  =   1

       v   o   i    d   s   e   r   i   a    l    (   v   o   i    d    )    {

       i    f    (   i   n   p   o   r   t    b    (   L   S   R    )   &   1    )  =  =   1    )    {   c   a   n   a    l_   a    d  =   i   n   p   o   r   t    (   R   X   B    )    }

       P   R   E   P   A   R   A   8   2   5   3    /   8   2   5   4

       N  =   2   E   6    /   t   a   x   a

       o   u   t   p   o   r   t    b    (   C   S   0   +   6 ,   0   x   3   6    )  ;

       o   u   t   p   o   r   t    b    (   C   S   0 ,   N

        )  ;    /    *   C   a   r   g   a    b   y   t   e   L   S   B    *    /

       o   u   t   p   o   r   t    b    (   C   S   0 ,   N   >   >   8    )  ;    /    *

       C   a   r   g   a    b   y   t   e   L   S   B    *    /

  • 8/15/2019 Arquitetura de Processadores Digitais

    48/49

     

    4

     

    PARALELAPara PC se conectar com impressoras paralelas. Composta por 3registradores.

    Pode ser usada como entrada ou saída. 3 modos de operação SPP, EPP,

    ECP. Endereços consagrados: 378H, 278H ou 3BCH. 

    Rotina para transmitir um caractere para impressora via LPT1:

    while((inport(0x379)&0x80)==0);/*1º aguarda a impressora ficar desocupada*/outportb(0x378,caracter);/*2º disponibiliza o caracter*//*3º gerar um pulso de strobe*//*Deve-se manter *SLCT IN em baixo, *INT em alto e *AUTO FEED em alto*/outportb(0x37A,0x0D);/*abaixa o *STROBE*/outportb(0x37A,0x0C);/*levanta o *STROBE*/Interrupção via *ACK substitui as ultimas duas linhas por:outportb(0x37A,0x1D);/*abaixa o *STROBE, habilitando interrupção*/outportb(0x37A,0x1C);/*levanta o *STROBE, habilitando interrupção*/

    CONCEITOSRelação entre o tamanho do cache e o desempenho do processador: quantomaior o tamanho do cache, maior vai ser o número de dados que o processadornão precisará trabalhar com a memória DRAM, mais lenta. Porém, se o tamanhodo cache for igual ao da memória principal, o motivo pela qual ela foiimplementada terá sido em vão pois ela gasta mais potência prejudicando odesempenho do processador. Ou seja, existe um limite para o aumento dedesempenho e, portanto, não é linear a relação.Um processador que usa pipeline com grande número de estágios precisa deum bom preditor de desvios: Porque se errar o prognóstico, ocorre um desviodesnecessário, perde-se tudo que havia no pipeline tendo, assim, que esperaruma nova instrução levando um tempo que poderia ter sido usado para fazer

    várias, a quantidade de estágios , instruções.Porque existe grande relação entre um processador RISC e seu compliador: Ocompilador fica a cargo de organizar o conjunto de instruções RISC, que ocorremem paralelo, para que o mundo externo perceba-as como sequênciais. Acomplexidade do programa foi transferida para o compilador. Porque os fabricantes de processadores não levam de uma vez o relógio de seusprocessadores para 10GHz: Porque o tempo de acesso das memórias eperiféricos ainda não é tão rápido por limitações físicas (corrente de fuga,dissipação de calor, interferência eletromagnética, reflexão pelas linhas, retardointroduzido pelos Cis).

  • 8/15/2019 Arquitetura de Processadores Digitais

    49/49

     

    4

     DRAM: •Alta densidade integração • Baixo consumo •Pouco calor • Baixocusto •Baixa velocidade • “Esquece”(uso de refresh) T acesso = 5 a 70 ns SRAM :

    20nsCACHE: CPUs muito mais rápidas que as memórias (DRAM).

    MÉDIA MÓVELInicializa tudo que for necessáriovoid preps (int canal, int taxa, int bps){

    prepara_canal(); prepara_8253();/*taxa*/prepara_serial();/*bps*/apaga_EOC();}

    prepara_canal(){ escreva zero no valor de CSX[ativa ALE ADC0808]l ; e zero}prepara_8253(){

    escreva o valor controle no CSX[ativa /CS 8253]+ 6 // elimina bit 7

    n = 200000/taxaescreva n no CSX[ativa /CS 8253])

    escreva n>>8 no CSX[ativa /CS 8253])}Prepara_serial(){

    Escreve 0x80 no LCRn=115200/bpsEscreve n no DLLEscreve n>>8 no DLMEscreve 0x00, 0x01,0x02 ou 0x03 no LCR}

    Se bit EOC_OK=1 então lê ADC, atualiza val_ad e retorna 1, senão retorna 0.int le_ADC{

    se (CS1 estiver ok){pegue (lê) o valor de CS2 e guarde em numa variávelescreva no CS2 (+ mudança no canal) o valor zero

    retorne 1}caso contrário {retorne 0}}

    Atualiza o DAC com o novo valor da média e ainda a envia pela porta serial.void escr_dac (void){

    escreve (transmite) em CS1 o valor da médiaescreve (transmite) em TXB o valor da média}

    Verifica se chegou o número do novo canal do ADC e atualiza a variávelcanal_ad.void rec_serial (void){

    se o valor LSR (lê valor) AMND 1 for igual a 1{pegue (lê) o valor de RXB e guarde em numa variável(canal_ad) }}

    Verifica as chaves, para (“congela”) tudo enquanto CH0 estiver pressionada eainda incrementa o número do canal do ADC a cada acionamento de CH1.void chaves (void){

    enquanto se lê o valor de CS1 e for zero fique parado

    pegue (lê) o valor de CS1 e guarde em numa variável(chave)se variável chave na posição para mudar o canal{

    variável(canal_ad) ++faça um and com 7 ( garante 1 em uma das ultimas 3 posições de dados)faça a chave voltar para posição inicial para não ficar mudando de

    posição}se o valor lido for o para habilitar o EOC{

    faça a chave igual o valor para habilitar o EOC}}PORTA PARALELA

    int le_ad (int qual_ad, int canal){

    se qual_ad for igual a zero{// canal e aleescreva canal&7 no valor 0X37Aescreva XX no valor 0X37A; escreva XX no valor 0X37A

    enquanto (lê 0x037A&8 for igual XX)escreva XX no valor 0X378lê 0x379 e guarde numa variável X; lê 0x37A e guarde numa variável Y;x = x^0x80; y=y^3; retorne x&0xF8+(y&3)}

    Prova treino: Usar mux e usardecoder; usar bits de expansão