81 lines
1.8 KiB
C
81 lines
1.8 KiB
C
|
#include "spi.h"
|
|||
|
#include "gpio.h"
|
|||
|
|
|||
|
static SPI_CTRL_TYPE * SPI_MASTER_CTRL = ((SPI_CTRL_TYPE *) SPI_MASTER_BASE);
|
|||
|
|
|||
|
void spi_init(enum spi_interface interface)
|
|||
|
{
|
|||
|
PIN_CONFIG->PIN_23_SEL = PIN_SEL_SPIM_CLK; //CLK
|
|||
|
PIN_CONFIG->PIN_22_SEL = PIN_SEL_SPIM_MISO; // DI
|
|||
|
PIN_CONFIG->PIN_20_SEL = PIN_SEL_SPIM_CSN; // CS
|
|||
|
PIN_CONFIG->PIN_24_SEL = PIN_SEL_SPIM_MOSI; // DO
|
|||
|
|
|||
|
SPI_MASTER_CTRL->MSB = 1;
|
|||
|
SPI_MASTER_CTRL->SPEED = 0; //<2F><><EFBFBD><EFBFBD>ԽС<D4BD><D0A1><EFBFBD>ٶ<EFBFBD>Խ<EFBFBD><D4BD>
|
|||
|
|
|||
|
#if 1
|
|||
|
SPI_MASTER_CTRL->CPOL = 0;
|
|||
|
SPI_MASTER_CTRL->CPHA = 0;
|
|||
|
#elif 0
|
|||
|
//untested
|
|||
|
SPI_MASTER_CTRL->CPOL = 0;
|
|||
|
SPI_MASTER_CTRL->CPHA = 1;
|
|||
|
#elif 0
|
|||
|
//untested
|
|||
|
SPI_MASTER_CTRL->CPOL = 1;
|
|||
|
SPI_MASTER_CTRL->CPHA = 0;
|
|||
|
#else
|
|||
|
SPI_MASTER_CTRL->CPOL = 1;
|
|||
|
SPI_MASTER_CTRL->CPHA = 1;
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
void spi_cs_enable(enum spi_interface interface)
|
|||
|
{
|
|||
|
SPI_MASTER_CTRL->PE = 1; // CS Low
|
|||
|
}
|
|||
|
|
|||
|
void spi_cs_disable(enum spi_interface interface)
|
|||
|
{
|
|||
|
SPI_MASTER_CTRL->PE = 0; // CS High
|
|||
|
}
|
|||
|
|
|||
|
/***********************************************************
|
|||
|
spiд<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>uint8_t *p_data ָ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint8_t num <EFBFBD><EFBFBD><EFBFBD>ݵij<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
***********************************************************/
|
|||
|
void spi_write(uint8_t *p_data,uint16_t num)
|
|||
|
{
|
|||
|
// tx data
|
|||
|
for(;num>0;num--)
|
|||
|
{
|
|||
|
SPI_MASTER_CTRL->OUT = *p_data;
|
|||
|
SPI_MASTER_CTRL->START = 1;
|
|||
|
p_data++;
|
|||
|
while(SPI_MASTER_CTRL->START == 1);
|
|||
|
SPI_MASTER_CTRL->DONE = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/***********************************************************
|
|||
|
spi<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>uint8_t *p_data ָ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>λ<EFBFBD><EFBFBD>
|
|||
|
uint8_t num <EFBFBD><EFBFBD><EFBFBD>ݵij<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
***********************************************************/
|
|||
|
void spi_read(uint8_t *p_data,uint16_t num)
|
|||
|
{
|
|||
|
// rx data
|
|||
|
for(;num>0;num--)
|
|||
|
{
|
|||
|
SPI_MASTER_CTRL->OUT = 0xFF;
|
|||
|
SPI_MASTER_CTRL->START = 1;
|
|||
|
while(SPI_MASTER_CTRL->START == 1);
|
|||
|
*p_data = SPI_MASTER_CTRL->IN;
|
|||
|
p_data++;
|
|||
|
SPI_MASTER_CTRL->DONE = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|