Capítulo 3 – REGISTRADORES

Descrevem-se a seguir os principais registradores de controle da CPU ‘542.

3.1 REGISTRADORES DE ESTADO

3.1.1 Registrador ST0

Figura 8 – Mapa de bits do registrador ST0

§         Bits 13 a 15: ARP – Auxiliar Register Pointer – Este campo de três bits é utilizado para selecionar o registrador auxiliar a ser utilizado no modo de compatibilidade de endereçamento indireto a operando simples; em modo de operação normal (CMPT=0), este campo de bits deve ser mantido como zero;

§         Bit 12: TC – Test/Control flag – Se 1, indica que o resultado de uma comparação é verdadeiro;

§         Bit 11: Bit de carry;

§         Bit 10: OVA – Se 1, indica que ocoreu um overflow do acumulador A;

§         Bit 9: OVB –  Se 1, indica que ocorreu um overflow do  acumulador B;

§         Bits 0 a 8: DP – Data-memory page – Seleciona a página da memória de dados.


3.1.2 Registrador ST1

Figura 9 – Mapa de bits do registrador ST1

§         Bit 15: Se 1, indica que um bloco de repetição está ativo;

§         Bit 14: Indica qual ponteiro é utilizado no endereçamento indireto relativo. Se 1, o stack pointer é utilizado, caso contrário, o ponteiro de página de dados é utilizado;

§         Bit 13: Reflete o estado do pino XF;

§         Bit 12: HM – Hold Mode – Se 1, indica que a CPU deve continuar a execução da memória de programa interna após reconhecer um pedido de HOLD e apenas colocar sua interface externa em alta impedância. Se 0, indica que a CPU deve interromper a execução da memória de programa ao reconhecer um pedido de HOLD;

§         Bit 11: INTM – Interrupt Mode – Se 0, habilita as interrupções mascaráveis, caso contrário, desabilita;

§         Bit 10: Não implementado, é sempre lido como zero;

§         Bit 9: OVM – Overflow Mode – Indica o que deve ser colocado no registrador de destino quando ocorre um overflow. Se 0, os bits superiores do resultado são simplesmente desconsiderados. Se 1, o registrador de destino recebe o valor 7 FFFF FFFFh;

§         Bit 8: SXM – Sign Extension Mode – Determina se os dados terão ou não a extensão de sinal. Se 1, a extensão de sinal é suprimida, caso contrário os dados recebem o bit referente ao sinal antes de serem utilizados pela ALU;

§         Bit 7: C16 – Dual 16-Bit/double-precision arithmetic mode. Determina o modo aritmético de operação da ALU;

§         Bit 6: Relativo ao controle das operações de multiplicação;

§         Bit 5: CMPT - Compatibility Mode – Determina o modo de compatibilidade para o campo de bits ARP. Se 1, o registrador auxiliar apontado por ARP é atualizado com o conteúdo do operando da instrução que utilizar endereçamento indireto;

§         Bits 0 a 4: Este campo de 5 bits determina o valor do deslocamento que deve ser executado por algumas instruções do DSP.

 

3.2 REGISTRADOR PMST

Figura 10 – Mapa de bits do registrador PMST (Processor Mode Status Register)

§         Bits 7 a 15 – Este campo de 9 bits é o ponteiro dos vetores de interrupção. A CPU ‘542 possui um total de 25 interrupções. É possível colocar os vetores de interrupção no início de qualquer uma das 512 páginas do espaço de memória de programa do DSP, sendo que cada página contém 128 palavras de 16 bits;

§         Bit 6 – MP/MC\ – Este bit define o modo de operação da CPU. Se 0, a CPU opera no modo “microcomputer”, acessando a memória de programa interna; se 1, a CPU opera no modo “microprocessor”, utilizando a memória de programa externa. Quando ocorre o reset da CPU o pino MP/MC\ é amostrado e seu estado é atribuído a este bit, mas, independentemente do estado deste pino, é possível alterar o bit MP/MC\ via software, com o qual pode-se mudar o modo de operação a qualquer momento. No caso do kit de desenvolvimento DSKplus, o pino MP/MC\  está ligado ao terra, o que faz com que o DSP comece a operar utilizando a memória de programa interna e, ao configurarmos o registrador PMST, este bit recebe zero, o que não altera a condição que se segue ao reset;

