Escola Polit
ecnica
Departamento de Engenharia El etrica
ENGG54 - Laborat orio Integrado III-A
12 de Dezembro de 2016
rio
Suma i
Sum
ario
1 Introduc
ao 1
2 Kit do DSP 2
2.1 Instalacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3 Dificuldades Encontradas 4
4 Audio 5
4.2 Configuracao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5 Ethernet 10
5.1 Configuracoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5.2 Transmissao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.3 Recepcao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6 LCD 14
6.1 Funcionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.2 Funcoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.3 Anexo A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
7 GPIO 18
7.4 Funcoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
7.5 Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
8 DMA 30
8.1 Configuracao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
9 Contribuic
ao dos Integrantes 36
10 Refer
encias 37
Introduc
ao 1
1 Introduc
ao
O manual foi elaborado para facilitar a utilizacao das bibliotecas advindas do uso do
eZdsp, e permitir a rapida integracao e desenvolvimento do usuario.
Kit do DSP 2
2 Kit do DSP
2.1 Instala
c
ao
Quando roda o programa aparece uma opcao de customizacao, onde pode-se escolher os
componentes do modelo do equipamento. Se optar por instalar todos os modelos, o processo
ira demorar para terminar e tera muitos componentes que nao vao ser utilizados. Dessa forma,
e melhor usar a opcao de customizar, instalando apenas os componentes referentes ao seu
equipamento.
2.2 Intru
c
ao de Configura
cao
5. Clique em Save
2. Clique em File->Import;
3. Expanda a pasta CCS e escolha Existing CCS/CCE Eclipse Project clique em Next;
4. Clique em Browse, escolha o diretorio onde o projeto do programa esta salvo (para
acessar os exemplos padrao da placa TMS320C5502 eZdsp siga o caminho: C: ->
Arquivos de Programas (x86) -> Texas Instruments -> ccsv4 -> emulation ->
boards -> ezdsp5502 v1 -> tests -> Escolha a pasta do seu exemplo
Kit do DSP 3
5. Click em OK e Finish;
6. Clique Project-> Build Active Project, espere aparecer na aba console a mensagem
Build Complete para o exemplo escolhido;
https://youtu.be/sdbl9MiRd5k
Dificuldades Encontradas 4
3 Dificuldades Encontradas
3.1 Instala
c
ao da IDE e Drivers
A tentativa de usar essa versao foi bastante incomoda, pois ela nao possuia os exemplos
na pasta como explicado na versao 4. Entao copiamos a pasta dos exemplos da versao 4 para
a 6 e mesmo assim o programa nao estava rodando.
Por esse motivo optamos por usar a versao 4 do CCS disponvel no CD do kit. Para
isso, precisamos utilizar um computador com sistema operacional Windows 7.
4 Audio
4.1 Descri
c
ao Detalhada
Abaixo, exemplificamos algumas funcoes basicas utilizadas num programa que da como
sada um tom sonoro na sada stereo analogica.
4.2 Configura
c
ao
No datasheet do codec e possvel encontrar uma tabela com todos os registradores. Nao
a anexaremos completamente neste arquivo devido ao volume de informacoes que ela contem.
Segue abaixo uma tabela resumida de alguns dos registradores de maior interesse:
Audio 7
Utilizando principalmente a funcao rset, varias linhas sao utilizadas em nosso codigo-
exemplo para configurar o codec. Alguns exemplos abaixo:
// S e l e c i o n a banco de r e g i s t r a d o r 0
AIC3204 rset ( 0 , 0 ) ;
// Reseta o codec
AIC3204 rset ( 1 , 1 ) ;
// S e l e c i o n a pagina 1
AIC3204 rset ( 0 , 1 ) ;
// Enable nos b l o c o s a n a l o g i c o s
AIC3204 rset ( 2 , 1 ) ;
Em nosso codigo, temos uma senoide de exemplo que e passada para o audio codec
e posteriormente para a sada analogica, devido a configuracao previa do codec, da seguinte
forma:
1. Configuramos o I2C para o modo MCBSP (os argumentos sao constantes pre-definidas):
EZDSP5502 I2CGPIO configLine ( BSP SEL1 , OUT) ;
EZDSP5502 I2CGPIO writeLine ( BSP SEL1 , LOW) ;
2. Entao utiliza-se a funcao abaixo dentro de uma iteracao pra escrever as amostras no
MCBSP:
EZDSP5502 MCBSP write ( s i n e t a b l e [ sample ] ) ;
Audio 9
Em resumo, para fazer o som funcionar, deve-se configurar o AIC (chip de interface
analogica) que ira fazer o trabalho de decodificacao do audio. O AIC e configurado atraves de
uma funcao que modifica os valores de seus registradores, que contem configuracoes de clock,
ADC, DAC entre outras.
Deve-se setar tambem o modo de utilizacao do Multi-Channel Buffered Serial Port, que
ira fazer a comunicacao com o periferico de audio. No caso, mandando as samples do arquivo
de audio para o AIC.
Ethernet 10
5 Ethernet
Para demonstrar a utilizacao das funcoes importantes para seu funcionamento, extrai-
remos secoes de codigo que exemplificam as funcoes descritas.
Controlador ethernet PHY e MAC integrado em acordo com o padrao IEEE 802.3/802.3u
Maior armazenamento interno, com 12K Bytes para RX FIFO e 6K Bytes para TX FIFO
5.1 Configura
coes
Para estabelecer uma comunicacao Ethernet e preciso, antes de qualquer coisa, configurar
o controlador por meio de seus registradores (na folha de dados do controlador e possvel
encontrar a descricao de cada um dos registradores).
A biblioteca fornecida pelo fabricante implementa funcoes para leitura e escrita destes
registradores:
void e n e t r e g w r i t e ( Uint16 regnum , Uint16 r e g d a t a ) ;
Uint16 e n e t r e g r e a d ( Uint16 regnum ) ;
2. Entao, e preciso aguardar que algum outro dispositivo, conectado `a outra ponta do cabo,
responda. Ou seja, aguardar que o link seja estabelecido:
while ( 1 ) {
i f ( ( e n e t r e g r e a d ( 0 xe6 ) & 0 x0004 ) != 0 ) {
break ;
}
}
3. Por fim, configura-se o controlador para que seja possvel a transmissao de pacotes:
e n e t r e g w r i t e ( 0 x70 , 0 x0000 ) ; // D e s a b i l i t a t r a n s m i s s a o
e n e t r e g w r i t e ( 0 x70 , 0 x0010 ) ; // Limpa a f i l a de t r a n s m i s s a o
Ethernet 12
Apos a realizacao da etapa de configuracao o controlador esta pronto para que se efetue
a transmissao e recepcao de pacotes.
5.2 Transmiss
ao
Para transmitir um pacote de bytes utiliza-se a funcao enet txpacket() recebe como
parametros um ponteiro para o bloco de bytes que se deseja transmitir e o numero de bytes
que se deseja enviar.
5.3 Recep
cao
Uma vez verificado a existencia de pacotes prontos para serem lidos, utilize-se a funcao
enet rxpacket() para ler os dados. Esta funcao recebe como parametro o ponteiro para a
area de memoria onde os dados recebidos serao salvos e retorna o tamanho do pacote recebido.
6 LCD
Alem disso, pixels podem ser transladados tanto verticalmente quanto horizontalmente
utilizando-se funcoes de scroll.
6.1 Funcionamento
Para utilizar o OSD9616, o chip deve ser ligado e iniciado corretamente atraves
da funcao osd9616 init(). Apos esta inicializacao, comandos podem ser utilizados tanto
individualmente, usando a funcao 9616 send() quanto enviados sequencialmente com o
9616 multiSend().
Os principais comandos estao descritos na tabela 3 do anexo A (secao 6.3). Para a lista
completa de comandos, vide datasheet do SSD1306.
6.2 Fun
coes
Argumentos:
void
Envia o comando / informacao especificado(a) por data via I2C. Vide a tabela 3 no
anexo A (secao 6.3) para os valores conhecidos para os comandos.
LCD 15
Argumentos:
data 2 bytes que representam o comando/dado a ser enviado. Caso seja um dado, os
bits altos representarao o pixel a ser aceso.
Envia len comandos / dados atraves do I2C. O valor maximo de len e 10.
Argumentos:
len N
umero de Uint16 a serem enviados.
Cada letra e representada por 4 colunas de 8 pixels. Cada uma destas colunas e
representada, de forma inversa, pelos bytes passados como parametro. Cada letra gerada e
seguida por uma coluna de pixels em branco para separar uma letra da proxima. O bit mais
significativo representa o pixel mais baixo, o qual sempre e zero para gerar um espaco de 1
pixel entre a letra e a linha abaixo.
Argumentos:
c1, c2, c3, c4 - Bytes que representam qual pixel da coluna sera aceso.
LCD 16
// L e t r a E
p r i n t L e t t e r ( 0 x41 , 0 x49 , 0 x49 , 0 x7F ) ;
// L e t r a T
p r i n t L e t t e r ( 0 x01 , 0 x7F , 0 x01 , 0 x01 ) ;
Esta funcao foi desenvolvida visando facilitar o envio de caracteres. A string a ser
enviada nao deve ser terminada por \0.
Argumentos:
n - N
umero de caracteres de s.
LCD 17
6.3 Anexo A
7 GPIO
O pino GPIO7 determina, durante a reinicializacao, a funcao dos pinos SP0 e SP2 (vide
figura 4). Estes sao definidos para GPIO3 e GPIO5, respectivamente, e configurados como
entrada apos o reset se GPIO7 esta em nvel logico baixo. Se GPIO7 e nvel logico alto durante
a reinicializacao, os pinos SP0 e SP2 sao definidos para CLKX2 e FSX2, respectivamente.
2 pinos de controle HPI (HC0, HC1) podem ser individualmente habilitados como PGPIO
atraves dos multiplexadores Parallel/Host Port Mux quando o pino GPIO6 e colocado
em nvel logico baixo durante a reinicializacao.
Para usar um pino PGPIO como uma sada, os seus bits de habilitacao e direcao nos
registradores correspondentes devem ser definidos como 1. O valor do pino e entao controlado
atraves do seu bit no registro de dados.
Por outro lado, para a utilizacao de um pino PGPIO como uma entrada, o seu bit
correspondente deve ser 0 tanto no registrador de habilitacao quanto no de direcao. O estado
do pino pode, em seguida ser lidos a partir do seu bit no registo de dados.
IO15EN, IO14EN,
IO13EN, IO12EN,
IO11EN, IO10EN, IO9EN,
PGPIOEN0
IO8EN, IO7EN, IO6EN,
IO5EN, IO4EN, IO3EN,
IO2EN, IO1EN, IO0EN
PGPIO15, PGPIO14,
IO15DIR, IO14DIR,
PGPIO13, PGPIO12,
IO13DIR, IO12DIR,
PGPIO11, PGPIO10,
IO11DIR, IO10DIR,
PGPIODIR0 PGPIO9, PGPIO8,
IO9DIR, IO8DIR, IO7DIR, Grupo 1
PGPIO7, PGPIO6,
IO6DIR, IO5DIR, IO4DIR,
PGPIO5, PGPIO4,
IO3DIR, IO2DIR, IO1DIR
PGPIO3, PGPIO2,
PGPIO1, PGPIO0
IO15DAT, IO14DAT,
IO13DAT, IO12DAT,
IO11DAT, IO10DAT,
IO9DAT, IO8DAT,
PGPIODAT0
IO7DAT, IO6DAT,
IO5DAT, IO4DAT,
IO3DAT, IO2DAT,
IO1DAT, IO0DAT
IO31EN, IO30EN, PGPIO31, PGPIO30,
IO29EN, IO28EN, PGPIO29, PGPIO28,
IO27EN, IO26EN, PGPIO27, PGPIO26,
IO25EN, IO24EN, PGPIO25, PGPIO24,
PGPIOEN1 Grupo 2
IO23EN, IO22EN, PGPIO23, PGPIO22,
IO21EN, IO20EN, PGPIO21, PGPIO20,
IO19EN, IO18EN, PGPIO19, PGPIO18,
IO17EN, IO16EN PGPIO17, PGPIO16
IO45EN, IO44EN,
IO43EN, IO42EN,
IO41EN, IO40EN,
PGPIOEN2 IO39EN, IO38EN,
IO37EN, IO36EN,
IO35EN, IO34EN,
IO33EN, IO32EN
IO45DIR, IO44DIR,
PGPIO45, PGPIO44,
IO43DIR, IO42DIR,
PGPIO43, PGPIO42,
IO41DIR, IO40DIR,
PGPIO41, PGPIO40,
PGPIODIR2 IO39DIR, IO38DIR,
PGPIO39, PGPIO38, Grupo 3
IO37DIR, IO36DIR,
PGPIO37, PGPIO36,
IO35DIR, IO34DIR,
PGPIO35, PGPIO34,
IO33DIR, IO32DIR
PGPIO33, PGPIO32
IO45DAT, IO44DAT,
IO43DAT, IO42DAT,
IO41DAT, IO40DAT,
PGPIODAT2 IO39DAT, IO38DAT,
IO37DAT, IO36DAT,
IO35DAT, IO34DAT,
IO33DAT, IO32DAT
GPIO Config:
Estrutura usada para configurar os pinos GPIO nao paralelos.
Membros:
Uint16 IOE
Uint16 IODIR
Descric
ao:
Voce cria e inicializa essa estrutura e, em seguida, passa o endereco para a funcao
GPIO config(). Voce pode usar valores literais ou as macros GPIO REG RMK para criar os
valores de membro de estrutura.
GPIO ConfigAll:
Estrutura de configuracao para ambos os pinos GPIO paralelos e nao paralelos.
Membros:
Uint16 IOEN
Uint16 IODIR
Uint16 PGPIOEN0
Uint16 PGPIODIR0
Uint16 PGPIOEN1
Uint16 PGPIODIR1
Uint16 PGPIOEN2
Uint16 PGPIODIR2
Descric
ao:
Voce cria e inicializa essa estrutura e, em seguida, passa o endereco para a funcao
GPIO ConfigAll(). Voce pode usar valores literais ou as macros GPIO REG RMK para
criar os valores de membro de estrutura.
GPIO 24
7.4 Fun
coes
Retorno
void
Exemplo:
GPIO close ( hGpio ) ;
allocMask - pinos GPIO para reservar. Para a lista de pinos, vide tabela 2.
flags - flags atualmente nao definidos.
Retorno
GPIO Handle - manipulador do pino GPIO
Observaco
es:
Antes de um pino GPIO poder ser usado, ele deve ser reservado para uso pelo
aplicativo. Uma vez reservado, nao pode ser novamente solicitado, ate que fechado por
GPIO close()
Se a funcao falhar, uma constante simbolica da biblioteca suporte do chip, INV (-1) e
retornada. Quando recebe um n umero de canal / porta especfica, a funcao open verifica
flags globais para determinar a sua disponibilidade. Se a porta / canal estiver disponvel,
entao ele retorna um ponteiro para uma estrutura de manipulacao predefinida para esse
pino (GPIO Handle).
GPIO open() pode ser chamado para abrir um ou mais pinos de um mesmo grupo
de cada vez. Chamar o allocMask de pinos de diferentes grupos ira produzir resultados
desconhecidos.
Alem disso, se GPIO open() e chamado para um ou mais pinos em um grupo par-
ticular, outros pinos do mesmo grupo nao podem ser reservados a menos que se faca a
correspondente chamada a GPIO close().
Exemplo:
GPIO Handle hGPIO ;
hGPIO = GPIO open ( GPIO PGPIO PIN1 , 0 ) ;
GPIO 25
Retorno
void
Exemplo:
// E s t r u t u r a de c o n f i g u r a c a o
GPIO Config myConfig = {GPIO PIN1 OUTPUT | GPIO PIN3 OUTPUT}
// A b r i r handle GPIO
GPIO Handle hGpio ;
hGpio = GPIO open ( GPIO GPIO PIN1 | GPIO GPIO PIN3 , 0 ) ;
// A p l i c a r c o n f i g u r a c a o ao handle
GPIO config ( hGpio , \&myConfig ) ;
Retorno:
void
Exemplo:
// E s t r u t u r a de c o n f i g u r a c a o
GPIO ConfigAll gCfg = {GPIO PIN1 OUTPUT | GPIO PIN3 OUTPUT ,
0 , 0 , 0 , 0 , 0 , 0};
G P I O c o n f i g A l l (&gCfg ) ;
Retorno
void
Exemplo:
/ s e t a o pino pgpio1 como uma e n t r a d a /
GPIO handle hGpio = GPIO open ( GPIO PGPIO PIN1 |
GPIO PGPIO PIN15 ) ;
GPIO pinDirection ( hGPio , GPIO PGPIO PIN1 ,
GPIO PGPIO PIN1 INPUT ) ;
Retorno
void
Exemplo:
/ d e s a b i l i t a p ino pgpio1 /
GPIO handle hGpio = GPIO open ( GPIO PGPIO PIN1 |
GPIO PGPIO PIN15 ) ;
GPIO pinDisable ( hGpio , GPIO PGPIO PIN1 ) ;
Retorno
void
Exemplo:
GPIO pinEnable ( hGpio , GPIO GPIO PIN1 ) ;
Retorno
ind - Valor lido no pino GPIO (1 ou 0)
Exemplo:
// l e o v a l o r do pino IO1
int v a l = GPIO pinRead ( hGPio , GPIO GPIO PIN1 ) ;
void GPIO pinWriteAll (GPIO Handle hGpio, Uint32 pinMask, Uint16 val):
Grava um valor para um ou mais pinos GPIO.
Argumentos:
hGpio - handle GPIO
pinMask - mascara dos pinos selecionados
Retorno
ind - Valor (0 ou 1) para escrever nos pinos GPIO selecionados.
Exemplo:
GPIO 28
// E s c r e v e 1 nos p i n o s GPIO pi n0 e pi n 5
GPIO pinWriteAll ( hGpio , GPIO GPIO PIN0 | GPIO GPIO PIN5 , 0
x0021 ) ;
Argumentos:
hGpio - handle GPIO
pinMask - mascara dos pinos selecionados
Retorno
ind - Valor (0 ou 1) para escrever nos pinos GPIO selecionados.
Exemplo:
// E s c r e v e 1 nos p i n o s GPIO pi n1 e pi n 3
GPIO pinReset ( hGpio , GPIO GPIO PIN1 | GPIO GPIO PIN3 ) ;
7.5 Macros
A tabela abaixo contem uma lista de macros disponveis para o modulo GPIO. Para
usa-las inclua a clausula include "csl gpio.h".
Macro Sintaxe
Macros para ler/escrever valores nos registradores GPIO
GPIO RGET() Uint16 GPIO RGET(REG)
GPIO RSET() void GPIO RSET(REG, Uint16 regval)
Macros para ler/escrever valores nos campos de registradores GPIO
GPIO FGET() Uint16 GPIO FGET(REG, FIELD)
GPIO FSET() void GPIO FSET(REG, FIELD, Uint16 fieldval)
Macros para criar valores nos registradores e campos GPIO
GPIO REG RMK() Uint16 GPIO REG RMK(fieldval n, ...fieldval 0) /*field n:
MSB field, field 0: LSB field*/
GPIO FMK() Uint16 GPIO FMK(REG, FIELD, fieldval)
Macros para ler um endereco de registrador
GPIO ADDR() Uint16 GPIO ADDR(REG)
Notas:
8 DMA
Cada porta possui canais, dotados de capacidade de leitura dados de uma porta e de
escrever em outra porta. Alem disso, cada canal tem um buffer FIFO, que permite que a
transferencia de dados seja realizada em dois estagios conhecidos como:
8.1 Configura
c
ao
1. Primeiramente, precisamos fazer a definicao do objeto (DMA HANDLE - vide secao 8.3.1).
3. Fazemos entao a abertura do canal por onde os dados serao transmitidos.(DMA open - vide
secao 8.3.2)
5. Iniciamos o canal DMA a ser utilizado. (DMA start - vide secao 8.3.4)
6. Desabilitamos o canal por onde os dados estao sendo trafegados. (DMA close - vide secao
8.3.8)
Entre o 5 passo e o o 6, a depender da aplicacao, uma serie operacoes podem ser re-
alizadas. Um exemplo simples e a transferencia de de um frame de um DARAM para outro
DARAM, que utiliza macros como DMA FGETH (vide secao 8.3.7) para verificar se a configuracao
dos registradores foi copiada nos registradores de trabalho do DMA e o DMA RSETH (vide secao
8.3.5) que e utilizado para a transferencia do novo conjunto de valores de configuracao dos
registradores do DMA.
DMA 32
DSTAMODE: Utilizado para determinar onde sera escrito na porta de destino do canal.
SRCAMODE: Utilizado para determinar onde sera lido na porta fonte do canal.
8.3 Fun
coes e Macros
Seguem algumas macros e funcoes fornecidas pela biblioteca para a controlador DMA.
Argumentos:
Exemplo :
myhDMA = DMA open(DMA CHA1, DMA OPEN RESET) ;
Obs.: Uma vez aberto o canal DMA ele so podera ser reaberto depois que a funcao DMA close
tenha sido utilizada.
Argumentos:
Exemplo :
DMA config (myhDma, &myconfig ) ;
Argumentos:
Exemplo :
DMA start (myhDma) ;
A macro tem a funcao de setar o registrador para o canal associado (no exemplo
abaixo, seria o DMACSSAU) para a escrita do valor (no exemplo abaixo, escreveremos
src2AddrHi) neste registrador.
Argumentos:
Exemplo :
DMA RSETH(myhDma,DMACSSAU, src2AddrHi ) ;
Argumentos:
DMA 35
Exemplo :
DMA Handle myHandle ;
myHandle = DMA open (DMA CHA0, DMA OPEN RESET) ;
DMA FSETH ( myHandle , DMACCR, AUTOINIT, 1 ) ;
Argumentos:
Exemplo:
DMA Handle myHandle ;
...
// abra o c a n a l dma
myHandle = DMA open(DMA CHA0, DMA OPEN RESET) ;
...
myVar = DMA FGETH( myHandle , DMACCR, AUTOINIT) ;
Argumentos:
Exemplo:
DMA close (myhDma) ;
Contribuic
a o dos Integrantes 36
9 Contribuic
ao dos Integrantes
Desenvolvimento do manual da
Denis e Tiago ficaram como responsaveis pelo funcionamento da placa, instalacao da IDE
e uso da mesma para criacao do vdeo demonstrativo produzir o video do exemplo controle
do display.
Andre e Tiago definiram os recursos que seriam usados para comunicacao entre os inte-
grantes, o modelo do manual e o uso do LATEX, atraves do Overleaf, para facilitar a edicao do
projeto. Isso permitiu que os componentes pudessem simultaneamente editar o manual, mesmo
nao estando fisicamente reunidos em um mesmo local.
10 Refer
encias
[1] TLV320AIC3204, Ultra Low Power Stereo Audio Codec, Texas Instruments
http://www.ti.com/lit/ds/symlink/tlv320aic3204.pdf
[2] TMS320VC5502, Fixed-Point Digital Signal Processor, Data Manual, Texas Instruments
http://www.ti.com.cn/cn/lit/ds/symlink/tms320vc5502.pdf