SlideShare a Scribd company logo
1 of 34
Download to read offline
ELT048 - SOE
Drivers
Rodrigo Almeida
Universidade Federal de Itajubá
Revisão
● Sistema de tempo real
● Requisitos temporais
Real time
● Capacidade de um
sistema em garantir
a peridiocidade de
uma tarefa
● Determinismo
Requisitos temporais
● Para implementar um sistema que trabalhe
com requisitos temporais:
1)Deve existir um relógio que trabalhe com uma
frequência precisa.
2)O kernel deve ser informado da frequência, ou
período, de execução de cada processo.
3)A soma dos tempos de cada processo deve
“caber” no tempo disponível do processador.
●
1a
condição:
● É necessário um timer que possa gerar uma
interrupção.
●
2a
condição:
● Adicionar as informações na estrutura do
processo
●
3a
condição:
● Testar, testar e testar.
● Em caso de falha:
– Chip mais rápido
– Otimização
Requisitos temporais
Rotina de Interrupção
//colocar no MCUinit.c na função isrVrti()
#include “kernel.h”
__interrupt void isrVrti(void){
KernelClock();
//limpar a flag de interrupção
CRGFLG = 0x80;
}
Rotina de Interrupção
//colocar no kernel.c
#define MIN_INT -30000
void KernelClock(void){
unsigned char i;
i = ini;
while(i!=fim){
if((pool[i].start)>(MIN_INT)){
pool[i].start--;
}
i = (i+1)%SLOT_SIZE;
}
}
//colocar no kernel.h
void KernelClock(void);
Exercício
● Montar um relógio binário onde cada led
pisca numa frequência diferente
1
2
3
4
1 segundo
2 segundos
4 segundos
8 segundos //Ligar o 1o led
PORTB = PORTB | 0x01;
//Desligar o 1o led
PORTB = PORTB & ~0x01;
//Piscar o 1o led
PORTB = PORTB ^ 0x01;
Driver
● Driver é uma abstração em software do
hardware da placa, suas funcionalidades,
opções e modos de funcionamento.
● É dependente do processador,dos
componentes conectados e das ligações
entre eles.
Driver
● Exemplo:
● Display de LCD:
– 16 colunas X 2 linhas
– Compatível com HD44780 (Hitachi)
● Dragon12
– Ligação em 4 bits
– Acesso à EN e RS
● MC9HCS12DG256
– Utilizada a porta K
● Rotinas de inicialização e comunicação
Rotina de inicialização do LCD
Esquemático LCD - Dragon12
LCD + Dragon 12 + HCS12
● Utilizar as portas do HCS12 conforme
ligação da Dragon12
● PORTK(6:2) → Data
● PORTK(1) → Enable
● PORTK(0) → RS (data/cmd)
● Montar as rotinas de acordo com o
datasheet do HD44780
● Comunicação em 4 bits
Rotinas de acesso ao LCD
● Referencia para implementação das rotinas
● http://www.evbplus.com/hcs12_9s12_resources
/app_notes.html
● Apresenta 4 funções
● void initLcd(void)
● void writeLine(char *string, int line)
● void writeLcd8(unsigned char data, unsigned char rs)
● void writeLcd4(unsigned char data, unsigned char rs)
● void lcdDelay(unsigned long constant)
Rotinas de acesso ao LCD
void writeLcd4(unsigned char data, unsigned char rs)
{
unsigned char hi, lo;
/* split byte into 2 nibbles and shift to line up
* with data bits in port K */
hi = ((data & 0xf0) >> 2) | (rs & 0x01) ;
lo = ((data & 0x0f) << 2) | (rs & 0x01) ;
/* do write pulses for upper, then lower nibbles */
PORTK = hi; // write with EN=0
PORTK = hi | ENBIT; // write with EN=1
PORTK = hi; // write with EN=0
PORTK = lo; // write with EN=0
PORTK = lo | ENBIT; // write with EN=1
PORTK = lo; // write with EN=0
/* allow instruction to complete */
lcdDelay(DELAY40US);
} // end writeLcd4()
Rotinas de acesso ao LCD
void writeLcd8(unsigned char data) {
unsigned char temp;
/* shift upper nibble to data bits in port K */
temp = (data >> 2); // rs is always 0
/* Now do the EN pulsing */
PORTK = temp; // write with EN=0
PORTK = temp | ENBIT; // write with EN=1
PORTK = temp; // write with EN=0
/* allow instruction to complete */
lcdDelay(DELAY40US);
} // end writeLcd8()
Rotinas de acesso ao LCD
void lcdDelay(unsigned long constant) {
volatile unsigned long counter;
for(counter = constant; counter > 0; counter--);
} // end lcdDelay()
Rotinas de acesso ao LCD
void LCD_init(void) {
/* initialise port */
DDRK = 0xff;
writeLcd8(0x30); // tell it once
lcdDelay(DELAY4_1MS);
writeLcd8(0x30); // tell it twice
lcdDelay(DELAY100US);
writeLcd8(0x30); // tell it thrice
// last write in 8-bit mode sets bus to 4 bit mode
writeLcd8(0x20);
/* In 4 bit mode, write upper/lower nibble */
writeLcd4(0x28, 0); // 4-bit, 2 lines, 5x7 matrix
writeLcd4(0x0c, 0); // disp on, cursor & blink off
writeLcd4(0x01, 0); // display clear
writeLcd4(0x06, 0); // disable display shift
} // end initLcd()
Rotinas de acesso ao LCD
void writeLine(char *string, int line) {
int i;
unsigned char instruction;
/* Set address in LCD module */
if( 1 == line)
instruction = 0xc0; // write bottom line
else
instruction = 0x80; // write top line
writeLcd4( instruction, 0); // rs=0 means command
/* blast out 16 bytes */
for( i = 0; i < LCDWIDTH; i++) {
writeLcd4( string[i], 1); // rs=1 means data
}
} // end writeLine()
Criação de um driver
● Para a criação de um driver basta
encapsular estas funções num conjunto
organizado e de fácil acesso.
● Headers e defines
● A mudança do driver não deve gerar
nenhuma alteração no código da aplicação.
● A criação de um driver deve se concentrar
na função e não nos recursos do
dispositivo.
Padronização
● A forma de uso de um drivers é
extremamente ligada a seu dispositivo.
● Padronizar os diversos tipos de drivers
envolve conceder concessões e inserir um
overhead que pode ser prejudicial ao
sistema
● No entanto isto permite construir um
sistema para gerenciamento dos mesmos
Padronização
● É possível separar as funções de um
dispositivo em 3 modelos
● Inicialização
● Execução de serviço/funcionalidade
● Retorno de informação
● Função de acesso ao driver
Padronização
● As funções do tipo inicialização são
executadas antes de utilizar o dispositivo.
● Podem tomar muito tempo
● Fazem parte do “boot” do sistema
Padronização
● As funções de execução de serviços são as
funções que realizam as operações do
dispositivo
● Escrever no LCD, gerar um sinal de PWM,
enviar uma informação via serial
● Em geral são executadas rapidamente
podendo ser sequenciadas num processo
sem impactos na velocidade de execução
Padronização
● As funções de retorno de informação
devolvem valores obtidos pelos dispositivos
● Leitura de uma tecla, recepção de um valor via
serial
● Estas funções são eventuais e não
determinísticas.
● Por esse motivo é uma boa pratica não esperar
que elas aconteçam.
Padronização
● Para simplificar a padronização foi criado
um modelo com:
● Uma função de inicialização do driver
● Um vetor com ponteiros de função com cada
função de execução
● Um sistema de callback para cada evento de
resposta do dispositivo
● Uma função que retorna uma struct do
driver
Padronização
Estruturas para a criação do driver
//Device Drivers Types (dd_types.h)
//ptr. de func. para uma função do driver
typedef char(*ptrFuncDrv)(void *parameters);
//estrutura do driver
typedef struct {
char drv_id;
ptrFuncDrv *drv_func;
ptrFuncDrv drv_init;
} driver;
//função de retorno do driver
typedef driver* (*ptrGetDrv)(void);
Drive genérico
● Desenvolvimento de um drive que altera o
valor da portaB (LED's)
Driver genérico
#ifndef drvGenerico_h
#define drvGenerico_h
#include "dd_types.h"
//lista de funções do driver
enum {
GEN_PORTB, GEN_END
};
//função de acesso ao driver
driver* getGenericoDriver(void);
#endif // drvGenerico_h
Driver genérico
//(drvGenerico.c)
// implementação do driver em struct
// apresenta todas as funções do driver
static driver thisDriver;
//lista de funções que o driver contém
static ptrFuncDrv this_functions[GEN_END];
Driver genérico
//(drvGenerico.c)
//funcionalidades implementadas
char changePORTB(void *parameters) {
PORTB = (char) parameters;
return FIM_OK;
}
//função para inicialização do hardware
char initGenerico(void *parameters) {
DDRB = 0xFF;
thisDriver.drv_id = (char) parameters;
return FIM_OK;
}
Driver genérico
//(drvGenerico.c)
//função para acesso ao driver
//deve inicializar a estrutura do driver
//e a lista de funções disponíveis
driver* getGenericoDriver(void) {
//função de inicialização
thisDriver.drv_init = initGenerico;
//funções do driver
this_functions[GEN_PORTB] = ChangePORTB;
//atualizando a referencia da lista
thisDriver.drv_func = &this_functions;
return &thisDriver;
}
Endereço da
função
Exercício
● Desenvolver um driver para o LCD
utilizando o modelo proposto

More Related Content

What's hot

Trabalho sobre processadores
Trabalho sobre processadoresTrabalho sobre processadores
Trabalho sobre processadoresTiago
 
Introdução à Arquitetura de Computadores
Introdução à Arquitetura de ComputadoresIntrodução à Arquitetura de Computadores
Introdução à Arquitetura de ComputadoresMauro Pereira
 
Apresentação curso pic básico fbs eletrônica
Apresentação   curso pic básico fbs eletrônicaApresentação   curso pic básico fbs eletrônica
Apresentação curso pic básico fbs eletrônicaFabio Souza
 
Sistemas Operacionais - Aula 06 (Estrutura do S.O)
Sistemas Operacionais - Aula 06 (Estrutura do S.O)Sistemas Operacionais - Aula 06 (Estrutura do S.O)
Sistemas Operacionais - Aula 06 (Estrutura do S.O)Leinylson Fontinele
 
Barramento do Sistema - Arquitetura e Organização de Computadores
Barramento do Sistema - Arquitetura e Organização de ComputadoresBarramento do Sistema - Arquitetura e Organização de Computadores
Barramento do Sistema - Arquitetura e Organização de ComputadoresWellington Oliveira
 
Jagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratchJagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratchlinuxlab_conf
 
Capítulo 5 Sistemas Operacionais Modernos
Capítulo 5 Sistemas Operacionais ModernosCapítulo 5 Sistemas Operacionais Modernos
Capítulo 5 Sistemas Operacionais ModernosWellington Oliveira
 
Sistemas Operacionais - Aula 05 (Concorrência)
Sistemas Operacionais - Aula 05 (Concorrência)Sistemas Operacionais - Aula 05 (Concorrência)
Sistemas Operacionais - Aula 05 (Concorrência)Leinylson Fontinele
 
Arquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruçõesArquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruçõesAlex Camargo
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresLuis Ferreira
 
Embedded_Linux_Booting
Embedded_Linux_BootingEmbedded_Linux_Booting
Embedded_Linux_BootingRashila Rr
 
LAS16-402: ARM Trusted Firmware – from Enterprise to Embedded
LAS16-402: ARM Trusted Firmware – from Enterprise to EmbeddedLAS16-402: ARM Trusted Firmware – from Enterprise to Embedded
LAS16-402: ARM Trusted Firmware – from Enterprise to EmbeddedLinaro
 
Sistema Operativo Servidor
Sistema Operativo ServidorSistema Operativo Servidor
Sistema Operativo ServidorDaniel Barros
 
Microcontroladores PIC - Introdução
Microcontroladores PIC - IntroduçãoMicrocontroladores PIC - Introdução
Microcontroladores PIC - IntroduçãoFabio Souza
 
A evolução dos processadores
A evolução dos processadoresA evolução dos processadores
A evolução dos processadoresdrogapraisso
 
Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Leinylson Fontinele
 
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with Debugging
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with DebuggingPART-2 : Mastering RTOS FreeRTOS and STM32Fx with Debugging
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with DebuggingFastBit Embedded Brain Academy
 

What's hot (20)

Trabalho sobre processadores
Trabalho sobre processadoresTrabalho sobre processadores
Trabalho sobre processadores
 
Introdução à Arquitetura de Computadores
Introdução à Arquitetura de ComputadoresIntrodução à Arquitetura de Computadores
Introdução à Arquitetura de Computadores
 
Apresentação curso pic básico fbs eletrônica
Apresentação   curso pic básico fbs eletrônicaApresentação   curso pic básico fbs eletrônica
Apresentação curso pic básico fbs eletrônica
 
Sistemas Operacionais - Aula 06 (Estrutura do S.O)
Sistemas Operacionais - Aula 06 (Estrutura do S.O)Sistemas Operacionais - Aula 06 (Estrutura do S.O)
Sistemas Operacionais - Aula 06 (Estrutura do S.O)
 
Barramento do Sistema - Arquitetura e Organização de Computadores
Barramento do Sistema - Arquitetura e Organização de ComputadoresBarramento do Sistema - Arquitetura e Organização de Computadores
Barramento do Sistema - Arquitetura e Organização de Computadores
 
BusyBox for Embedded Linux
BusyBox for Embedded LinuxBusyBox for Embedded Linux
BusyBox for Embedded Linux
 
Jagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratchJagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratch
 
Linux systems - Getting started with setting up and embedded platform
Linux systems - Getting started with setting up and embedded platformLinux systems - Getting started with setting up and embedded platform
Linux systems - Getting started with setting up and embedded platform
 
Capítulo 5 Sistemas Operacionais Modernos
Capítulo 5 Sistemas Operacionais ModernosCapítulo 5 Sistemas Operacionais Modernos
Capítulo 5 Sistemas Operacionais Modernos
 
Sistemas Operacionais - Aula 05 (Concorrência)
Sistemas Operacionais - Aula 05 (Concorrência)Sistemas Operacionais - Aula 05 (Concorrência)
Sistemas Operacionais - Aula 05 (Concorrência)
 
Arquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruçõesArquitetura de Computadores: Barramentos e instruções
Arquitetura de Computadores: Barramentos e instruções
 
Módulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de ComputadoresMódulo 5 Arquitetura de Computadores
Módulo 5 Arquitetura de Computadores
 
Processadores
Processadores Processadores
Processadores
 
Embedded_Linux_Booting
Embedded_Linux_BootingEmbedded_Linux_Booting
Embedded_Linux_Booting
 
LAS16-402: ARM Trusted Firmware – from Enterprise to Embedded
LAS16-402: ARM Trusted Firmware – from Enterprise to EmbeddedLAS16-402: ARM Trusted Firmware – from Enterprise to Embedded
LAS16-402: ARM Trusted Firmware – from Enterprise to Embedded
 
Sistema Operativo Servidor
Sistema Operativo ServidorSistema Operativo Servidor
Sistema Operativo Servidor
 
Microcontroladores PIC - Introdução
Microcontroladores PIC - IntroduçãoMicrocontroladores PIC - Introdução
Microcontroladores PIC - Introdução
 
A evolução dos processadores
A evolução dos processadoresA evolução dos processadores
A evolução dos processadores
 
Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)
 
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with Debugging
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with DebuggingPART-2 : Mastering RTOS FreeRTOS and STM32Fx with Debugging
PART-2 : Mastering RTOS FreeRTOS and STM32Fx with Debugging
 

