Você está na página 1de 39

Universidade do Estado de Santa Catarina

UDESC Joinville SC

Minicurso de DSP
Texas Instruments

Realizao:

Orientador: Ademir Nied


Acadmico: Felipe Guilherme Stein

Dezembro/2010

Minicurso de DSP

Esta apostila foi desenvolvida no LAPAE Laboratrio de Pesquisa em


Acionamentos Eltricos, no contexto das atividades do Programa de
Educao Tutorial PET de Engenharia Eltrica do Centro de Cincias
Tecnolgicas da UDESC.
A apostila baseada no DSP TMS320 F2812 e Code Composer Studio
verso 3.1, Texas instruments. Foi utilizada a placa de desenvolvimento
eZdsp F2812 da Spectrum Digital Inc. Para os exerccios tambm foi
utilizada um kit de testes contendo indicadores de estado, chaves digitais e
speaker.
Informaes no abordadas nesta apostila so encontradas no
tutorial DSPKITAP, 2003, o guia para o CCS, e no manual para a placa de
desenvolvimento, disponveis em www.ti.com.

2
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
1
1.1
1.2
1.3

Introduo
O DSC TMS320F2812
A soma dos produtos
A gerao do clock

2 O ambiente de Desenvolvimento
2.1
Code Composer Studio
2.2
Criando um Projeto
2.3
Exerccio 1: criando um novo projeto
2.3.1
A pilha
2.3.2
Linker command file
2.3.3
Compilao
2.3.4
Executando o programa
2.3.5
Watch Window
2.3.6
Breakpoint e Probe Point
2.3.7
Wacth Dog Timer
2.3.8
Estrutura de um programa
2.3.9
Structs, Unions e Campos de Bit
3 Entradas e Sadas digitais
3.1
Exerccio 2: sadas digitais
3.1.1
Comeando o projeto
3.1.2
Adicionando arquivos essenciais
3.1.3
Macros EALLOW e EDIS
3.1.4
Registradores de inicializao
3.1.5
Configurar/acessar as entradas/sadas digitais
3.1.6
Funo delay
3.1.7
Funo main
3.2
Exerccio 3: entradas digitais
4 Interrupes
4.1 Mscaras de interrupo
4.2 Configurando o Peripheral Interrupt Expansion (PIE)
4.3 Interrupes de Timer
4.4 Exerccio 4
4.4.1 Configuraes do Exerccio 4
4.4.2 Mscaras de Interrupo no Exerccio 4
4.4.3 A rotina de servio de interrupo
4.4.4 Modificaes no Exerccio 2
4.4.5 Configurando o Watch Dog
5 Event Manager
5.1 General Purpose Timer
5.2 Exerccio 5
5.2.1 Configuraes do Exerccio 5
5.2.2 Configurando o Timer

3
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
1 Introduo
Esta apostila visa apresentar conhecimentos sobre processadores
digitais de sinais, tratando sobre o DSP da Texas Instruments. Ser
abordada a programao para este tipo de dispositivo, atravs da utilizao
do software Code Composer Studio.
Um Processador Digital de Sinais DSP, sigla em ingls um
dispositivo especfico desenvolvido em torno da soluo de operaes
matemticas tpicas para manipular dados digitais medidos por sensores de
sinais. Seu objetivo principal processar esses dados digitais o mais rpido
possvel, para ser capaz de gerar dados de sada em resposta s entradas
em tempo real.

1.1 O DSC TMS320F2812


O DSC TMS320F2812 um microcontrolador da Texas Intruments
que pertence a um grupo de dispositivos de processamento digital chamado
Digital Signal Controller DSC. um chip que combina o processamento de
um DSP com perifricos embarcados de um microcontrolador. Para controle
de sistemas em tempo real que necessitem de muitas operaes
matemticas um DSC o dispositivo mais indicado.
Atualmente cerca de metade do mercado de fabricao de DSP/DSC
dominado pela Texas, seguida pela Agere Systems, Motorola e Analog
Devices. Na Texas h trs famlias: C2000 (baixo custo), para controle
integrado em tempo real; C5000 (eficincia), com baixo consumo de
energia por MIPS mega instrues por segundo para telefonia mvel; e
C6000 (performance), com maior capacidade de processamento e ponto
flutuante, para processamento de imagem e udio e comunicao wireless.
O F2812 possui um core DSP de 32-bit com ponto fixo da srie
C2000. um processador com arquitetura Harvard, onde os barramentos
de memria de dados e de memria de instrues so separados.
Esta apostila foi produzida para ser utilizada com o kit eZdspF2812 da
Spectrum Digital como o da figura 1.

Figura 1: eZdspF2812

4
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

1.2 A Soma dos Produtos


Antes de entrar nos detalhes deste dispositivo e suas aplicaes
precisamos conhecer um pouco da matemtica que h por trs de tudo isso.
A equao da Soma dos Produtos SOP (sum of products) a base para
qualquer abordagem em processamento digital de sinais. Este algoritmo
largamente utilizado para Anlise de Fourier e multiplicao de matrizes.
Nele, um novo valor calculado a partir da soma de produtos parciais entre
dois vetores, podendo ser de ponto flutuante ou no.

Figura 2: a Soma dos Produtos.

Figura 3: algoritmo tpico para a Soma dos Produtos.


Se este algoritmo for implementado em um microcontrolador comum
certamente demandar muitos ciclos de execuo. Um DSP muito mais
apropriado para fazer esta operao, pois foi projetado de forma a
minimizar o nmero de instrues necessrias para executar esta operao
matemtica, j que possui uma unidade especfica que realiza a operao
em um ciclo de clock de barramento. Assim, quando o cdigo em C for
traduzido para linguagem de mquina pelo compilador para um DSP, este
cdigo ser muito menor do que seria em um microcontrolador comum.

5
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

Figura 4: exemplo de algoritmos que utilizam o princpio da Soma dos


Produtos.

1.3 A gerao do clock


O DSP, assim como outros processadores, utiliza um clock
proveniente de um PLL phase-locked loop, que multiplica um clock com
uma freqncia de referencia mais baixa, no caso do kit eZdsp de 30MHz,
para a freqncia de operao do processador. Existem PLLs para
freqncias da ordem at de gigahertz.
Esta uma ttica para evitar distores devido interferncias
eletromagnticas em alta freqncias, assim gerado um clock externo de
menor freqncia e, ento, multiplicado internamente. Alm disso, fique o
preo de cristais osciladores aumenta exponencialmente com a freqncia
de oscilao.