§         Bit 5 – OVLY –  Este bit define se a memória de dados será ou não mapeada no espaço de programa. Se OVLY é igual a zero, a RAM é mapeada no espaço de dados, mas não no espaço de programa. Se OVLY=1, a RAM é mapeada no espaço de dados e no espaço de programa, exceto a página zero (0x00 – 0x7f), que contém os registradores de controle;

§         Bit 4 – AVIS Controla o modo de visibilidade do endereçamento à memória de programa interna. Se AVIS é igual a zero, o barramento externo não exibe o endereço que a CPU está acessando em sua memória de programa interna. Se AVIS é igual a 1, o endereço acessado pela CPU na memória de programa interna aparece no  barramento externo de endereço;

§         Bit 3 – DROM – Define se a ROM, memória de programa, será ou não mapeada no espaço de dados. Se DROM for zero, a ROM não é mapeada no espaço de dados. Se for 1, uma porção da ROM é mapeada no espaço de dados;

§         Bit 2 – CLKOFF – Se 0, o pino CLKOUT não fornecerá clock e permanecerá em nível alto;

§         Bit 1 – SMUL – Se igual a 1, indica que ocorreu uma saturação ao ser executada a operação MAC ou MAS;

§         Bit 0 – SST – Controla a execução de algumas instruções especias do DSP.


3.3 REGISTRADOR IMR

       O bit INTM do registrador de estado ST1 habilita ou desabilita globalmente todas as interrupções mascaráveis do DSP, enquanto que os bits do registrador IMR habilitam uma ou outra interrupção mascarável.

 

Figura 11 – Mapa de bits do registrador IMR (Interrupt Mask Register)

§         Bits 10 a 15 – Estes bits são reservados no DSP ‘542, e são lidos sempre como zero;

§         Bit 9 – Se 1, habilita a interrupção da porta HPI;

§         Bit 8 – Se 1, habilita a interrupção externa 3;

§         Bit 7 – Se 1, habilita a interrupção de transmissão da porta serial TDM;

§         Bit 6 – Se 1, habilita a interrupção de recepção da porta serial TDM;

§         Bit 5 – Se 1, habilita a interrupção de transmissão da porta serial com buffer;

§         Bit 4 – Se 1, habilita a interrupção de recepção da porta serial com buffer;

§         Bit 3 – Se 1, habilita a interrupção do timer;

§         Bits 2,1 e 0 – Se forem igual a 1, habilitam respectivamente as interrupções externas 2, 1 e 0.

 

3.4 REGISTRADOR IFR

Figura 12 – Mapa de bits do registrador IFR (Interrupt Flag Register)

 

3.4.1 Interrupções

Interrupções são sinais que podem ser originados tanto por software como por hardware e que fazem com que o DSP suspenda a execução do programa principal e execute uma rotina de serviço de interrupção (ISR – Interrupt Service Routine). Normalmente as interrupções são geradas por dispositivos que trabalham em conjunto com o DSP, no momento em que estes precisam ler ou entregar dados (por exemplo, ADCs, DACs ou outros processadores). Interrupções também são utilizadas para sinalizar a ocorrência de um evento particular (por exemplo, término da contagem do timer). A CPU ‘C542 possui tanto interrupções geradas por software como interrupções geradas por hardware:

§         Uma interrupção pode ser gerada via software através das seguintes instruções: RESET, TRAP ou INTR;

§         Interrupções que podem ser geradas via hardware por dispositivos internos à CPU (timer, por exemplo), ou por dispositivos externos (caso do circuito de interface analógica AC01, que no kit de desenvolvimento DSKplus gera a interrupção trint – interrupção de transmissão da porta serial TDM).

 

Algumas interrupções podem ser habilitadas ou desabilitadas via software, enquanto que outras serão sempre atendidas pelo DSP. Quando ocorre a requisição de uma interrupção, é setado o bit correspondente no registrador IFR. Executada a rotina de serviço de interrupção, o flag é automaticamente limpo. Qualquer um dos eventos seguintes pode limpar um flag de interrupção:

§         A CPU é resetada;