Similar to Driver LCD HCS12 com funções genéricas

Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de driversRodrigo Almeida
 
Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?Embarcados
 
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Cláudio Alves
 
Microcontroladores pic ling c unicamp
Microcontroladores pic ling c unicampMicrocontroladores pic ling c unicamp
Microcontroladores pic ling c unicampFrancisco Fambrini
 
Cartao referencia ccs
Cartao referencia ccsCartao referencia ccs
Cartao referencia ccsLuciano Zica
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptxfmtpereira
 
Interrupts and the timer
Interrupts and the timerInterrupts and the timer
Interrupts and the timerMayara Mônica
 
V2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoV2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoSamir Siqueira
 
Clp completa
Clp completaClp completa
Clp completapanelada
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosEmbarcados
 

Similar to Driver LCD HCS12 com funções genéricas (20)

Treinamento arduino (1).pptx
Treinamento arduino (1).pptxTreinamento arduino (1).pptx
Treinamento arduino (1).pptx
 
Projeto de uma controladora de drivers
Projeto de uma controladora de driversProjeto de uma controladora de drivers
Projeto de uma controladora de drivers
 
Pic slides
Pic slidesPic slides
Pic slides
 
Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?Webinar: Porque o RTOS não faz o que eu quero?
Webinar: Porque o RTOS não faz o que eu quero?
 
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
 