6
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
2 O Ambiente de Desenvolvimento
Vamos conhecer a IDE integrated development environment
utilizada para trabalhar com o DSP. Trata-se do software Code Composer
Studio - CCS, fornecido pela Texas Instruments.

2.1 Code Composer Studio


O Code Composer Studio um software completo, que possibilita
utilizar o DSP em modo de emulao, onde se podem adquirir dados de
forma conjunta com a execuo do programa atravs de um J-tag com
interface paralela, algo muito utilizado, como exemplo, em controle de
mquinas eltricas e acionamento eltrico.
As etapas bsicas que ocorrem durante a programao do DSP so:
edio, compilao, e, ento, o link com o DSP. Estas etapas so
combinadas em build, comando que ser visto logo frente, no qual o
compilador constri o arquivo .out que ser gravado ma memria do DSP.
Terminada a etapa de programao, vem a emulao do programa, atravs
das opes de debug que sero apresentadas.

2.2 Criando um Projeto

Figura 5: aparncia inicial do CCS.

Aps abrir o programa, para criar um novo projeto, siga o menu


project>new. Essa ao cria um projeto em branco, com a extenso .pjt.

7
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

Figura 6: criando um projeto.

Selecione um diretrio. Nele ficar a pasta com os arquivos criados


no projeto e o arquivo .out para download no DSP, gerado pelo comando
build. O arquivo .pjt ir reunir, alm do cdigo fonte, todas as
informaes necessrias para o projeto. Agora seu projeto foi criado.
Aqui ser abordada a programao em linguagem C. Para escrever
o cdigo, vamos adicionar um arquivo .C, em branco, que ser o arquivo
fonte onde iremos inserir a funo principal, main, do tipo void. Para isso
v em file>new>source file.

2.3 Exerccio 1: criando um novo projeto


Crie um programa teste, que conter apenas um loop demonstrativo.
Escreva os comandos do programa teste conforme a figura 7:

Figura 7: programa teste


Salve esse arquivo .C na mesma pasta do seu arquivo .pjt. Para
tanto, v em file>save as>NOME.c.
Nesse momento o arquivo fonte foi criado, mas no est relacionado
ao seu projeto. Portanto, deve-se adicionar o arquivo fonte (NOME.c) ao
projeto .pjt. Para isso v em project>add files to project, escolhendo
NOME.c
Para fazer um comentrio utilize duas barras e faa o comentrio de
uma linha:

8
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

unsigned int count;

//esta a varivel count

Para comentar uma regio com vrias linhas do cdigo utilize /*


antes do cdigo e */ no final:
/*
unsigned int count1;
float num;
unsigned int count2;
unsigned int count3;

//esta
//esta
//esta
//esta

a
a
a
a

varivel
varivel
varivel
varivel

count1
num
count2
count3

*/

2.3.1 A pilha
necessrio tambm configurar o tamanho da pilha, o stack size,
que o processador DSP ter disponvel para realizar as operaes.
A pilha, ou stack, uma rea da memria RAM reservada para
trabalhar com informaes temporrias. Quando programamos em
linguagem C no tomamos conhecimento da pilha. Ela utilizada em mais
baixo nvel para acumular dados push e posteriormente retirar dados
pull fazendo o papel de um local provisrio para alocar dados. Isto tornase interessante quando h um jump de sub-rotina quando programa-se
em assembly, para guardar o endereo da prxima instruo que deve ser
executada quando houver o retorno de sub-rotina. Tambm usa-se a pilha
para operaes matemticas, quando se quer guardar um resultado que
ser imediatamente utilizado novamente.
Para configurar a pilha do DSP, siga o menu project>build
options>linker>stack size.
A Texas instruments indica o tamanho padro 0x400, portanto, entre
com o valor 400 no campo indicado.

2.3.2 Linker Command File


O linker tem a funo de agrupar os vrios blocos do programa,
conectando as partes fsicas da memria do DSP com as reas declaradas
para alocao das diversas estruturas do programa, por exemplo, o cdigo
fonte, tabelas matemticas, rea de registradores, entre outras existentes
no software. Ser utilizado o linker command file, um arquivo pr-definido
para o link da memria. Eventualmente pode haver necessidade de
realocao de memria, contudo, no na ocasio dos exerccios aqui
apresentados, somente em casos de programas maiores. Assim, vamos
adicionar o arquivo necessrio, indo em project>add files to Project,
adicionando o arquivo F2812_EzDSP_RAM_lnk.cmd, que tambm dever
estar na pasta do projeto.

9
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
2.3.3 Compilao
Finalmente, compile o cdigo. Voc pode apenas compilar o cdigo,
atravs do comando compile, ou, atravs do comando build, em
project>build, compilar e construir o arquivo de sada, .out. Poder haver
erros e warnings do programa, os quais devem ser totalmente eliminados.
Na primeira vez recomenda-se utilizar o comando rebuild all ao
invs de build. H um cone disponvel na parte superior do programa
para rebuild all.
O compilador gera um arquivo com a extenso .out, este o arquivo
que gravado na memria do DSP. Ele salvo em um diretrio que for
configurvel, por padro na pasta debug dentro da pasta do projeto.
No havendo erros na compilao, faa o download do cdigo para
o DSP. Para efetuar o download do programa para o DSP v a file>load
program>debug>NOME.out.

2.3.4 Executando o programa


Agora, com o arquivo j gravado, execute o programa. V em
debug>go main, isso faz o programa esperar no incio da rotina principal,
main. Voc vai perceber um indicador amarelo neste ponto, ao lado do
cdigo. Com o boto direito do mouse pode-se forar que o programa
comece de qualquer ponto arbitrariamente desejado.

Figura 8: aps o comando Go main.


Para iniciar a execuo do programa no DSP, selecione debug>run,
ou tecle F5. Voc notar um indicador no canto esquerdo da janela.

