Biblioteca SPI para a placa FRDM-KL25Z

Olá caro leitor, este é terceiro artigo da série Bibliotecas de software para a FRDM-KL25Z. Neste artigo abordarei o uso da comunicação SPI (Serial Peripheral Interface) na Freedom Board. Para saber mais sobre a comunicação SPI, recomendo a série de artigos sobre Comunicação SPI produzida Francesco Sacco.

As bibliotecas apresentadas são compatíveis com o Kinetis Design Studio IDE e CodeWarrior IDE. Também são facilmente portáveis para as demais placas Freedom Board.

 

Como já abordado anteriormente a Freedom Board KL25Z contém como microcontrolador alvo o MKL25Z128VLK4, que por sua vez possui dois módulos de comunicação SPI (SPI0 e SPI1) que trabalham com dados de 8 bits.

O periférico de SPI da FRDM-KL25Z suporta trabalhar tanto no modo Mestre (MASTER) quanto no modo Escravo (SLAVE). O módulo de comunicação SPI deste microcontrolador possui também interface DMA (Direct Memory Access).

A seguir serão apresentadas as configurações mínimas para trabalhar com o SPI da Freedom Board KL25Z no modo Mestre. Apresentando as funções de inicialização do periférico e funções de escrita e leitura e, por fim, um exemplo de utilização da comunicação SPI.

 

 

Inicializando o SPI

 

Configurando a fonte de Clock:

O primeiro item a ser configurado é habilitar o Clock para o periférico. Para realizar esta tarefa é utilizado o registrador System Clock Gating Control Register 4 (SIM_SCGC4). Para escrever no registrador utiliza as macros SIM_SCGC4_SPI0_MASK para o SPI0 e SIM_SCGC4_SPI1_MASK para o SPI1.

A seguir imagens para ilustrar os parâmetros do registrador.

 

SPI para a placa FRDM-KL25Z

 

Para habilitar o Clock do periférico de SPI deve-se utilizar as seguintes macros:

 

 

Configurando os pinos do barramento da comunicação SPI:

Como já explicado acima, o microcontrolador presente na FRDM-KL25Z possui dois módulos SPI e cada módulo possui duas opções de pinos para arramento de comunicação SPI.

A tabela a seguir demonstra as opções de pinos para o módulo SPI0.

 

Pinos SPIAlternativa 0Alternativa 1
CSPTC4PTA14
SCKPTC5PTA15
MOSIPTC6PTA16
MISOPTC7PTA17 

 

A próxima tabela demonstra as opções de pinos para o módulo SPI1.

 

Pinos SPIAlternativa 0Alternativa 1
CSPTE4PTB10
SCKPTE2PTB11
MOSIPTE1PTB16
MISOPTE3PTB17 

 

Para configurar os pinos como barramento de comunicação SPI, deve habilitar o Clock para o pinos. Essa operação é feita através do registrador SIM_SCGC5, e deve-se utilizar a macro SIM_SCGC5_PORTC_MASK.

O segundo item a ser configurado é o Signal Multiplexing and Pin Assignments (Multiplexador de sinais do pino), que define a funcionalidade do pino. Para configurar deve utilizar o Pin Control Register n (PORTx_PCRn). Conforme é apresentado nas figuras abaixo, a comunicação SPI é a alternativa de número 2 (ALT2). Deve utilizar a macro PORT_PCR_MUX(x) para configurar o multiplexador de sinais do pino, onde x é alternativa de funcionalidade do pino.

Infelizmente nem todos os pinos estão disponíveis no PinOut da Freedom Board KL25Z. A seguir imagens com os pinos do barramento de comunicação SPI.

 

 

 

Configurando os parâmetros  comunicação SPI:

O próximo item que devemos configurar é o registrador SPI Control Register 1 (SPIx_C1). Trata-se de um registrador de 8 bits, que contém algumas configurações da comunicação SPI.  Conforme podemos observar na figura abaixo, cada bit do registrador corresponde a uma configuração.

 

 

Na tabela abaixo temos cada bit do registrador SPIx_C1 com sua macro de acesso e sua descrição.

 

BitMacroDescrição
SPIESPI_C1_SPIE_MASKSPI interrupt enable
SPESPI_C1_SPE_MASKSPI system enable
SPTIESPI_C1_SPE_MASKPermissão de interrupção de transmissão SP
MSTRSPI_C1_MSTR_MASKMaster/slave mode select
CPOLSPI_C1_CPOL_MASKClock polarity
CPHASPI_C1_CPHA_MASKClock phase
SSOESPI_C1_SSOE_MASKSlave select output enable
LSBFESPI_C1_LSBFE_MASKLSB first (shifter direction)

 

Outro registrador que devemos configurar é o Control Register 2 (SPIx_C2). Trata-se de um registrador de 8 bits, que contém algumas configurações da comunicação SPI.

 

Conforme podemos observar na figura abaixo, cada bit do registrador corresponde a uma configuração.

 

 

Na tabela abaixo temos cada bit do registrador SPIx_C2 com sua macro de acesso e sua descrição.

 