Microcontroladores pic ling c unicamp
Microcontroladores pic ling c unicampMicrocontroladores pic ling c unicamp
Microcontroladores pic ling c unicamp
 
Programa final
Programa finalPrograma final
Programa final
 
Cartao referencia ccs
Cartao referencia ccsCartao referencia ccs
Cartao referencia ccs
 
Relatório final
Relatório finalRelatório final
Relatório final
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptx
 
Controle relés com Log, sensor hall e emergência
Controle relés com Log, sensor hall e emergênciaControle relés com Log, sensor hall e emergência
Controle relés com Log, sensor hall e emergência
 
Programa final
Programa finalPrograma final
Programa final
 
Interrupts and the timer
Interrupts and the timerInterrupts and the timer
Interrupts and the timer
 
V2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoV2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduino
 
Ac16 conjunto de instruções v2
Ac16   conjunto de instruções v2Ac16   conjunto de instruções v2
Ac16 conjunto de instruções v2
 
MIPS Pipeline
MIPS Pipeline MIPS Pipeline
MIPS Pipeline
 
ARM
ARMARM
ARM
 
Clp completa
Clp completaClp completa
Clp completa
 
Webinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcadosWebinar: Arquitetura de software para sistemas embarcados
Webinar: Arquitetura de software para sistemas embarcados
 