10
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
O usurio tem opo de PAUSAR a qualquer momento a execuo do
programa, clicando em debug>halt, indicado pelo cone no canto esquerdo
da tela. Desta forma o programa retorna a execuo do ponto onde foi
PAUSADO quando for novamente teclado F5.
O CCS tem alguns atalhos no canto esquerdo do ambiente que podese ver na figura 9.

Figura 9: cones de atalho.


Outras funcionalidades, com o programa em execuo:
debug>restart: reinicia o cdigo e aguarda para a execuo novamente.
debug>reset CPU: encerra definitivamente a execuo, provocando reset no
DSP, diferentemente do comando "halt.

2.3.5 Watch Window


Para o acompanhamento do contedo das variveis utilizadas no
programa em tempo real, utiliza-se a ferramenta watch window. Esta
ferramenta nada mais do que uma janela onde ficam dispostas as
variveis utilizadas no programa que o usurio desejar incluir. Este recurso
pode ser adicionado pelo caminho em View>Watch Window.
No canto inferior direito de seu ambiente de programao ir
aparecer uma janela na qual voc pode acompanhar as variveis. Tambm
possvel adicionar uma varivel janela clicando com o boto direito do
mouse e selecionando add to watch window.

11
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

Figura 10: watch window


Para atualizar o valor da varivel necessrio clicar com o boto
direito sobre ela, no watch window, selecionando refresh.
Se for necessrio um acompanhamento minucioso das variveis,
pode-se executar o programa passo a passo atravs da instruo single
step. Pode-se utilizar este recurso seguindo debug>single step ou
pressionando a tecla F8.

2.3.6 Breakpoint e Probepoint


possvel adicionar em todos os programas pontos de parada
breakpoints e probepoints. Isto permite que o usurio acompanhe o que
o programa efetuou at o ponto escolhido. Nestes pontos o DSP atualiza os
dados para o computador, que podem ser visualizados no watch window.
O Code Composer fora uma parada na execuo do cdigo e captura os
dados do DSP, aps isso o programa pode continuar parado ou no, como
ser visto.
No CCS pode-se inserir um breakpoint, literalmente um ponto de
parada, clicando com o boto direito do mouse na coluna ao lado do cdigo,
sobre a linha na qual se deseja que o cdigo seja parado. Para isto escolha
a opo toggle breakpoint. Note que a linha marcada com um indicador
vermelho. Com um breakpoint o cdigo parado, os dados das variveis
so atualizados e, para voltar execuo, o usurio precisa do comando
run, toda vez que o programa passar por algum ponto de parada inserido.

12
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

Figura 11: utilizao de breakpoint.


Outra opo utilizar um probe point. Esta ferramenta atualiza o
watch window, da mesma maneira que o breakpoint, mas sem provocar
a pausa total da execuo, promovendo apenas uma breve parada,
suficiente
para
colher
as
informaes,
voltando

execuo
automaticamente. Fica a cargo do programador inferir qual dos dois
mtodos se adqua leitura de dados do hardware utilizado.
Para isto escolha a opo toggle probe point, na linha em que
deseja fazer a verificao. Note que a linha marcada com um indicador
azul. Agora adicione as variveis ao watch window.

Figura 12: breakpoint e Probe point.


O mtodo de probe point a forma mais avanada de interagir com o
DSP em tempo real, chamado Real Time Debug.
Voc deve ter cuidado ao utilizar esses recursos de parada, pois em
aplicaes como o controle de motores elas podem danificar o equipamento
ao causar paradas bruscas na execuo do programa.

13
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
Observao: quando uma varivel est inserida no watch window,
clicando sobre ela em refres,h com o boto direito do mouse, o seu valor
ser atualizado, independentemente da existncia de breakpoints ou
probepoints.

2.3.7 Wacth Dog Timer


O watch dog timer um contador que trabalha independentemente
da CPU e dispara um reset na CPU se no for zerado periodicamente.
literalmente um co de guarda. Esta unidade existe para inibir o programa
de possveis travamentos. Se o programa ficar trancado em algum ponto da
execuo, devido algum erro de execuo ou devido erro de
programao, passado algum tempo o watch dog timer ira resetar a CPU,
fazendo o programa recomear do incio da funo main.
Utilizando um clock externo de 30 MHz que internamente
multiplicado para 150MHz o perodo de contagem do watch dog timer
de aproximadamente 4,3 ms. Usaremos esta referncia para, de tempos em
tempos, cuidar para zerar este contador.
Em geral, quando se confia no programa escrito uma alternativa seria
simplesmente desabilit-lo e esquec-lo. Mas a Texas aconselha deix-lo
sempre ativo, pois em um projeto sempre se deve incluir o quanto for
possvel de segurana. Sendo assim, para zerar sua contagem deve-se
escrever um valor definido, uma chave, no registrador watch dog key
WDKEY, da seguinte forma: escreva o valor 0x55, para liberar o contador
para um reset na contagem; escreva o valor 0xAA, assim a contagem
resetada e reinicia de 0x0000.
Outro registrador de controle do WD o WDCR, onde se ajusta o
prescale do contador e possvel desabilitar a contagem, desabilitando o
Watch Dog.

14
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

Figura 13: registrador WDCR

2.3.8 Estrutura de um programa


A estrutura bsica de um programa consiste das seguintes partes.
1) Comando para adicionar um include especial:
#include "DSP281x_Device.h"
Este comando deve sempre aparecer no incio de um programa, para
incluir este arquivo essencial da TI que cria as estruturas para as unidades
do DSP.
2) Declarao das funes:
Entenda-se por funes as funes de inicializao e tambm as de
interrupes, assim como outra qualquer que seja criada.
Por exemplo, para criar uma funo do tipo void, com o nome de
Gpio_select, coloca-se a seguinte linha de cdigo, antes da funo main,
para nomear a funo:
void Gpio_select(void);
Por sua vez, aps o final da funo main, fora dela, fica a declarao
do contedo da funo:
Gpio_select(void){
...

15
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
...
}
3) Funo main
A funo main a funo principal, onde as funes declaradas so
utilizadas.
void main(void)
{
...
...
}
4) Cdigo das funes declaradas anteriormente:
Ex.: Gpio_Select: funo que ser utilizada para configurar as portas de
entrada/sada do DSP.
void Gpio_select(void)
{
EALLOW;
GpioMuxRegs.GPBMUX.all = 0x0000;
GpioMuxRegs.GPBDIR.all = 0x00FF;
EDIS;
}

