Roteiro 10 EA870 2S2009 Experimental

De DCA-Wiki

Contents

Roteiro 10 - Transmissão Serial Síncrona (QSPI) e o uso do display LCD (Experimental)

  • SPI - Transmissão Serial Síncrona / QSPI - Queued Serial Peripferal Interface
  • Uso do Liquid Cristal Display (LCD) - Veja Referência /6/, documento sobre SPECIFICATIONS FOR LCD MODULE -

Agradecimento

Este roteiro foi adaptado da versão contribuída por Guilherme A. Zalewski (buzzag@gmail.com) e Pedro Augusto (okaitt@gmail.com).

Introdução ao Experimento de Hoje

  • Neste experimento daremos início a transmissão serial síncrona (SPI) ou (QSPI onde Q significa: Enfileirar, Queue) do MCF para utilizarmos do display LCD presente na placa auxiliar. Mais uma vez teremos o código exemplo para o envio de bits para o LCD e a sua ativação. Este roteiro corresponde ao Cap 22 de http://www.freescale.com/files/32bit/doc/ref_manual/MCF52223RM.pdf

Roteiro de Estudos

  • 1. Explique e ilustre graficamente sucintamente a diferença entre uma transmissão utilizando-se do periférico QSPI (sícrono) e o UART (assíncrono).
  • 2. Na placa auxiliar, como é feita a seleção para a utilização do LCD?
  • 3. Como é possível distinguir dados e comandos no LCD?
  • 4. Qual o padrão utilizado para a inserção de caracteres no LCD?
  • 5. O que significa os comandos de configuração 0x38, 0x06, 0x0F e 0x01 enviadas ao LCD, visto no código exemplo "LCD/main.c"?
  • 6. Qual a função do periférico QSPI para o LCD?
  • 7. Qual a função do pino R/W do LCD? Por qual motivo ele está fixado a "0" na placa auxiliar?
  • 8. Como é dividida a QSPI RAM?
  • 9. Qual a função do registrador QMR?
  • 10. Para que servem os bits 13-10 do registrador QMR?
  • 11, Explique porque na UART deve-se configurar o clock, enquanto no QSPI não é necessário configurar, como exemplo use as ilustrações que voce configurou os registradores nos roteiros (rot4 e outros).

Roteiro da Aula

O programa exemplo:

- Programa LCD/main.c

#include "support_common.h" /* include peripheral declarations and more */
#include "uart_support.h"
#include <stdio.h>

#define DDRAS	0x40100023
#define PORTAS	0x4010000B
#define PASPAR	0x4010006B
#define CLRAS	0x40100053
#define SETAS	0x4010003B


//Função que gera um delay suficiente para o LCD funcionar/processar
void delay(){
int i, j;
	for(i=0;i<40;i++)
	{
		for(j=0;j<1000;j++)
		{
		}
	}
}
	
//FUNÇÃO DE TRANSMISSÃO QSPI
void envia_spi(uint8 sinal)
{
MCF_QSPI_QAR = 0x0000;		//Registrador de endereço aponta para área de transmissão
MCF_QSPI_QDR = sinal;		//É armazenado o dado a ser transmitido
MCF_QSPI_QDLYR |= 0x8000;	//Dá início à transmissão
}


//CONFIGURAÇÃO DO PERIFERICO QSPI
void configura_spi()
{
MCF_GPIO_PQSPAR |= 0x1555;	//A porta porta QS exerce função QSPI (Configura PQSPAR)

//Configuração do registrador "Mode"
MCF_QSPI_QMR &= ~(MCF_QSPI_QMR_CPHA);	//Dados mudam na borda de subida do clk
MCF_QSPI_QMR |= MCF_QSPI_QMR_MSTR;		//Modo MASTER (Obrigatorio)
MCF_QSPI_QMR |= MCF_QSPI_QMR_BITS(0x8);	//8bits por transmissão
MCF_QSPI_QMR |= MCF_QSPI_QMR_BAUD(0x2);	//Baud Rate 10Mhz

MCF_QSPI_QDLYR = 0x0000;	//Delay register = 0 Delays são todos zero
MCF_QSPI_QWR = 0x1000;		//Abaixa nível de CS0 e informa transmisão única
							//Lembrando-se que o HLT pára transmissão
MCF_QSPI_QIR |= MCF_QSPI_QIR_SPIF;	//Garante que o "finish flag" é alto nível

//Programa a transmissão
MCF_QSPI_QAR = 0x0020;	//Registrador de endereço aponta para área de comandos 
MCF_QSPI_QDR = 0x7E00;	//Programa a transmissão (nº de bits...)
}

