Вы находитесь на странице: 1из 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: Arquivo de cabealho: Arquivo de bibliotecas: F2812_EzDSP_RAM_lnk.cmd F2812_Headers_nonBIOS.cmd 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

Вам также может понравиться