2.3.9 Structs, Unions e Campos de Bit


Os arquivos da Texas Instruments utilizam estruturas (structs) e
unies (unions) em C para a definio e uso dos registradores do
microprocessador.

Estruturas
Uma estrutura um agrupamento de variveis de um dado tipo,
referenciadas por um nome comum. As variveis pertencentes uma
estrutura so denominadas campos da estrutura. A declarao de uma
estrutura segue o seguinte formato:
struct nome_da_estrutura
{
tipo campo1;
Tipo campo2;
}variveis_estrutura;
A estrutura de declarao do registrador da porta A, GPA Direction
Register, por exemplo, feita da seguinte forma:
struct GPADIR {

16
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

Uint16 GPIOA0;
Uint16 GPIOA1;
Uint16 GPIOA2;

};
O acesso a um campo da estrutura, que no caso um bit do
registrador, feito da seguinte maneira:
o

GpioDirRegs.GPADIR.GPIOA0 = 1;

Neste caso GpioDirRegs uma estrutura que contm outras


estruturas de registradores, alm da estrutura do registrador GPADIR. So
cadeias de estruturas, onde esto organizados os registradores comuns a
uma dada unidade interna do DSP.
Cada estrutura, por sua vez, possui um campo de bit, que cria o
acesso a um bit em especifico da estrutura a que est relacionado. Este
conhecimento de interesse prtico, para que se possa ter uma
ambientao dos arquivos disponibilizados pela Texas de maneira a realizar
a configurao dos registradores do DSP.

Unies
Uma unio um tipo especial de dado no qual as variveis declaradas
residem num mesmo endereo de memria. Em conjunto com as structs e
os campos de bit elas so utilizadas para que o programador possa
acessar o registrador bit a bit ou como uma palavra de 16bits, da seguinte
forma:
union GPADIR_REG {
Uint16
struct GPADIR_BITS
};

all;
bit;

Assim, o acesso ao registrador GPADIR pode ser feito das seguintes


maneiras:
o
o

GpioDirRegs.GPADIR.bit.GPIOA0 = 1;(valor binrio 1)


GpioDirRegs.GPADIR.all = 0xFF00;(valor hexadecimal FF00)

Lembrando que o prefixo 0x indica um valor hexadecimal.

17
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
3 Entradas e Sadas digitais
Todas as entradas e sadas digitais esto agrupadas em portas
chamadas GPIO general purpose input/output GPIO A, B, C, D, E, F,
G, que somam 56 pinos compartilhados entre diversas funes. Estas
entradas e sadas propiciam mais de uma funo em cada pino, que sero
vistas ao longo da apostila. Deve-se selecionar a funo do pino no incio do
programa.
Confira abaixo a relao entre os pinos/funes e a posio destes na
placa eZdsp.

Figura 14: figura: funes dos pinos de I/O.

Figura 15: posio dos pinos na placa eZdsp.

18
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

Figura 16: relao das funes com os pinos da placa eZdsp.

3.1 Exerccio 2: sadas digitais


O objetivo deste exerccio apresentar os registradores utilizados
para configurar as I/O digitais, para configurar a inicializao do DSP, entre
outras configuraes.
Neste exerccio vamos fazer um uma seqncia de oito LEDs
acenderem um depois do outro. Para isso iremos utilizar uma funo em C,
delay_loop, para gerar um atraso, servindo de base de tempo para o
acendimento sequencial dos LEDs. Na rotina main deve estar a chamada
das funes de inicializao do sistema, de configurao de i/o e de
chamada da funo delay.

3.1.1 Comeando o projeto


Crie um novo projeto e seu respectivo arquivo fonte source file, que
conter o cdigo principal do programa e adicione-o como arquivo do
programa.

19
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
3.1.2 Adicionando arquivos essenciais
Existem vrios arquivos que contm definies da Texas Instruments
para a operao do DSP e compilao do programa, as quais muito
dificilmente necessitam de ajustes do programador, assim, devemos
adicionar estes arquivos ao programa.
Um projeto precisa de diversas bibliotecas, alm de includes e
arquivos .c secundrios fornecidos pela TI, os quais contm estruturas
necessrias para tornar possvel o trabalho em alto nvel com os
registradores do DSP. Estes arquivos sero chamados pelo arquivo criado
por voc, NOME.c, e por outros dos arquivos source e sero necessrios
para a compilao do arquivo fonte principal.
Uma maneira organizada de se adicionar estes arquivos e bibliotecas
armazenar estes arquivos dentro do diretrio em que se encontra o seu
projeto. Tendo feito isto v em project>add files to project e escolha para
mostrar arquivos do tipo all files, ento selecione os arquivos com
extenso .c, .cmd e as bibliotecas, deixe os includes de fora, eles sero
adicionados depois, e clique em abrir. Voc ver estes arquivos aparecerem
automaticamente nas suas respectivas categorias na guia do projeto, do
lado esquerdo da tela.
Entre os principais arquivos TI que sero utilizados esto:

Global Variables:

DSP281x_GlobalVariableDefs.c

Este arquivo responsvel por definir variveis globais para todo o


mapa de memria do DSP, atravs de structures em linguagem C. Essas
estruturas constituem todos os registradores do DSP, sendo que para cada
registrador existe uma union, responsvel por propiciar um acesso fcil
aos seus 16 bits.

Linker Command File:

F2812_EzDSP_RAM_lnk.cmd

Arquivo de cabealho:

F2812_Headers_nonBIOS.cmd

Arquivo de bibliotecas:

rts2800_ml.lib

Agora v em project>build options, na aba compiler e no item


preprocessor em include search path(-i) indique o caminho dos arquivos
de include que sero necessrios, na forma C:\... . Este deve ser um
diretrio interno quele principal do projeto. Quando o projeto for compilado
pela primeira vez estes arquivos sero relacionados na guia do projeto.
Como procedimento padro, adiciona-se todos os includes existentes
para as unidades do DSP, pois no arquivo Global Variables existem defines
que esto ligados a todos estes includes. Com maior conhecimento, o
programador pode alterar o arquivo Global Variables para que este chame
apenas os includes das unidades que forem utilizadas no programa.

