136 lines
2.7 KiB
C
136 lines
2.7 KiB
C
#include "M451Series.h"
|
||
#include "spi_hal.h"
|
||
|
||
void Spi_init()
|
||
{
|
||
/* Set PB multi-function pins for spi */
|
||
SYS->GPB_MFPL &= ~(SYS_GPB_MFPL_PB5MFP_Msk | SYS_GPB_MFPL_PB6MFP_Msk | SYS_GPB_MFPL_PB7MFP_Msk);
|
||
SYS->GPB_MFPL |= (SYS_GPB_MFPL_PB5MFP_SPI0_MOSI0 | SYS_GPB_MFPL_PB6MFP_SPI0_MISO0|SYS_GPB_MFPL_PB7MFP_SPI0_CLK);
|
||
|
||
SYS->GPB_MFPH &= ~(SYS_GPB_MFPH_PB13MFP_Msk | SYS_GPB_MFPH_PB14MFP_Msk | SYS_GPB_MFPH_PB15MFP_Msk);
|
||
SYS->GPB_MFPL |= (SYS_GPB_MFPH_PB13MFP_GPIO | SYS_GPB_MFPH_PB14MFP_GPIO|SYS_GPB_MFPH_PB15MFP_GPIO);
|
||
|
||
//SYS->GPC_MFP|=((0x01<<0)|(0x01<<1)|(0x01<<2)|(0x01<<3));
|
||
GPIO_SetMode(PB,BIT14,GPIO_MODE_OUTPUT); // CSN
|
||
GPIO_SetMode(PB,BIT13,GPIO_MODE_OUTPUT); // CE
|
||
GPIO_SetMode(PB,BIT15,GPIO_MODE_INPUT); //IRQ
|
||
|
||
PB14 = 1;
|
||
PB13= 0;
|
||
|
||
CLK_EnableModuleClock(SPI0_MODULE);
|
||
|
||
SYS_ResetModule(SPI0_RST);
|
||
|
||
/* PWM clock frequency can be set equal or double to HCLK by choosing case 1 or case 2 */
|
||
/* case 1.PWM clock frequency is set equal to HCLK: select PWM module clock source as PCLK */
|
||
CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL2_SPI0SEL_PCLK0, NULL);
|
||
|
||
SPI_Open(SPI0,SPI_MASTER,SPI_MODE_0,8,40000);
|
||
|
||
SPI_DisableAutoSS(SPI0);
|
||
}
|
||
|
||
void delayAny(){
|
||
for(int x = 0;x < 15;x++){
|
||
x = x;;
|
||
}
|
||
}
|
||
void spi_enable()
|
||
{
|
||
PB14= 0;
|
||
delayAny();
|
||
|
||
//SPI_SET_SS_LOW(SPI0);
|
||
}
|
||
void spi_disable()
|
||
{
|
||
delayAny();
|
||
|
||
PB14 = 1;
|
||
//SPI_SET_SS_HIGH(SPI0);
|
||
}
|
||
|
||
/*
|
||
|
||
*/
|
||
uchar spi_send(unsigned char data)
|
||
{
|
||
SPI_WRITE_TX(SPI0,data);
|
||
while(SPI_IS_BUSY(SPI0) == 1) ;
|
||
return SPI_READ_RX(SPI0);
|
||
}
|
||
/*
|
||
|
||
*/
|
||
uchar spi_read()
|
||
{
|
||
uchar ret;
|
||
SPI_WRITE_TX(SPI0, 0x0);
|
||
while(SPI_IS_BUSY(SPI0) == 1) ;
|
||
ret= SPI_READ_RX(SPI0);
|
||
//SPI0->CNTRL.IF=1;
|
||
return ret;
|
||
}
|
||
|
||
uchar nrf_read(uchar adress)
|
||
{
|
||
uchar ret;
|
||
spi_enable();
|
||
spi_send(adress);
|
||
|
||
ret= spi_read();
|
||
spi_disable();
|
||
return ret;
|
||
}
|
||
|
||
|
||
|
||
uchar nrf_wf(unsigned char dat)
|
||
{
|
||
uchar ret;
|
||
spi_enable();
|
||
spi_send(dat);
|
||
spi_disable();
|
||
return ret;
|
||
}
|
||
|
||
uchar nrf_write(uchar adress,uchar data)
|
||
{
|
||
uchar ret;
|
||
spi_enable();
|
||
spi_send(adress);
|
||
spi_send(data);
|
||
spi_disable();
|
||
return ret;
|
||
}
|
||
|
||
/*****************SPI??TXFIFO?????**********************************/
|
||
uchar NRFWriteTxDate(uchar RegAddr,uchar *TxDate,uchar DateLen)
|
||
{
|
||
uchar BackDate,i;
|
||
BackDate=spi_send(RegAddr);
|
||
for(i=0;i<DateLen;i++)
|
||
{
|
||
spi_send(*TxDate++);
|
||
}
|
||
return(BackDate);
|
||
}
|
||
|
||
|
||
//<2F><>ָ<EFBFBD><D6B8>λ<EFBFBD><CEBB>дָ<D0B4><D6B8><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>
|
||
//reg:<3A>Ĵ<EFBFBD><C4B4><EFBFBD>(λ<><CEBB>)
|
||
//*pBuf:<3A><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||
//len:<3A><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||
//<2F><><EFBFBD><EFBFBD>ֵ,<2C>˴ζ<CBB4><CEB6><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>ֵ
|
||
uchar nrf_writebuf(uchar reg, uchar *pBuf, uchar len)
|
||
{
|
||
uchar status,u8_ctr;
|
||
spi_enable();
|
||
status = spi_send(reg);//<2F><><EFBFBD>ͼĴ<CDBC><C4B4><EFBFBD>ֵ(λ<><CEBB>),<2C><><EFBFBD><EFBFBD>ȡ״ֵ̬
|
||
for(u8_ctr=0; u8_ctr<len; u8_ctr++)
|
||
spi_send(*pBuf++); //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
spi_disable();
|
||
return status; //<2F><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD>״ֵ̬
|
||
}
|