Arduino e python
Arduino e pythonArduino e python
Arduino e python
 

More from Rodrigo Almeida

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Rodrigo Almeida
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19Rodrigo Almeida
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenhariasRodrigo Almeida
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Rodrigo Almeida
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Rodrigo Almeida
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio LacerdaRodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Rodrigo Almeida
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Rodrigo Almeida
 
Definição de processos
Definição de processosDefinição de processos
Definição de processosRodrigo Almeida
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersRodrigo Almeida
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosRodrigo Almeida
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusRodrigo Almeida
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCDRodrigo Almeida
 
Leitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialLeitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialRodrigo Almeida
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosRodrigo Almeida
 
Acessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontroladorAcessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontroladorRodrigo Almeida
 
Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registrosRodrigo Almeida
 

More from Rodrigo Almeida (20)

Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015Embedded systems design @ defcon 2015
Embedded systems design @ defcon 2015
 
Embedded systems development Defcon 19
Embedded systems development Defcon 19Embedded systems development Defcon 19
Embedded systems development Defcon 19
 
As diferentes engenharias
As diferentes engenhariasAs diferentes engenharias
As diferentes engenharias
 
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...Testing de software en instrumentos de pesar de funcionamiento no automatico ...
Testing de software en instrumentos de pesar de funcionamiento no automatico ...
 
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
Seguridad de sistemas embebidos para el ámbito regulado - Alejandro Bertello ...
 