20
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
3.1.3 Macros EALLOW e EDIS
Sempre que se quer acessar registradores ditos protegidos
necessrio fazer o acesso atravs de macros EALLOW e EDIS:
EALLOW: habilita o acesso ao registrador.
EDIS: desabilita, fecha o acesso ao registrador.

3.1.4 Registradores de inicializao

Watchdog Timer Control


PLL Clock Register
High Speed Peripheral Clock Prescaler
Low Speed Peripheral Clock Prescaler
Peripheral Clock Control Register
System Control and Status Register

:
:
:
:
:
:

WDCR
PLLCR
HISPCP
LOSPCP
PCLKCR
SCSR

indicado construir uma funo separada do cdigo principal (main)


para realizar as configuraes iniciais. Construa uma funo chamada
InitSystem. Esta ser a funo responsvel por fazer as configuraes
iniciais. Aqui modificado o primeiro grupo de registradores apresentado
anteriormente, configurando o clock do processador entre outras funes.
Construa a funo InitSystem:

Desabilite o WatchDog no registrador (WDCR), isso deve ser feito


quando o DSP iniciado. Limpe o WD bit de flag. Aps a inicializao
o Watchdog deve ser habilitado, aproveite e faa isso na funo
delay, desta maneira garantimos que periodicamente ele ser
atendido, sendo sua contagem resetada para no provocar um reset
na CPU.
Sete o SCSR para gerar um RESET de um evento do Watchdog ( o
bit WDENINT).
Set o Clock PLL (PLLCR) multiplicando por 5, assumindo que
estamos usando um oscilador externo de 30MHz para que o DSP
trabalhe com 150 MHz.
Inicialize o High speed Peripheral Clock Pre-scaler (HISPCP) para
dividir por 2, o Low speed Peripheral Clock Pre-scaler (LOSPCP)
para dividir por 4. Este procedimento padro, serve de clock para
algumas unidades internas do DSP.

3.1.5 Registradores para configurar/acessar as entradas/sadas digitais


GPx Multiplex Register
GPx Direction Register
GPx Data Register

: GPxMUX
: GPxDIR
: GPxDAT

21
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
Neste caso o x a GPIO que estamos configurando (A, B,...).
Exemplo:
GPIO B inteira como digital I/O:
GpioMuxRegs.GPBMUX.all = 0x0000;
Pino 0, GPIO A, como entrada digital:
GpioMuxRegs.GPBMUX.bit.GPIOA0 = 0;
Construa a funo GpioSelect:

Sete todos os pinos multiplexados de GPIO (GPIOxMUX) da porta B


para usar as GPIO como digital I/O.
Sete a porta B, B15 B8 como entradas e B7 B0 como sadas. A
porta B, portanto, ser usada para sada do sinal para os LEDs, de B0
B7.

3.1.6 Funo delay


Escreva uma funo chamada DelayLoop, para produzir um atraso
para ser utilizado no acendimento alternado dos LEDs.
Um exemplo de uma funo delay est a seguir:
void DelayLoop (long tempo)
{
long i;
for (i=0;i<tempo; i++);
}

Aproveite esta funo do programa para ressetar o WD timer, de


modo que o WD no cause um reset no seu programa. Pense por que
este o melhor ponto para fazer isto. Este um bom ponto por que
o programa sempre via passar por ele, e a contagem do timer do WD
vai ser desabilitada de tempos em tempos.

3.1.7 Funo main


Na funo main insira a seguinte linha de cdigo para incluir este
arquivo da TI que adiciona smbolos criados pelo linker:
#include "DSP281x_Device.h"

D o comando para a chamada das funes de configurao iniciais e


de GPIO, de modo a configurar o DSP.

22
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

Voc utilizar a funo DelayLoop, passando um parmetro do tipo


long, correspondente ao tempo entre o acendimento dos LEDs.
Ser algo em torno de 2 000 000, variando com o tempo desejado e
o tamanho permitido pela varivel utilizada. Se for necessrio chame
a funo delay mais de uma vez uma seguida da outra para um
tempo maior.
Aqui tambm ficar o cdigo responsvel pela lgica de acendimento
dos LEDs. Pense em uma maneira de faz-los acender de modo
alternado, um aps o outro, e ao chegar ao ltimo LED acender de
trs para frente.
Uma maneira de faz-lo utilizar um vetor como LED[8], com
valores que tenham sempre um nico bit setado e dando um shift
neste bit a cada dado do vetor, ento utilizer o vetor para configurar
o registrador GPxDAT.
Voc ir usar o seguinte registrador para forar nvel alto ou baixo
nas sadas digitais conectadas aos LEDs:
GPB Data Register

: GPBDAT

Faa a lgica de acendimento dos LEDs dentro de um loop infinito do


tipo while(1), para que a sequencia volte do incio quando terminar.

No final de seu programa, uma boa medida incluir um comentrio


dizendo:
Fim do cdigo fonte

Isto ir facilitar alteraes futuras no cdigo e facilitar a leitura por


outros programadores.
Agora compile, grave e execute o programa. Confira se a rotina de
acendimento dos LEDs est correta.

3.2 Exerccio 3: entradas digitais


A maneira de fazer o acesso do programa s sadas digitais no difere
do modo de acesso s entradas digitais. O procedimento de, ao invs de
modificar o valor dos bits configurados como sadas digitais no registrador
GPxDAT (GPx Data Register), ler o valor dos bits que estejam configurados
como entradas digitais, atravs deste mesmo registrador.
Vamos incrementar o Exerccio 2, adicionando entradas digitais ao
programa, que iro controlar o acendimento dos LEDs atravs de chaves
lgicas. O objetivo deste exerccio copiar o status das 4 chaves digitais
para 4 LEDs disponveis.
Faremos modificaes nos registradores e
tambm no cdigo do exerccio 2. Utilize as portas B8 B15 como entradas
digitais.
Para tanto, crie um novo projeto e copie o arquivo fonte do Exerccio
2, adicionando as modificaes necessrias.

23
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
Modifique a lgica do cdigo na funo main, para que as chaves
controlem o acendimento dos LEDs.
Compile, grave e execute o programa.