BitMacroDescrição
SPMIESPI_C2_SPMIE_MASKSPI match interrupt enable
Reserved--This field is reserved.
TXDMAESPI_C2_TXDMAE_MASKTransmit DMA enable
MODFENSPI_C2_MODFEN_MASKMaster mode-fault function enabl
BIDIROESPI_C2_BIDIROE_MASKBidirectional mode output enable
RXDMAESPI_C2_RXDMAE_MASKReceive DMA enable
SPISWAISPI_C2_SPISWAI_MASKSPI stop in wait mode
SPC0SPI_C2_SPC0_MASKSPI pin control 0

 

E por fim devemos configurar o registrador Baud Rate Register (SPIx_BR). Esse registrador é responsável pela frequência do clock da transmissão, onde é configurado pelo  Baud Rate Prescale e o Baud Rate Divisor. A seguir temos imagens que ilustra os itens do registrador.

 

 

Na tabela abaixo temos cada bit do registrador SPIx_BR com sua macro de acesso e sua descrição.

 

BitMacroDescrição
Reserved--This field is reserved.
SPPRSPI_BR_SPPR(x)SPI baud rate prescale divisor
SPRSPI_BR_SPR(x)SPI baud rate divisor

 

Os registradores apresentado acima são os itens mínimos que devemos configurar para iniciarmos a comunicação SPI com a Freedom Board KL25Z

 

 

Leitura e Escrita da comunicação SPI

 

Para a leitura e escrita no barramento de comunicação SPI utilizaremos mais dois registradores, são eles: SPI data register (SPIx_D) e SPI status register (SPIx_S).

 

O registrador SPI status register (SPIx_S) é utilizado apenas para leitura. Os seus quatros primeiros bits são reservados. Os bits restantes são para sinalizações, são algumas Flags de leitura.

 

A seguir são apresentadas imagens detalhando o registador SPIx_S.

 

 

Na tabela abaixo temos cada bit do registrador SPIx_S com sua macro de acesso e sua descrição.

 

BitMacroDescrição
SPRFSPI_S_SPRF_MASKSPI read buffer full flag
SPMFSPI_S_SPMF_MASKSPI transmit buffer empty flag
SPTEFSPI_S_SPTEF_MASKSPI transmit buffer empty flag
MODFSPI_S_MODF_MASKMaster mode fault flag
Reserved--This field is reserved

 

O registrador SPI data register (SPIx_D) é utilizado tanto para leitura quanto para escrita. Quando a comunicação está configurada no modo Mestre (Master), é utilizado para carregar o buffer de transmissão. Quando a comunicação estiver configurada Escravo (Slave), é através desse registrador que devemos ler o conteúdo do buffer.

 

A seguir é apresentada imagem que ilustra os detalhes do registrador SPI data register (SPIx_D).

 

 

A seguir é apresentada a biblioteca de software que desenvolvi para utilizar com a Freedom Board KL25Z.

 

Código fonte do arquivo spi.h:

 

 

Código fonte do arquivo spi.h:

 

 

 

Aplicação 

 

Para demonstrar a utilização da biblioteca de software apresentada acima, criei um circuito divisor de tensão utilizando o potenciômetro digital MCP41010 da empresa Microchip Technology. A ferramenta utilizada para o desenvolvimento da aplicação foi o Kinetis Design Studio IDE.

 

O MCP41010 é potenciômetro digital de 10k com 256 posições. A seguir temos imagem do circuito elétrico da aplicação.

 

 

A seguir temos o código fonte de aplicação:

 

 

A seguir temos imagens capturadas do osciloscópio com os sinais da comunicação SPI. Na primeira imagem temos os sinais do CS e Clock. Já na segunda imagem temos os sinais do CS e MOSI.

 

A seguir temos imagem de saída do circuito do divisor de tensão com o MCP41010. E podemos observar no osciloscópio sinal de saída do divisor tensão.

 

 

 

Conclusão

 

Neste artigo foi apresentada mais uma biblioteca de software para a Freedom Board KL25Z e projeto de demonstração com o potenciômetro digital MCP41010.

 

Nos próximos artigos vamos apresentar outras bibliotecas de software (Timer, UART e entre outras) para utilizar com FRDM-KL25. A biblioteca apresentada aqui está disponível no meu GitHub.

 

 

Referências

 

MCP41010

FRDM-KL25Z

KL25 Sub-Family Reference Manual 

Outros artigos da série

<< Bibliotecas para ADC da FRDM-KL25ZBiblioteca I2C para FRDM-KL25Z >>
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Evandro Teixeira
Desenvolvedor de Sistemas Embarcados. Sou formado Técnico em Instrumentação e Automação Industrial/Mecatrônica pelo Colégio Salesiano Dom Bosco de Americana-SP, cursei o Engenharia Elétrica com Ênfase em Eletrônica pela UNISAL Centro Universitário Salesiano de São Paulo e atualmente estou cursando Superior de Tecnologia em Análise e Desenvolvimento de Sistemas pela UNIP Universidade Paulista.

Deixe um comentário

avatar
 
  Notificações  
Notificar