§         É gerada a interrupção TRAP via software;

§         Um “1” é escrito no flag apropriado;

§         A instrução INTR é executada utilizando-se o número apropriado da interrupção.

 

Um “1” em qualquer bit do registrador IFR indica que a interrupção correspondente está pendente. Para limpar esta interrupção, é necessário escrever um “1” no bit apropriado do registrador IFR. Desta forma, todas as interrupções pendentes em um dado momento podem ser limpas escrevendo-se no registrador IFR o seu próprio conteúdo.

 

3.4.2 Fases de execução

A execução de uma interrupção consiste de três fases:

 

Fase 1: Recebimento da requisição de interrupção.

Uma requisição de interrupção pode ser gerada tanto por hardware como por software. Ao ser gerada a requisição, o flag correspondente do registrador IFR é setado, independentemente da interrupção estar habilitada ou não. Este bit será limpo automaticamente no momento que a ISR for executada. Uma interrupção pode ser requisitada por hardware – seja um dispositivo externo ao DSP ou um periférico on-chip –             ou via software através das seguintes instruções:

§         INTR – Esta interrupção permite que seja executada qualquer ISR. O operando da instrução K indica qual é o vetor de interrupção que queremos que o DSP desvie a execução do código. Quando esta instrução é executada, o bit INTM do registrador ST1 é setado, de modo que todas as interrupções mascaráveis são desabilitadas;

§         TRAP – Esta instrução faz exatamente o mesmo que a instrução INTR, mas sem setar o bit INTM do registrador ST1;

§         RESET – Esta instrução pode ser utilizada a qualquer momento para resetar a CPU. Quando esta instrução é executada, o bit INTM é setado, de modo que todas as interrupções mascaráveis são desabilitadas.

 

Fase 2: Reconhecimento da interrupção.

Após a CPU receber a requisição de uma interrupção, esta deve decidir se deve reconhecê-la ou não (gerar o acknowledge; o pino IACK\ é resetado). Se a interrupção é não-mascarável, é imediatamente reconhecida. Caso contrário, somente será reconhecida se uma série de condições forem satisfeitas:

§         A interrupção gerada tem uma prioridade maior. Se mais de uma interrupção é gerada ao mesmo tempo, elas serão executadas  de acordo com sua prioridade;

§         O bit INTM do registrador ST1 deve estar limpo, ou seja, as interrupções mascaráveis devem estar globalmente habilitadas. Quando uma interrupção é requisitada, este bit é automaticamente setado. Se o programa retornar da rotina de serviço de interrupção – ISR – através da instrução RETE,  o bit INTM será limpo, reabilitando globalmente as interrrupções. INTM pode ser setado também através de um reset gerado por hardware;

§         O bit correspondente do registrador IMR deve estar setado, habilitando a interrupção em particular.

 

Fase 3: Execução da rotina de serviço de interrupção.

Após reconhecer a interrupção, a CPU executa as seguintes ações:

§         Guarda o conteúdo do PC, ou seja, o endereço de retorno no topo da stack, na memória de dados;

§         Carrega o PC com o endereço do vetor de interrupção apropriado;

§         Busca a instrução localizada no endereço do vetor de interrupção;

§         É executado o desvio que leva até o endereço onde está localizada a ISR;

§         A ISR é executada até que a instrução de retorno da interrupção seja encontrada;

§         Busca o endereço de retorno na stack e o escreve no PC;

§         Continua a execução do código principal.

 

Os vetores de interrupção podem ser colocados  no começo de qualquer uma das páginas da memória de programa do DSP. O endereço do vetor de interrupção é gerado concatenando os bits do campo IPTR – Interrupt Pointer Register – do registrador PMST com o número da interrupção multiplicado por dois.

 

3.5 REGISTRADORES DE CONTROLE DA INTERFACE HPI

§         HPIA – Contém o endereço da memória HPI que será acessado pelo host. Este registrador não pode ser acessado pelo DSP, apenas pelo host;

§         HPIC – Registrador de controle da interface HPI. Pode ser acessado tanto pelo host como pelo DSP. Este registrador contém os bits de controle  e de estado da interface HPI;

HPID – Registrador através do qual o DSP lê ou escreve dados na memória do DSP.