24
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
4 Interrupes
Interrupes so eventos assncronos, gerados por uma unidade
externa ou interna. Uma interrupo faz o DSP parar a execuo atual do
programa e comear a rotina de servio da interrupo ocorrida. Depois da
execuo da interrupt service routine, o programa volta para o ponto
onde havia parado.
O DSP possui 16 linhas de interrupes, a maioria delas, como as
interrupes de contagem de timer, so mascarveis, ou seja, podem ser
desabilitadas, outras no (como o reset da CPU, por exemplo). Cada uma
das 16 linhas de interrupo conectada a uma tabela de vetores de
interrupo de 32 bit cada interrupo, que armazenam o endereo que
ponteiro para a rotina de servio relativa a cada interrupo.
Como interrupes de reset, existem o pino de reset externo e o
overflow do watchdog timer.
O DSP possui no total 96 fontes de interrupo, enquanto h somente
16 vetores para rotinas de interrupo. Para lidar com esse fato existe uma
unidade chamada PIE - peripheral interrupt expansion, destinada a agrupar
certas interrupes em uma mesma linha de interrupo, criando uma
expanso para cada uma dessas linhas. Utilizando esta unidade o
programador no precisa se preocupar em dividir uma rotina de interrupo
para lidar com duas fontes de interrupo diferentes.

4.1 Mscaras de interrupo


O registrador IFR - interrupt flag register guarda o status de um
determinado vetor de interrupo, quando um bit est em nvel alto
significa que uma interrupo est pendente.

25
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

Fiigura 16: IFR


O registrador IER - interrupt enable register uma mscara que
libera (nvel alto) ou desabilita um determinado vetor de interrupo.

Figura 17: IER

26
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
Existe ainda mais um nvel de mscara registrador, o Interrupt
Global Mask Bit, o bit 0 de um determinado registrador, referenciado como
INTM, que habilita ou desabilita globalmente todas as interrupes. Abaixo
est o comando para tanto, atravs da utilizao de estruturas:
Habilita:
Desabilita:

INTM = 0;
INTM = 1;

4.2 Configurando o Peripheral Interrupt Expansion (PIE)


Cada interrupo est alocada em um determinado grupo, sendo
referenciada por um dado ndice. Podemos visualizar as principais
interrupes e sua alocao nos grupos na tabela da figura 18.

Figura 18: grupos de interrupo da PIE.


Alm dos registradores de mascaramento vistos anteriormente, na
unidade PIE existem registradores que configuram cada interrupo de um
grupo.

27
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

Figura 19: PIE


O registrador PIEIRF configura as interrupes de um determinado
grupo de 1 a 12. Desta forma, cruzando a configurao do registrador IER
com a do registrador PIEIRF pode-se habilitar/desabilitar uma determinada
interrupo.
Enquanto isso, o registrador PIEIFR guarda o status de eventos de
uma interrupo.

Figura 20: registradores do PIE.


Aps tratar de uma interrupo, dentro da rotina de servio, preciso
confirmar que esta interrupo foi tratada, de maneira que j possvel
receber mais interrupes. Isto feito atravs do registrador PIEACK
interrupt acknowledgement register, que responsvel por informar que
um dado grupo est livre de eventos pendentes.

28
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
4.3 Interrupes de Timer
Dentre as interrupes existentes no DSP esto as interrupes de
timer. O DSP possui vrios mdulos contadores (timers): Timer de CPU e
Timer de Event Manager, cada um com sua finalidade, que geram
interrupes ao passo que a contagem atinge um valor pr-estabelecido,
proporcionando a realizao de uma tarefa especfica.

4.4 Exerccio 4
O objetivo deste exerccio repetir o resultado do exerccio 2, atravs
da utilizao de um Timer de CPU do DSP ao invs de usar um delay de
software, que no muito preciso e no usa de todo o potencial disponvel
do DSP.
Para ligar sequencialmente os LEDs, utilizaremos a interrupo do
Timer 0, um dos trs timers de CPU. Dentre estes, o Timer 0 utilizado
para aplicaes gerais, enquanto que os Timers 1 e 2 para aplicaes
mais especficas, chamadas em tempo real. Sempre que se necessita de
uma aplicao no-especfica utiliza-se o Timer 0, ele o nico entre os
timer de CPU que passa pelo gerenciamento da unidade PIE. Encontre-o na
PIE table, anteriormente mostrada.

4.4.1 Configuraes do Exerccio 4


Para comear o exerccio, crie um novo projeto, um novo arquivo
fonte e repita o item Adicionando arquivos essenciais. Copie do Exerccio 2
as funes InitSystem e GpioSelect, alm do loop while(1) com a rotina dos
LEDs, para o arquivo fonte principal.
Para utilizarmos a PIE table e as instrues de interrupo, vamos
incluir no programa mais alguns arquivos fonte necessrios para tanto, que
contm estruturas para trabalho em alto nvel com as unidades do DSP.
Lembre-se de colocar estes arquivos no diretrio interno ao do projeto, da
mesma forma que no programa inicial.
Agora, adicione ao seu projeto os arquivos fonte abaixo:
DSP281x_PieCtrl.c
DSP281x_PieVect.c
DSP281x_DefaultIsr.c
DSP281x_CpuTimers.c
No incio do programa, junto s outras declaraes de funes,
adicione a declarao da funo que ser chamada no momento da
interrupo do Timer, que ser a nossa interrupt service routine. O
formato o seguinte:
interrupt void NOME_DA_ROTINA(void);

29
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

Dentro da funo main, aps a funo Gpio_select, adicione as


