Biblioteca SPI para a placa FRDM-KL25Z

FRDM KL25Z destaque

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
sim scgc4

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.

alt0
alt1
alt2
alt3

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.

spi c1

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.

spi c2

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
ReservedThis 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.

spi br
spi br d

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

BitMacroDescrição
ReservedThis 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.

spix s
spix s tabela

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
ReservedThis 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).

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.

circuito

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.

WP 20170326 002
WP 20170326 003

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.

WP 20170326 008

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 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

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

[wpseo_breadcrumb]
Comentários:
Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments
Talvez você goste:

Séries



Outros da Série

Menu
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services