void cc1101_init(void) { SPI_CSN_L(); Mrfi_DelayUsec(10); SPI_CSN_H(); Mrfi_DelayUsec(40); SPI_CSN_L(); while (SPI_MISO_READ()); spi_writebyte(SRES); while (SPI_MISO_READ()); SPI_CSN_H(); RfWriteRfSettings(); Mrfi_SpiWriteReg(TI_CCxxx0_IOCFG0, 0x06); { uint8_t tmp = 0; tmp = Mrfi_SpiReadReg(TI_CCxxx0_IOCFG0); if(tmp != 0x06) while(1); } Mrfi_SpiCmdStrobe(SIDLE); Mrfi_SpiCmdStrobe(SRX); P2IES |= GPIO0; // Ñ¡ÔñÉÏÉý/ϽµÑØ P2REN |= GPIO0; // push-up enable P2IFG &=~GPIO0; P2IE |= GPIO0; }
/* ***************************************************************** * 读寄存器 ***************************************************************** */ uint8_t NRF_Read_Reg(uint8_t reg) { uint8_t reg_val; SPI_CSN_L(); SPI_RW(reg); reg_val = SPI_RW(0); /* 读取该寄存器返回数据 */ SPI_CSN_H(); /* 禁止该器件 */ return reg_val; }
/* ***************************************************************** * 写寄存器 ***************************************************************** */ uint8_t NRF_Write_Reg(uint8_t reg, uint8_t value) { uint8_t status; SPI_CSN_L(); status = SPI_RW(reg); SPI_RW(value); /* 写数据 */ SPI_CSN_H(); /* 禁止该器件 */ return status; }
uint8_t spiBurstFifoAccess(uint8_t addrByte, uint8_t * pData, uint8_t len) { SPI_CSN_L(); // while (SPI_MISO_READ()); spi_writebyte(addrByte); SPI_WriteBuf(pData, len); SPI_CSN_H(); return 1; }
uint8_t Mrfi_SpiCmdStrobe(uint8_t cmd) { uint8_t statusByte; SPI_CSN_L(); // while (SPI_MISO_READ()); statusByte = spi_writebyte(cmd); SPI_CSN_H(); return(statusByte); }
uint8_t spiRegAccess(uint8_t addrByte, uint8_t writeValue) { uint8_t readValue; SPI_CSN_L(); // while (SPI_MISO_READ()); spi_writebyte(addrByte); readValue = spi_writebyte(writeValue); SPI_CSN_H(); return(readValue); }
/* ***************************************************************** * * 写缓冲区 * ***************************************************************** */ uint8_t NRF_Write_Buf(uint8_t reg, uint8_t *pBuf, uint8_t uchars) { uint8_t i; uint8_t status; SPI_CSN_L(); /* 选通器件 */ status = SPI_RW(reg); /* 写寄存器地址 */ for(i=0; i<uchars; i++) { SPI_RW(pBuf[i]); /* 写数据 */ } SPI_CSN_H(); /* 禁止该器件 */ return status; }
/* ***************************************************************** * 读缓冲区 ***************************************************************** */ uint8_t NRF_Read_Buf(uint8_t reg, uint8_t *pBuf, uint8_t uchars) { uint8_t i; uint8_t status; SPI_CSN_L(); /* 选通器件 */ status = SPI_RW(reg); /* 写寄存器地址 */ for(i=0; i<uchars; i++) { pBuf[i] = SPI_RW(0); /* 读取返回数据 */ } SPI_CSN_H(); /* 禁止该器件 */ return status; }
void gpio_init(void) { P1DIR |= BIT0; P1DIR |= MOSI + CLK + CSN; P1DIR &=~MISO; P2DIR &=~GPIO0; P1REN |= MISO; SPI_SCLK_L(); SPI_MOSI_L(); SPI_CSN_H(); }
void SPI1_INIT(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); /*配置 SPI_NRF_SPI的 SCK,MISO,MOSI引脚,GPIOA^5,GPIOA^6,GPIOA^7 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用功能 GPIO_Init(GPIOA, &GPIO_InitStructure); /*配置SPI_NRF_SPI的CE引脚,和SPI_NRF_SPI的 CSN 引脚:*/ //NRF_CE--PA12 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); //NRF_CSN--PA4 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); SPI_CSN_H(); SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //双线全双工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //主模式 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //数据大小8位 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //时钟极性,空闲时为低 SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //第1个边沿有效,上升沿为采样时刻 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信号由软件产生 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; //8分频,9MHz SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //高位在前 SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStructure); /* Enable SPI1 */ SPI_Cmd(SPI1, ENABLE); printf("SPI bus init success...\r\n"); }