Baixe o app para aproveitar ainda mais
Prévia do material em texto
10.1 Capítulo 10- COMUNICAÇÃO SERIAL 10.1- Introdução Comunicação Serial x Comunicação Paralela Na comunicação paralela enviamos uma palavra por vez ao longo de um barramento composto por vários sinais. A comunicação com impressoras é tipicamente uma comunicação paralela. A velocidade é alta, porém as distâncias são curtas. Além do envio dos dados deve-se também enviar sinais de controle. Na comunicação serial o dado é enviado bit por bit. O cabo que conecta os dispositivos pode ser mais longo, em virtude de características especiais do sinal que é transmitido. Diversos protocolos de comunicação operam sobre comunicação serial: redes de campo, comunicação com modens, etc... Existem dois modos de comunicação serial: Síncrono e Assíncrona. Comunicação Serial Síncrona Neste modo de comunicação o transmissor e o receptor devem ser sincronizados para a troca de comunicação de dados. Geralmente uma palavra de SINCRONISMO é utilizada para que ambos ajustem o relógio interno. Após a sincronização os bits são enviados seqüencialmente, até uma quantidade pré-combinada entre os dispositivos. Comunicação Serial Assíncrona Esta é a forma mais usual de transmissão de dados. Não existe a necessidade de sincronização entre os dispositivos, uma vez que os caracteres são transmitidos individualmente e não em blocos como na comunicação síncrona. A transmissão de cada caractere é precedida de um bit de start e terminada por 1 (1/2 ou 2) bit(s) de stop. Neste capítulo iremos explorar 2 tipos de padrões comunicação serial suportadas pelos processadores DSPs da Texas: (i) Comunicação assíncrona universal (formato RS232) Æ SCI; (ii) Comunicação síncrona entre dispositivos Æ SPI; A Figura 10.1 mostra a composição típica um frame assíncrono. 10.2 Figura 10.1- Frame assíncrono típico Notem que neste frame existe um bit de start, 8 bits de dados, um bit de paridade e um bit de parada. A paridade pode ser par ou ímpar. Quando a paridade é par o bit de paridade é gerado de modo que o número de 1s resultante na palavra mais o bit de paridade seja par. Por exemplo, se a palvra 10001010 está sendo transmitida, ou recebida, o bit de paridade deve ser 1, para que o conjunto palavra + bit de paridade tenha sempre um número par de 1s. Se a paridade usada for ímpar o bit de paridade no exemplo anterior será zero. No processo de transmissão assíncrona, os dispositivos envolvidos no processo de comunicação devem ter a mesma taxa de transmissão e recepção. Comunicação RS-232 Um dos padrões mais conhecidos para comunicação serial assíncrona é o RS-232. O padrão define um nível de tensão diferente do TTL: • Nível Lógico 0 Æ +5 a +15 Volts • Nível Lógico 1 Æ -5 a –15 Volts A conversão entre o nível TTL e RS232 pode ser feita pelo chip 1488 e do nível RS232 para o TTL através do 1489. Estes dois chips precisam de alimentação simétrica o que pode ser inconveniente em alguns projetos. O chip MAX232 da MAXIM (www.maxim-ic.com) necessita apenas de fonte +5V e incorpora tanto o conversor TTL-RS232 como o RS232- TTL, conforme mostrado na Figura 10.2. 10.3 Figura 10.2- Diagrama de blocos do MAX232 A Tabela 10.1 mostra os sinais típicos em um conector RS232. Muitos destes sinais só são empregados em comunicação com dispositivos mais complexos, como no caso de modens externos. Nos processos mais simples de comunicação apenas os pinos TXD e RXD são utilizados.. Tabela 10.1 - Sinais Padrão RS232 Nome TXD Dados transmitidos pelo terminal RXD Dados recebidos pelo terminal RTS Requisição de envio CTS Permissão de envio DSR Dados prontos DCD Detector de portadora DTR Terminal de dados pronto A Figura 10.3 mostra uma conexão simples entre dois dispositivos através da porta serial assíncrona empregando os conversores de níveis 1488 e 1489. 10.4 Dispositivo 1 Dispositivo 2 TXD RXD TXD RXD 5V5V MAX232 MAX232 Figura 10.3- Conexão entre dois dispositivos usando porta RS232 10.2 - Descrição da Interface Serial no TMS320F243 As principais configurações de uma porta de comunicação serial são: ¾ Taxa de transmissão de bits (Exemplo: 9600 bps, 12400 bps, etc.); ¾ Números de bits por caractere (Exemplo: 5, 6, 7 ou 8 bits por caractere); ¾ Definição do bit de paridade: par, ímpar ou sem bit de paridade; ¾ Definição do número de bits de paradas (Stop Bit): 1 ou dois; ¾ Configuração das interrupções geradas pela interface. Os principais registros que o programador precisa ter acesso ao usar as portas seriais são os registros de configuração, o registro de transmissão e recepção de dados e os registros de interrupção. A Figura 10.4 representa um diagrama de blocos simplificado da interface de comunicação serial. Registro TXBUF (7059h) e flags TXRDY e TXINT O registro TXBUF é o registro que contém os dados para serem transmitidos. Neste caso a CPU pode escrever o dado neste registro que o controlador se encarregará de transmitir os dados serialmente. Note que este é um registro de 8 bits. Note ainda do diagrama de blocos dois flags associados a este registro: o flag TXRDY e o flag de interrupção TXINT. O primeiro flag indica que o buffer de transmissão está vazio e que uma nova palavra pode ser enviada pela CPU para ser transmitida. A CPU deve verificar o estado deste flag antes de enviar um novo byte para a transmissão, caso contrário o byte anterior é perdido. O flag de interrupção pode ser utilizado para interromper a CPU. Deste modo quando o buffer de transmissão estiver vazio o periférico pode interromper a CPU para solicitar dela um novo dado para ser transmitido. 10.5 Figura 10.4 – Diagrama de Blocos do SCI Registro RXBUF (7057h) e flag RXRDY O registro RXBUF é o registro de recepção. Quando a recepção de todos os bits de um dado é completada o periférico transfere o dado para o registro RXBUF, ao mesmo tempo em que ativa (seta) o flag RXRDY. Este flag pode causar interrupção na CPU caso esteja configurado para gerar este evento. Quando o processador lê o registro RXBUF este flag é automaticamente zerado. Registro de Controle da Comunicação-SCICCR (7050h) Este registro define o formato dos caracteres conforme Tabela 10.1 Tabela 10.1- Registro de controle da comunicação Bit Função valores 7 Bits de Parada 0 Um bit de parada 1 Dois bits de paradas 10.6 6 Paridade 0 ímpar 1 par 5 Habilita Paridade 0 desabilita 1 habilita 4 0 Ver obs. 2 3 0 Ver obs. 2 2 1 0 Tamanho do caractere 000 1 bit 001 2 bits 010 3 bits …… 110 7 bits 111 8 bits OBS: 1- Quando a paridade é desativada nenhum bit de paridade é gerado na transmissão e nenhum bit de paridade é esperado na recepção. 2- Estas posições descrevem funções mais complexas que não são abordadas neste livro, por isso use zero nestes bits, que corresponde à função default. O leitor interessado em conhecer estas funções deve consultar do periférico. Registro de Controle 1 - SCICTL1 (7051h) Este registro controla a habilitação do transmissor e receptor do periférico e outras funções mais complexas. Neste livro serão utilizadas apenas as funções de habilitação do receptor e transmissor, que correspondem aos bits 0 e 1 da palavra de controle. Os demais bits devem ser escritos com o valor default, zero, conforme mostrado na Tabela 10.2 Tabela 10.2- Registro de Controle SCICTL1 Bit Função valores 7 0 Reservado 6-2 0 Ver obs. 1 10.7 1 TXENA Habilita a transmissão: 0 Transmissão desabilita 1 Transmissão habilitada 0 RXENA Habilita a Recepção: 0 Recepção desabilita 1 Recepção habilitada OBS:1- Estas posições descrevem funções mais complexas que não são abordadas neste livro, por isso use zero nestes bits, que corresponde à função default. O leitor Registro de Controle 2 – SCICTL2 (7054h) Este registro contém os flags de recepção (RXRDY) e transmissão TXRDY e as habilitações das interrupções respectivas. A Tabela 10.3 mostra a função dos bits. Tabela 10.3- Registro de Controle SCICTL2 Bit Função valores 7 TXRDY 1 indica que o buffer de transmissão está vazio 0 buffer de transmissão cheio (R-1) Æ ver observação 1 6 ----- (R-1) Æ ver observação 1 5-2 0 (R-0) Æ ver observação 1 1 RXINT Enable Habilita da interrupção RXINT: 0 desabilita interrução 1 habilita interrupção 0 TXINT Enable Habilita a interrupção TX: 0 desabilita interrução 1 habilita interrupção Observações: 1- Estes bits são apenas bits de leitura, não sendo afetados por instruções de escrita, ou seja, o se escrever um dado neste registro, estes bits não serão afetados. O valor após R- indica o valor do bit após o reset. 10.8 Registros de Seleção da Taxa de Transmissão e recepção A taxa de transmissão e recepção do periférico é escolhida escrevendo-se em dois registros: SCIHBAUD (7052h) e SCILBAUD (7053h). A taxa de transmissão (Taxa_Trans) é dada pela seguinte equação: _ ( 1)*8 CLKOUTTaxa Trans BRR = + Onde: ¾ CLKOUT é 20MHz para a família TMS320C2xx; ¾ BRR é a palavra composta pela concatenação dos 8 bits mais significativos de SCIHBAUD com os 8 bits menos significativos de SCILBAULD, conforme ilustrado na Figura 10.4. 10.9 10.4- Interface Serial para Periférico - SPI A conexão entre microcontroladores e dispositivos externos, tais como memória, conversores A/D, D/A e display de cristal líquido, entre outros, pode ser feita na forma paralela ou serial. A conexão na forma paralela envolve a ligação de muitas linhas de circuito impresso, ao mesmo tempo em que o circuito integrado deve possuir muitos pinos externos. Embora esta seja o tipo de conexão preferível para transferências de dados em altas velocidades, existem técnicas seriais, também de alta velocidade, que simplificam a construção da placa de circuito impresso. Um dos padrões mais difundido é a interface SPI (Serial Peripheral Interface) que necessita de apenas 4 linhas de controle para a comunicação entre os dispositivos. 10.4.1- Descrição de um dispositivo SPI genérico A Figura 10.5 mostra dois dispositivos SPI conectados. O dispositivo da direita é denominado dispositivo mestre e o da esquerda dispositivo escravo. O dispositivo mestre possui o controle do sinal de clock (SPICLK) e é quem controla o processo de trocas de mensagens e dados. Os pinos de dados são denominados SPISIMO e SPISOMI. No primeiro pino os dados entram quando o dispositivo é escravo (SI Î Slave In) e saem quando o dispositivo e mestre (MOÎ Mestre Out). No segundo pino a operação é inversa. Observe na figura a setas indicando a direção dos dados. SPISIMO SPISOMI SPICLKI SPIRXBUF Registros de Controle SPIDATA SPITXBUF SPISIMO SPISOMI SPICLKI SPIRXBUF Registros de Controle SPIDATA SPITXBUF SPI-MESTRE SPI-ESCRAVO Figura 10.5- Conexão entre dois dispositivos SPI A Figura 10.5 mostra ainda os principais registros dos controladores SPI: 10.10 ¾ SPITXBUF Î É o buffer que contém o dado a ser transmitido. ¾ SPIRXBUF Î É o buffer que contém o dado recebido. ¾ SPIDATA Î É o registro de dados. Os dados a serem transmitidos são transferidos para este registro. Na realidade ao mesmo tempo em que o mestre transmite dados ele recebe dados do dispositivo escravo. Neste caso o mestre deve, por software, aceitar ou não o dado. Trataremos deste processo com mais detalhes depois. ¾ Registros de controle ÎSão os registros utilizados para configurar a interface SPI, como estabelecer a freqüência do clock, definir se o dispositivo será mestre ou escravo e outras funções que serão exploradas posteriormente. Descrição da Operação Na Figura 10.5 o mestre inicia uma transmissão enviando o sinal de relógio SPICLK. Dados seriais são enviados pelo pino SPISIMO, do lado do mestre, e pelo pino SPISOMI, do lado do escravo. Por exemplo, na subida do clock os dados são disponibilizados nos pinos anteriores e na descida subseqüente do relógio os dados são armazenados no registro SPIDATA. Assim na descida de cada pulso de clock o escravo captura um bit vindo do mestre e o mestre captura um bit vindo do escravo. Deste modo ambos dispositivos transmitem e recebem dados simultaneamente. Cabe ao software de aplicação determinar se o dado é significativo ou não. O mestre pode iniciar uma transmissão a qualquer momento, uma vez que ele controla o sinal de clock, porém cabe ao projetista determinar como o mestre irá saber quando o escravo está pronto para transmitir dados. Isto pode ser feito, por exemplo, através de sinais de interrupção ou varredura por software. Exemplo 10.1 – Conexão DSP conversor D/A A Figura 10.6 mostra a conexão entre a interface SPI do DSP com a interface SPI do conversor D/A TLV5606 da TI. O processador é configurado como mestre, uma vez que o conversor só pode atuar como escravo. Na Figura o pino SPISTE (Slave Transmission Enable) da interface SPI do conversor é conectado ao pino FS do conversor. O conversor DA (conversor de 10 bits) recebe o dado do mestre e transforma este dado em um nível de tensão analógico que aparece no resistor RLOAD. A tensão no pino de saída é dada pela expressão (obtida da folha de dados do conversor): OUT=2 * REF *CODE [V] 210 10 2. . 2out REF CODEv = Onde REF é a tensão de referência e CODE é a palavra binária de 10 bits recebida pelo conversor. O conversor D/A deve receber do mestre uma palavra de controle pela interface serial, conforme mostrado na Figura 10.7. Os bits D14 e D13 são bits de controle para o conversor D/A. O bit SPD controla a velocidade de transmissão, sendo permitido o modo fast (SPD=1) ou slow (SPD=0). O bit PWR permite colocar o conversor no modo de baixo 10.11 consume (PWR=1 power down) O modo de operação normal é conseguido quando PWR=0. Os bits de dados correspondem aos bits D11 a D2 da palavra de controle. Figura 10.6 – Conexão entre o processador e um conversor D/A através da interface SPI Tabela 10.4- Palavra de Controle para o conversor D/A D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 X SPD PWR X novo valor para o conversor (10 bits) 0 0 A Figura 10.7 mostra o diagrama de tempo para o conversor D/A. A Figura mostra que para que os dados possam ser transferidos o sinal de seleção do chip (CS ) deve estar baixo e o sinal FS também. Note que a cada transição negativa do clock (de alto para baixo) o dado é transferido para o conversor D/A. Figura 10.7 – Diagrama de tempo para o conversor D/A 10.12 Mais descrição sobre interface SPI No Exemplo 10.1 o DSP é o dispositivo mestre e o conversor D/A é um dispositivo escravo. Neste exemplo, o escravo somente recebe dados, ou seja, a comunicação é unidirecional. Existem outros dispositivos SPI, como memórias e conversores A/D, que além de receberem dados do mestre, também precisam enviar dados para o mestre. O que caracteriza uma transmissão SPI é que a comunicação é dita mestre-escravo, o que significa que o mestre é quem sempre comanda a troca de informações, uma vez que é ele quem comanda o sinal de clock. Considere o caso do mestre ser conectado a um conversor A/D. O mestre deve enviar comandos de configuração para o conversor e um comando de início de conversão. O conversor A/D ao ser configurado e receber o início de conversão, processa então a conversãoanalógica para digital do sinal monitorado. A pergunta é: quando a conversão estiver pronta como o conversor A/D irá transferir o dado para o mestre se ele não pode iniciar a conversão? A resposta para esta pergunta está ilustrada na Figura 10.8. Esta figura mostra a interface do DSP com o conversor A/D TLV3544 da Texas. Note que neste caso o pino SPISTE do DSP é utilizado como pino de habilitação do conversor A/D. O pino /INT EOC do conversor A/D indica o fim da conversão. Deste modo este pino pode ser continuamente lido pelo DSP, através da porta A (IOPA.1). Neste caso temos o procedimento de varredura, ou seja, o processador lê constantemente este pino até que ele mude de estado. Quando isto ocorre o DSP sabe que a conversão terminou e portanto pode fazer uma operação de leitura dos dados. Só que para ler o dado o processador tem que enviar para o conversor um dado sem significado chamado dado “dummy”. O segundo procedimento para que o processador saiba quando o conversor terminou a conversão é o uso da interrupção. Neste caso o DSP fica liberado para ralizar outras tarefas enquanto espera o final da conversão do dado. Quando o conversor termina o processo de conversão ele ativa o pino de interrupção do processador. A rotina de interrupção se encarrega de ler o dado, enviando um dado “dummy” para o conversor e recebendo a informação desejada do conversor. Figura 10.8 – Modos para o escravo solicitar transferência de dados para o mestre: varredura ou interrupção 10.13 10.4.2- Registradores do periférico SPI A Tabela 10.5 mostra os registradores do periférico SPI contido no DSP. Estes registradores são registros mapeados na memória do DSP e podem ser acessados utilizando endereçamento direto ou endereçamento indireto. Tabela 10.5- Endereços dos Registradores de Controle do SPI Endereço (Físico) Endereço relativo (DP=00E0h) Registro Comentário 7040h 40h SPICCR Registro de controle de configuração SPI 7041h 41h SPICTL Registro de controle de operação SPI 7042h 42h SPISTS Registro de estado SPI 7044h 43h SPIBRR Registro que define a velocidade do SPI 7047h 47h SPIRXBUF Registro do buffer de recepção 7048h 48h SPITXBUF Registro do buffer de transmissão 7049h 49h SPIDAT Registro de dados seriais 704Fh 4Fh SPIRI Registro de prioridade de interrupção Registro de controle da configuração SPICCR Tabela 10.6- Registro de controle da configuração SPICCR Bit Função valores 7 SPI SW reset Resete da interface SPI por software: 0 inicializa o SPI para a configuração de resete. (Interface SPI fica no estado inativo) 1 SPI está pronto para transmitir e receber dados. 6 Polaride do clock 0 dado é externado na subida do SPICLK e lido na descida do mesmo (o estado inativo do clock é baixo); 1 dado é externado na descida do SPICLK e lido na subida do mesmo (o estado inativo do clock é baixo); 5-4 0 Bits reservados (não são afetados por escrita ) 3-0 A3 –A0 Define o tamanho do caractere a ser transferido ou recebido: 0000 Æ 1 bit 0001 Æ 2 bits ....... 1111 Æ 16 bits 10.14 Registro de controle de operação SPICTL Tabela 10.7- Registro de controle de operação SPICTL Bit Função Valores 7-5 Reservado 4 Overrun INT_ENA É o habilitador do flag que causa interrupção quando uma palavra é perdida, porque o sistema não foi capaz de ler a última palavra e uma nova palavra foi recebida. 0 desabilita a interrupção 1 habilita a interrupção de Overrun 3 Fase de CLKIN Este bit seleciona a fase do clock (ver observação 1) 0 operação normal 1 o sinal de clock é atrasado 2 Mestre/ Escravo A interface SPI do DSP pode operar como mestre ou escravo. Para as operações usuais ela será sempre mestre. 0 configurada como escravo 1 configurada como mestre 1 Talk 0 desabilita transmissão 1 habilita transmissão 0 SPI_INT ENA Habilitação da interrupção do SPI. Quando habilitada uma interrupção é gerada quando um caracter está pronto para ser lido. 0 desabilita interrupção 1 habilita interrupção Observação: 1) O bit Fase de CLKIN, juntamente com o bit de Polaridade do Clock (Tabela 10.6), determinam quando o dado é externado e quando ele é lido. Observe por exemplo a Figura 10.7 que mostra quando o conversor D/A lê o dado vindo do DSP. Note que o conversor D/A adquire o dado na descida do clock. A Figura 10.9 mostra as 4 possibilidade determinadas pelos bits Polaridade e Fase do clock CLKIN. Uma palavra de 8 bits está sendo transmitida ou recebida. O último traço do gráfico mostra o momento em que os dados recebidos são retidos na interface SPI. A Tabela 10.8 mostra apresenta as 4 combinações. Possibilidade. Para a interface entre o DSP e o conversor D/A anterior o dado deve estar disponível na caída do clock, assim as configurações 00 e 11 seriam as únicas que atenderiam ao projeto. 10.15 Tabela 10.8 – Esquema do clock CLKIN Esquema do CLKIN Polaridade Fase SPI externa dado na subida do clock CLKIN e recebe dado na descida do mesmo. 0 0 SPI externa dado ½ ciclo à frente da subida do clock CLKIN e recebe dado na subida do mesmo. 0 1 SPI externa dado na descida do clock CLKIN e recebe dado na Subida do mesmo. 1 0 SPI externa dado ½ ciclo à frente da descida do clock CLKIN e recebe o dado na descida do mesmo. 1 1 Figura 10.9 – As quatro possibilidades de configuração de CLKIN Registro de Estado SPISTS 10.16 Tabela 10.9- Registro de controle da configuração SPISTS Bit Função Valores 7 Flag de Overrun Quando setado (‘1’) indica que um dado foi perdido devido a recepção de um novo dado. Este bit é zerado em uma das seguintes situações: • Por software ao escrever um neste bit; • Escrevendo 0 no bit de resete por software do SPI (SPICCR.7) • Após o resete do sistema. 6 SPI INT Flag de interrupção. Quando setado indica que a transmissão ou recepção do dado foi completada. Se a máscara de interrupção deste bit estiver setado será gerada uma interrupção na CPU (INT1 ou INT5 dependendo da prioridade escolhida). Este bit é somente de leitura e só será zerado numa das situações abaixo: • Lendo o registro SPIRXBUF; • Escrevendo 0 no bit de resete por software do SPI (SPICCR.7) • Após o resete do sistema. 5 BUF TX cheio Este flag é somente de leitura. Quando um dado é escrito no registro SPITXBUF este bit é automaticamente setado. Ele é zerado quando o dado é transferido para o registro de deslocamento serial SPIDAT ou pelo resete do sistema. 4-0 Reservado Registro de velocidade de transmissão/recepção SPIBRR Tabela 10.10- Registro de velocidade de transmissão/recepção SPIBRR Bit Função Valores 7 Reservado 6-0 A6-A0 Definem a taxa de transmissão expressa pela Equação 10.1 10.17 Se SPIBRR 3 _ 1 Caso contrario _ 1 CLKOUTTaxa SPI SPIBRR CLKOUTTaxa SPI SPIBRR ≥ = + = + (10.1) Onde: • SPIBRR = (A6 – A0)10 varia de 0 a 127 • CLKOUT é o clock do DSP. Para o F243 é de 50ns. Registro de Controle de Prioridade Este registro define o nível de prioridade da interrupção e o que ocorre durante o processo de emulação. Tabela 10.9- Registro de controle da configuração SPISTS Bit Função Valores 7 Reservado 6 Prioridade Interrupção 0 - Interrupção em alta prioridade (INT1) 1 – Interrupção em baixa prioridade (INT5)* 1 5-4 Emulação Seleciona o comportamento da interface SPI durante o processo de emulação. Para maiores detalhes consulte o manual do fabricante.Use 00 3-0 Reservado (Bits somente de leitura) OBS: 1- Use a interrupção INT1 quando estiver usando o sistema DSK da placa, uma vez que esta utiliza a INT5 para comunicação serial do sistema monitor com o PC. Se você puder utilizar periféricos em INTs não compartilhadas a programação fica bem mais simples. 10.4.3- Exemplo de aplicação Neste exemplo vamos configurar a interface SPI para transferir os dados do gerador de senoides para o conversor D/A TLV5606. Supõem-se que o temporizador foi programado 10.18 para gerar uma interrupção à cada 1/16000 segundo e que o dado a ser transferido para o D/A encontra-se na variável senos. .setsect “.text”, 8800h .setsect “.vectors”, 0800h .setsect “.data”, 300h * Definição dos Registros de Controle de I/O OCRPG .set 0E1h ; página de dados de OCR; OCRB .set 012h ; registro de controle B * Definição dos Registros SPI SPIPG .set 0E0h ; Página do SPI SPICCR .set 040h ;registro configuração SPI SPICTL .set 041h ;registro de controle da ;operação SPIBRR .set 044h ;registro de velocidade SPITXB .set 048h ;buffer de saída * Definição dos Registros da interrupção do timer EVMPG .set 232 ;Página do EVM EVIFRA .set 2Fh ;pega o offset de EVIFRA EVIMRA .set 42Ch ;pega o offset de EVIMRA * Seção de dados .data senos .word 0 ; variável de retorno da ;subrotina seno ----- ;completar .sect “vectors” ;Seção dos vetores de ;interrupção B start ; reset B int1 ; INT1 não usada neste exemplo B int2 ; INT2 usada pelo Timer .text Start: SETC SXM ;seta extensão de bit de sinal CLRC OVM ;outras instruções SPM 1 * Configuração dos pinos do chip para SPI LDP #OCRPG SPLK #003Ch,OCRB ;seleciona os pinos para a ;função primária do SPI (Ver 10.19 ;Tab. 7.4) * Configuração do interface SPI LDP #SPIPG ;carrega página SPI SPLK #0000h,SPICCR ;reseta o SPI SPLK #0006h;SPICTL ; seta modo mestre, clock ;normal e talk SPLK #09h,SPIBRR ;define taxa de 1MHz SPLK #008Fh,SPICCR ;ativa SPI para transmitir 16 ;bits * Configuração do temporizador ;configure temporizador para ;gerar 1 interrupção a cada ;1/16000 segundos. * Configuração da interrupção LDP #0 ;Acesso à máscara de interrup. SPLK #12h,04 ;Habilita INT2 e INT5(é usada ;pelo sistema monitor da DSK) LDP #EVMPG ;Página EVM SPLK #0080h ,EVIMRA ;habilita interrupção do ;temporizador * Gerando o seno loop: CALL seno ;chama subrotina que retorna o ;valor da soma de senos na ;variável senos espere LDP #EVMPG ;pagina de dados BIT EVIFRA,(15-7) ;Isola o flag de interrupção ;T1PINT BCND espere,NTC ;espera até que se complete o ;ciclo LACL EVIFRA ; SACL EVIFRA ;desativa T1PINT (habilita ;nova interrupção) B loop ;nova amostra * Interrupção do temporizador int2: LDP #300h ; LACC senos,12 ;ajustando o dado para o SPI XOR #0800h,16 ;inverte bit 11 do ACCH AND #4FFC,16 ;zera os bits 0,1,12,13,15 OR #4000h,16 ;seta bit 14 LDP #SPIPG SACH SPITXB ; transfere o dado para o 10.20 ;conversor CLRC INTM ;habilita nova interrupção RET * Subrotina seno seno: Completar ... ;
Compartilhar