seguintes chamadas de funes:
InitPieCtrl();
InitPieVectTable();
InitPieCtrl
Initialize PIE control. Esta mais uma das funes providas pela TI
e est definida no arquivo DSP281x_PieCtrl.c. Ela inicializa a unidade PIE,
que gerencia todos os tipos de interrupes, zerando interrupes
pendentes.
InitPieVectTable
Esta funo anloga anterior. Configura a memria da unidade
PIE para um estado inicial. Usa uma tabela pr-definida PieVectTableInit()
definida no arquivo DSP281x_PieVect.c, ligando a PIE Table ao
Global_Variables. Nosso trabalho fazer a sua chamada em todos os
programas que for necessrio.
Vamos, ento, configurar aquela interrupo que do nosso interesse
no momento, CPU-Timer0 Interrupt Service. Devemos, ento, passar o
endereo da funo que ser a rotina de servio de interrupo para o
transbordo do Timer 0. Para isso usaremos o comando a seguir, que
relaciona a funo declarada por ns para cuidar do momento da
interrupo com aTINT0 da PIE Table, que o como o programa conhece
a interrupo de Timer 0. Isto feito com uma estrutura em .C contida
nos arquivos adicionados como mostrado abaixo
EALLOW;
PieVectTable.TINT0 = &NOME_DA_ROTINA;
EDIS;
Adicione o cdigo acima dentro da funo main, depois da linha de
cdigo InitPieVectTable();.
EALLOW e EDIS tambm precisam ser usadas no acesso a PIE
Table. Logo depois, ainda na funo main, adicione a chamada funo
InitCpuTimers. Novamente uma funo pr-definida, contida em
DSP281x_CpuTimers.c.
InitCpuTimers();
Agora temos que passar ao Timer 0 os parmetros de
funcionamento: o perodo da contagem, a velocidade interna da CPU e qual
a interrupo que estamos utilizando. Existe uma funo em C criada pela
TI para isso:
ConfigCpuTimer(&CpuTimer0, VEL_INTERNA, PERODO);

30
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
O perodo est em microssegundos e a velocidade do clock em MHz.
Adicione essa linha de cdigo na funo main, logo aps InitCpuTimers();.

4.4.2 Mscaras de Interrupo no Exerccio 4


Timer 0 est na lista das mascarveis. Precisamos ento
configurar os registradores que vo liberar a sua operao.
O Timer 0 est conectado ao PIE de acordo com a tabela mostrada
no incio da seo 4. Para liber-lo temos que utilizar o registrador
PIEIERx, PIE Interrupt Enable Register, mostrado na figura anterior.
Temos que setar o bit 7, j que o TIMER 0 est conectado ao grupo INT1,
interrupo 7 (TINT 0).
Portanto adicione na funo main a linha a seguir:
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
Agora configurar o registrador IER. Dentre as 16 linhas de vetores de
interrupo, a interrupo do Timer 0 est no grupo INT1. Habilite o grupo
INT1 de interrupes atravs do comando:
IER = 1;
Habilite a mscara global de interrupes, utilizando as seguintes
macros:
EINT: Global Interrupt Enable;
ERTM: Global Real Time Interrupt.
Portanto, adicione ao programa:
EINT;
ERTM;
Finalmente, vamos iniciar a contagem do Timer 0. O registrador
responsvel o TCR, Timer Control Register. Devemos forar nvel baixo
no bit 4. Veja:

31
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

Figura 21: Registrador TCR.

Seja:
CpuTimer0Regs.TCR.bit.TSS = 0;

4.4.3 A rotina de servio de interrupo


Imediatamente aps a funo main fica o corpo das funes
chamadas no programa, exceto as contidas em defines da TI, por isso, a
ficar tambm a interrupt service routine. Retire a funo delay_loop
O formato do corpo da ISR mostrado abaixo:
Interrupt void NOME_DA_ROTINA (void)
{
/*instrues*/
}
O nome da rotina dever ser o mesmo declarado no incio do cdigo
fonte. Dentro dela temos que colocar instrues que sero realizadas a cada
perodo de tempo estabelecido anteriormente para o timer. Pensemos,
ento, que esse perodo limitado e pode ser insuficiente para a quantidade
de tempo que vamos querer o LED aceso. Ento, vamos incrementar um
contador, j existente, que serve justamente para isso: saber quantas
vezes a rotina de servio foi chamada, portanto, saberemos quando passar
a acender o LED seguinte.

32
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
o interrupt counter, que iremos incrementar dentro da ISR:
CpuTimer0.InterruptCount++;
Outra tarefa garantir que uma nova interrupo acontea, atravs
do registrador PIEACK, PIE Acknowledge, onde estamos habilitando
novamente a interrupo de grupo onde est inserida a do Timer 0,
informando ao PIE que uma nova interrupo j pode ocorrer. Veja-o na
figura de registradores do PIE. Faremos isso com a instruo a seguir:
PieCtrlRegs.PIEACK.all = 0x0001;
Esta deve ser a ltima instruo dentro da funo.

4.4.4 Modificaes no Exerccio 2


Acendimento dos LEDs:
Dentro da funo main, no loop while(1) temos que adaptar a
rotina de acendimento dos LEDs para a nova situao. Utilize a mesma
lgica de acendimento dos LEDs do exerccio 2, dentro de loop infinito
while(1). Contudo, agora devemos aguardar que a contagem do
CpuTimer0.InterruptCount chegue a um valor pr-definido, para ento
trocar o estado dos LEDs.

4.4.5 Configurando o Watch Dog


Lembre-se sempre do Watch Dog. Uma maneira de mant-lo sob
controle colocar dentro da ISR as instrues que cuidam do WD Timer, j
temo-las prontas do Exerccio 2.
Certifique-se que a lgica dentro da funo main garante o mesmo
funcionamento do Exerccio 2, agora utilizando a contagem do Timer 0.
Agora, compile, grave o programa na placa e teste. Verifique se o
comportamento o mesmo do Exerccio 2.

33
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
5 Event Manager
O Event Manager EV uma unidade interna do DSP construda
para lidar com diferentes tipos de processos que utilizem base de tempo.
Nosso DSP possui dois EVs: EVA e EVB. Cada um deles possui dois Timers,
independentes dos outros trs Timers da CPU vistos anteriormente, como o
Timer 0.
Portanto, quando usamos um Timer, devemos especificar de qual
estamos falando. O EV Timer um contador de 16 bits. A grande diferena
do EV Timer que ele capaz de gerar sinais externos, atravs de pulsos
digitais, o que proporciona o trabalho com modulao PWM. Os DPSs da
srie C28x so capazes de gerar at 16 sinais PWM.

5.1 General Purpose Timer


Cada Event Manager possui dois GP Timers que so unidades
contadoras de 16-bit cada, sendo que cada um possui unidades PWM e de
comparao de transbordo de contagem.
Cada unidade de contagem de um GP timer (TxCNT) comparada
com dois outros registradores TxCMPR Timer compare register e e TxPR
Timer period register, onde o x indica com qual timer se est tratando,
sendo que TxPR guarda o perodo de contagem, de maneira que o TxCNT
encerra a contagem e comea de 0 quando atinge este valor. Por sua vez,
o registrador TxCMPR guarda um valor intermedirio e atravs dele que
pode-se ajustar o ciclo til da onda de PWM gerada, por exemplo, pois a
sada pode ser comutada a cada vez que TxCNT atinge o valor de TxCMPR e
de TxPR. Outro registrador utilizado o TxCON Timer x controller, que
define as configuraes de um determinado timer.