///////////////////////////////////////////////////////////////////////////////////////////


//Função Principal
int main(void)
{
char mensagem[] = "0123456789";
uint8 configuracao[5] = {0x38, 0x38, 0x06, 0x0F, 0x01};	//Configuracao do LCD

int i;

uint8 *ddras = (uint8 *)DDRAS;
uint8 *portas = (uint8 *)PORTAS;
uint8 *paspar = (uint8 *)PASPAR;
uint8 *clras = (uint8 *)CLRAS;

configura_spi();	//Configura o SPI (Configuração fixa)

*paspar = 0x00;		//Define a porta AS como IO comum
*ddras = 0x03;		//Define a porta AS como saída
*clras = 0x00;		//Zera a porta AS

//Lembrando que a porta AS1 escolhe para onde os dados do SPI vão:
//DAC (0) ou LCD (1)

//No caso do LCD, quando desejamos mandar um COMANDO, AS0 = 0
//Para enviarmos um caracter, AS0 = 1

delay();			//Espera um tempo para o LCD inicializar

//Seleciona LCD com escrita de COMANDO
*portas = 0x02;		// AS1 = 1  e AS0 = 0

//Envia os comandos de configuração do LCD
for (i=0; i<5; i++)
        {
	envia_spi(configuracao[i]);	//Envia o comando
	delay();
        }

*portas = 0x03;		//Seleciona o LCD com escrita de CARACTER		

//Envia os caracteres para o LCD
for (i=0; i<10; i++)
	{
	envia_spi(mensagem[i]);	//Envia o caracter
	delay();
	}

}
  • Crie um novo projeto no CodeWarrior e utilize o código acima como código principal (main).
  • Procure entender exatamente o que o código faz.

Relatório

QUESTÕES:-

  • Nas questões a seguir ilustre graficamente ou justifique com configurações que V fez
  • a. Explique e ilustre graficamente a diferença entre uma transmissão utilizando-se o periférico QSPI (sícrono) e o UART (assíncrono).
  • b. Na placa auxiliar, como é feita a seleção para a utilização do LCD?
  • c. Como é possível distinguir dados e comandos no LCD?
  • d. Qual o padrão utilizado para a inserção de caracteres no LCD?
  • e. O que significa os comandos de configuração 0x38, 0x06, 0x0F e 0x01 enviadas ao LCD, visto no código exemplo "LCD/main.c"?
  • f. Qual a função do periférico QSPI para o LCD?
  • g. Qual a função do pino R/W do LCD? Por qual motivo ele está fixado a "0" na placa auxiliar?
  • h. Como é dividida a QSPI RAM?
  • i. Qual a função do registrador QMR?
  • j. Para que servem os bits 13-10 do registrador QMR?
  • k. Explique porque na UART deve-se configurar o clock no início da Tr/R, enqto no QSPI não é needs configurar, como exemplo use as ilustrações que V configurou os registradores nos roteiros (rot4 e outros).


PROGRAMA

Faça um programa em que o LCD funcione como um cronômetro, utilizando o relógio tempo real (RTC) do MCF, visto no roteiro 6.

No relatório, explique como seu programa funciona.

Entrega dos Relatórios

Turma E

Turma F

  • grupo 1 Marcus Vinicius Laganá e FabianoEmmanuel Montoro: EA870_R10
  • grupo 2 Matheus Souza e Gustavo Azevedo de Oliveira: 071079_071855_R10
  • grupo 3 Vinícius Follis Tasso e Vinícius Dessoti R10
  • grupo 5 Henri Maranghetti Lourenço e William Robert Miyazaki Ra043985_ra083097_rel10

Referências

Ferramentas pessoais