PASII/CandeII_1.4/Driver/spi.c

81 lines
1.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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; //数字越小,速度越快
#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写函数
输入参数uint8_t *p_data 指向要发送的数据
uint8_t num 数据的长度
***********************************************************/
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读函数
输入参数uint8_t *p_data 指向要接收数据的位置
uint8_t num 数据的长度
***********************************************************/
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;
}
}