Figura 22: TCR - lower byte

34
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

Figura 23: TCR higher byte


Sero mostrados os registradores necessrios para a configurao do
timers do Event Manager A, de maneira simtrica, existem registradores
para o EVB.

Figura 24: GT Timer Registers


Abaixo, est a relao de configurao dos bits do registrador
GPTCONA, mostrado em mais detalhes, no exerccio 5 ser visto como
configur-lo.

35
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

Figura 25: GPTCONA lower byte

Figura 26: GPTCONA higher byte

5.2 Exerccio 5
Este experimento busca familiariz-lo com esta que uma das
unidades mais importantes do DSP, o Event Manager. O exerccio ir utilizar
o speaker da placa de testes para tocar oito notas musicais, que sero oito
ondas quadradas de frequncias diferentes, atravs da modulao PWM.
Uma nota musical, na verdade composta de ondas senoidais, contudo,
podemos aproximar de forma satisfatria sua reproduo por uma onda
quadrada com a sua freqncia fundamental.
Usaremos o exerccio 4 como base para este. Vamos conhecer alguns
novos registradores necessrios, principalmente, para a configurao do
Event Manager:

36
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP

General Purpose Timer Control A


Timer 1 Control Register
Timer 1 Period Register
Timer 1 Compare Register
Interrupt Flag Register
Interrupt Enable Register

:
:
:
:
:
:

GPTCONA
T1CON
T1PR
T1CMPR
IFR
IER

Estes registradores sero configurados dentro da funo main.


No exerccio 4, configuramos o Timer 0 para um perodo de
contagem de 50ms. Vamos continuar utilizando-o, agora para criar uma
funo que seja chamada periodicamente e que servir para mudar
periodicamente a freqncia do PWM e tocar as oito notas sequencialmente.
Enquanto isso o Timer do Event Manager ser responsvel por gerar o sinal
PWM.
Agora, primeiramente, crie um novo projeto e repita o item Adicionando
Arquivos Essenciais. Inclua no arquivo fonte principal do seu projeto o
cdigo do exerccio 4, pois iremos modific-lo.
Agora, adicione os seguintes arquivos ao projeto:
DSP281x_CpuTimers.c
DSP281x_PieCtrl.c
DSP281x_PieVect.c
DSP281x_DefaultIsr.c
Retire do cdigo as partes que no sero mais usadas, como a
definio do vetor LED[8].

5.2.1 Configuraes do Exerccio 5


Vamos fazer as modificaes necessria no cdigo para controlar o
T1PWM, PWM do timer 1 e gerar as oito frequncias diferentes.
1) Na funo Gpio_Select, configure o pino adequado no GPIOA como
sada do T1PWM vide tabela de GPIO.
2) Na funo InitSystem habilite o clock para o event manager A, EVA.
3) Na funo main precisamos configurar o Event Manager Timer 1. Isto
feito atravs dos registradores GPTCONA, T1CON, T1PR e T1CMPR.
4) Em GPTCONA, configure o PWM para active low atravs do bit TCMPOE.
5) Em TICON Timer 1 Controller, devemos definir a cara do nosso sinal.
Vamos utilizar a configurao indicada pela Texas: counting up mode
(contagem progressiva), internal clock (fonte de clock interna), pre

37
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
scale de 128, enable compare operation (habilita a comparao) e
reload on underflow(ao trmino da contagem volta ao comeo).

5.2.2 Configurando o Timer


T1PR guarda o perodo de contagem e determina, portanto, a
frequncia do PWM. A determinao deste perodo de acordo com a
relao abaixo:
T1_PWM_Freq = 150MHz / (HISPCP * TPS * T1PR)
Nessa relao HISCPS (pr scale do clock de CPU) est configurado
por default como 2.
A freqncia do PWM deve mudar periodicamente, gerando as notas
musicais, como segue:
C
D
E
F
G
A
B
C (8+)

:
:
:
:
:
:
:
:

264
297
330
352
396
440
495
528

Hz
Hz
Hz
Hz
Hz
Hz
Hz
Hz

Assim, vai utilizar o Timer 1 para gerar o PWM e o Timer 0 para gerar
a interrupo que vai alternar entre as freqncias. Cada vez que o Timer 0
estourar vamos alterar o valor de T1PR.
Esta freqncia ajustada atravs do registrador T1PWM, como
segue:
T1_PWM_Freq = 150MHz / (HISPCP * TPS * T1PR)
Crie um vetor frequencia[8] e armazene os valores calculados para
T1PR para cada freqncia neste vetor.
7) T1CMPR o tempo utilizado para fazer o duty cicle da onda. No nosso
caso vamos configur-lo para a metade do T1PR, j que queremos uma
onda quadrada.
8) Utilize este ponto, onde T1PR configurado, para reabilitar o Watch Dog
Timer.
Sendo assim, na funo main, adicione o seguinte cdigo para
trocar o valor de T1PR e T1CMPR periodicamente. Voc pode alter-lo da
maneira que julgar necessria.
while(1)
{
if ((CpuTimer0.InterruptCount%4)==0)
{

38
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Minicurso de DSP
EALLOW;
SysCtrlRegs.WDKEY = 0xAA;
EDIS;
}
if ((CpuTimer0.InterruptCount - time_stamp)>10)
{
time_stamp = CpuTimer0.InterruptCount;
if(i<14) EvaRegs.T1PR = frequency[i++];
EvaRegs.T1CMPR = EvaRegs.T1PR/4;
EvaRegs.T1CON.bit.TENABLE = 1;
if(i>=14) i=0;
}
}

Agora compile, grave o programa e inicie a execuo. Voc pode


visualizar o sinal PWM de sada em um osciloscpio para se certificar que as
freqncias esto corretas.

39
Grupo PET Engenharia Eltrica
Universidade do Estado de Santa Catarina UDESC

Você também pode gostar