/*
analogysemi
xutong 2024/1/23
*/
#ifndef __BSP_LPSPI_H
#define __BSP_LPSPI_H
#include "config.h"
#define SPI_SCLK(x) P25=(x)
#define SPI_MOSI(x) P23=(x)
#define SPI_MISO P24
#define SPI_CS1(x) P22=(x)
#define SPI_CS2(x) P21=(x)
void LPSPI_Init(void);
void Lpspi_Write(uint8_t datasize,uint8_t *datas);
void Lpspi_Read(uint8_t datasize,uint8_t *datas,uint8_t *Rxdata);
#endif /* __BSP_LPSPI_H */
#include "bsp_lpspi.h"
#include "STC8xxxx.H"
void LPSPI_Init(void)
{
//设置除了MISO为输入外,其他为输出模式
P2M0 = 0xEF; //设置P2.0~P2.7为推挽输出模式
P2M1 = 0x10;
}
void SPI_Transmit_Data_mode1(uint8_t *TXData ,uint8_t Size) //SCLK low second edge
{
uint8_t i,a=0,datas=0;
for(a=0;a<Size;a++)
{
datas = TXData[a];
for(i = 0;i < 8;i++)
{
SPI_SCLK(1);
if(datas&(0x80))//data bit = 1
{
SPI_MOSI(1);//MOSI SET 1
}
else
{
SPI_MOSI(0);//MOSI SET 1
}
datas <<=1;
SPI_SCLK(0);
}
}
}
void SPI_Receive_Data_mode1( uint8_t *TXData,uint8_t *Rxdata ,uint8_t Size) //SCLK low second edge
{
uint8_t i,a,datas;
for(a=0;a<Size;a++)
{
datas = TXData[a];
Rxdata[a]=0;
for(i = 0;i < 8;i++)
{
SPI_SCLK(1);
if(datas&(0x80))//data bit = 1
{
SPI_MOSI(1);//MOSI SET 1
}
else
{
SPI_MOSI(0);//MOSI SET 0
}
datas <<=1;
SPI_SCLK(0);
if(SPI_MISO==1)
{
Rxdata[a]|=(0x80 >>i);
}
}
}
}
void Lpspi_Write(uint8_t datasize,uint8_t *datas)
{
SPI_Transmit_Data_mode1(datas,datasize);
}
void Lpspi_Read(uint8_t datasize,uint8_t *datas,uint8_t *Rxdata)
{
SPI_Receive_Data_mode1(datas,Rxdata,datasize);
}