Cryptology - Antônio Lacerda
Cryptology - Antônio LacerdaCryptology - Antônio Lacerda
Cryptology - Antônio Lacerda
 
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
Troca de contexto segura em sistemas operacionais embarcados utilizando de té...
 
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
Troca de contexto segura em sistemas operacionais embarcados utilizando técni...
 
Definição de processos
Definição de processosDefinição de processos
Definição de processos
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Conceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffersConceitos de ponteiros struct e buffers
Conceitos de ponteiros struct e buffers
 
Introdução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcadosIntrodução aos sistemas operacionais embarcados
Introdução aos sistemas operacionais embarcados
 
Segurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virusSegurança de sistemas: invasões, engenharia reversa e análise de virus
Segurança de sistemas: invasões, engenharia reversa e análise de virus
 
Comunicação serial
Comunicação serialComunicação serial
Comunicação serial
 
Utilizando um Display de LCD
Utilizando um Display de LCDUtilizando um Display de LCD
Utilizando um Display de LCD
 
Leitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricialLeitura de teclas com arranjo matricial
Leitura de teclas com arranjo matricial
 
Display de 7 segmentos multiplexados
Display de 7 segmentos multiplexadosDisplay de 7 segmentos multiplexados
Display de 7 segmentos multiplexados
 
Acessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontroladorAcessando os periféricos de um microcontrolador
Acessando os periféricos de um microcontrolador
 
Acesso à memória e registros
Acesso à memória e registrosAcesso à memória e registros
Acesso à memória e registros
 
Operações com Bits
Operações com BitsOperações com Bits
Operações com Bits
 

Driver LCD HCS12 com funções genéricas

  • 1. ELT048 - SOE Drivers Rodrigo Almeida Universidade Federal de Itajubá
  • 2. Revisão ● Sistema de tempo real ● Requisitos temporais
  • 3. Real time ● Capacidade de um sistema em garantir a peridiocidade de uma tarefa ● Determinismo
  • 4. Requisitos temporais ● Para implementar um sistema que trabalhe com requisitos temporais: 1)Deve existir um relógio que trabalhe com uma frequência precisa. 2)O kernel deve ser informado da frequência, ou período, de execução de cada processo. 3)A soma dos tempos de cada processo deve “caber” no tempo disponível do processador.
  • 5. ● 1a condição: ● É necessário um timer que possa gerar uma interrupção. ● 2a condição: ● Adicionar as informações na estrutura do processo ● 3a condição: ● Testar, testar e testar. ● Em caso de falha: – Chip mais rápido – Otimização Requisitos temporais
  • 6. Rotina de Interrupção //colocar no MCUinit.c na função isrVrti() #include “kernel.h” __interrupt void isrVrti(void){ KernelClock(); //limpar a flag de interrupção CRGFLG = 0x80; }
  • 7. Rotina de Interrupção //colocar no kernel.c #define MIN_INT -30000 void KernelClock(void){ unsigned char i; i = ini; while(i!=fim){ if((pool[i].start)>(MIN_INT)){ pool[i].start--; } i = (i+1)%SLOT_SIZE; } } //colocar no kernel.h void KernelClock(void);
  • 8. Exercício ● Montar um relógio binário onde cada led pisca numa frequência diferente 1 2 3 4 1 segundo 2 segundos 4 segundos 8 segundos //Ligar o 1o led PORTB = PORTB | 0x01; //Desligar o 1o led PORTB = PORTB & ~0x01; //Piscar o 1o led PORTB = PORTB ^ 0x01;
  • 9. Driver ● Driver é uma abstração em software do hardware da placa, suas funcionalidades, opções e modos de funcionamento. ● É dependente do processador,dos componentes conectados e das ligações entre eles.
  • 10. Driver ● Exemplo: ● Display de LCD: – 16 colunas X 2 linhas – Compatível com HD44780 (Hitachi) ● Dragon12 – Ligação em 4 bits – Acesso à EN e RS ● MC9HCS12DG256 – Utilizada a porta K ● Rotinas de inicialização e comunicação
  • 12. Esquemático LCD - Dragon12
  • 13. LCD + Dragon 12 + HCS12 ● Utilizar as portas do HCS12 conforme ligação da Dragon12 ● PORTK(6:2) → Data ● PORTK(1) → Enable ● PORTK(0) → RS (data/cmd) ● Montar as rotinas de acordo com o datasheet do HD44780 ● Comunicação em 4 bits
  • 14. Rotinas de acesso ao LCD ● Referencia para implementação das rotinas ● http://www.evbplus.com/hcs12_9s12_resources /app_notes.html ● Apresenta 4 funções ● void initLcd(void) ● void writeLine(char *string, int line) ● void writeLcd8(unsigned char data, unsigned char rs) ● void writeLcd4(unsigned char data, unsigned char rs) ● void lcdDelay(unsigned long constant)
  • 15. Rotinas de acesso ao LCD void writeLcd4(unsigned char data, unsigned char rs) { unsigned char hi, lo; /* split byte into 2 nibbles and shift to line up * with data bits in port K */ hi = ((data & 0xf0) >> 2) | (rs & 0x01) ; lo = ((data & 0x0f) << 2) | (rs & 0x01) ; /* do write pulses for upper, then lower nibbles */ PORTK = hi; // write with EN=0 PORTK = hi | ENBIT; // write with EN=1 PORTK = hi; // write with EN=0 PORTK = lo; // write with EN=0 PORTK = lo | ENBIT; // write with EN=1 PORTK = lo; // write with EN=0 /* allow instruction to complete */ lcdDelay(DELAY40US); } // end writeLcd4()
  • 16. Rotinas de acesso ao LCD void writeLcd8(unsigned char data) { unsigned char temp; /* shift upper nibble to data bits in port K */ temp = (data >> 2); // rs is always 0 /* Now do the EN pulsing */ PORTK = temp; // write with EN=0 PORTK = temp | ENBIT; // write with EN=1 PORTK = temp; // write with EN=0 /* allow instruction to complete */ lcdDelay(DELAY40US); } // end writeLcd8()
  • 17. Rotinas de acesso ao LCD void lcdDelay(unsigned long constant) { volatile unsigned long counter; for(counter = constant; counter > 0; counter--); } // end lcdDelay()
  • 18. Rotinas de acesso ao LCD void LCD_init(void) { /* initialise port */ DDRK = 0xff; writeLcd8(0x30); // tell it once lcdDelay(DELAY4_1MS); writeLcd8(0x30); // tell it twice lcdDelay(DELAY100US); writeLcd8(0x30); // tell it thrice // last write in 8-bit mode sets bus to 4 bit mode writeLcd8(0x20); /* In 4 bit mode, write upper/lower nibble */ writeLcd4(0x28, 0); // 4-bit, 2 lines, 5x7 matrix writeLcd4(0x0c, 0); // disp on, cursor & blink off writeLcd4(0x01, 0); // display clear writeLcd4(0x06, 0); // disable display shift } // end initLcd()
  • 19. Rotinas de acesso ao LCD void writeLine(char *string, int line) { int i; unsigned char instruction; /* Set address in LCD module */ if( 1 == line) instruction = 0xc0; // write bottom line else instruction = 0x80; // write top line writeLcd4( instruction, 0); // rs=0 means command /* blast out 16 bytes */ for( i = 0; i < LCDWIDTH; i++) { writeLcd4( string[i], 1); // rs=1 means data } } // end writeLine()
  • 20. Criação de um driver ● Para a criação de um driver basta encapsular estas funções num conjunto organizado e de fácil acesso. ● Headers e defines ● A mudança do driver não deve gerar nenhuma alteração no código da aplicação. ● A criação de um driver deve se concentrar na função e não nos recursos do dispositivo.
  • 21. Padronização ● A forma de uso de um drivers é extremamente ligada a seu dispositivo. ● Padronizar os diversos tipos de drivers envolve conceder concessões e inserir um overhead que pode ser prejudicial ao sistema ● No entanto isto permite construir um sistema para gerenciamento dos mesmos
  • 22. Padronização ● É possível separar as funções de um dispositivo em 3 modelos ● Inicialização ● Execução de serviço/funcionalidade ● Retorno de informação ● Função de acesso ao driver
  • 23. Padronização ● As funções do tipo inicialização são executadas antes de utilizar o dispositivo. ● Podem tomar muito tempo ● Fazem parte do “boot” do sistema
  • 24. Padronização ● As funções de execução de serviços são as funções que realizam as operações do dispositivo ● Escrever no LCD, gerar um sinal de PWM, enviar uma informação via serial ● Em geral são executadas rapidamente podendo ser sequenciadas num processo sem impactos na velocidade de execução
  • 25. Padronização ● As funções de retorno de informação devolvem valores obtidos pelos dispositivos ● Leitura de uma tecla, recepção de um valor via serial ● Estas funções são eventuais e não determinísticas. ● Por esse motivo é uma boa pratica não esperar que elas aconteçam.
  • 26. Padronização ● Para simplificar a padronização foi criado um modelo com: ● Uma função de inicialização do driver ● Um vetor com ponteiros de função com cada função de execução ● Um sistema de callback para cada evento de resposta do dispositivo ● Uma função que retorna uma struct do driver
  • 28. Estruturas para a criação do driver //Device Drivers Types (dd_types.h) //ptr. de func. para uma função do driver typedef char(*ptrFuncDrv)(void *parameters); //estrutura do driver typedef struct { char drv_id; ptrFuncDrv *drv_func; ptrFuncDrv drv_init; } driver; //função de retorno do driver typedef driver* (*ptrGetDrv)(void);
  • 29. Drive genérico ● Desenvolvimento de um drive que altera o valor da portaB (LED's)
  • 30. Driver genérico #ifndef drvGenerico_h #define drvGenerico_h #include "dd_types.h" //lista de funções do driver enum { GEN_PORTB, GEN_END }; //função de acesso ao driver driver* getGenericoDriver(void); #endif // drvGenerico_h
  • 31. Driver genérico //(drvGenerico.c) // implementação do driver em struct // apresenta todas as funções do driver static driver thisDriver; //lista de funções que o driver contém static ptrFuncDrv this_functions[GEN_END];
  • 32. Driver genérico //(drvGenerico.c) //funcionalidades implementadas char changePORTB(void *parameters) { PORTB = (char) parameters; return FIM_OK; } //função para inicialização do hardware char initGenerico(void *parameters) { DDRB = 0xFF; thisDriver.drv_id = (char) parameters; return FIM_OK; }
  • 33. Driver genérico //(drvGenerico.c) //função para acesso ao driver //deve inicializar a estrutura do driver //e a lista de funções disponíveis driver* getGenericoDriver(void) { //função de inicialização thisDriver.drv_init = initGenerico; //funções do driver this_functions[GEN_PORTB] = ChangePORTB; //atualizando a referencia da lista thisDriver.drv_func = &this_functions; return &thisDriver; } Endereço da função
  • 34. Exercício ● Desenvolver um driver para o LCD utilizando o modelo proposto