• 大小: 3.11 KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-12-31
  • 语言: 其他
  • 标签: 开发技术  C  

资源简介

通过TTL门电路转换电平,硬件SPI不同于IO的模拟速度更快更稳定。可采用中断触发方式

资源截图

代码片段和文件信息

#include“Includes.h“

INT8U T_Address[5]={0x340x430x100x100x01};
INT8U R_Address[5]={0x340x430x100x100x01};
/******************************************************************************************/
/*硬件SPI寄存器配置
void SPI_Init(void)
{  
  DDRS=0xe0;
  SPI0CR1=0x50;    //01010010  0x52  CPHA一定是零
  //SPI0CR2=0x10; 
  SPI0BR=0x42;     //40/80=0.5MHZ;
}*/
/******************************************************************************************/
/*延时函数*/
/******************************************************************************************/
void inerDelay_us(unsigned char n)
{
for(;n>0;n--) {}
}
//****************************************************************************************/
/*NRF24L01初始化*/
//***************************************************************************************/
void init_NRF24L01(void)
{
    inerDelay_us(100);
  CE=0;    // chip enable
  CSN=1;   // Spi disable 24l01初始化之前片选一定要拉高!!!!!!!!!!!!!!!!!!!!  
  //SCK=0;   // Spi clock line init high
SPI_Write_Buf(WRITE_REG + TX_ADDR T_Address TX_ADR_WIDTH);    // 写本地地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0 R_Address RX_ADR_WIDTH); // 写接收端地址
SPI_RW_Reg(WRITE_REG + EN_AA 0x01);      //  频道0自动 ACK应答允许
SPI_RW_Reg(WRITE_REG + EN_RXADDR 0x01);  //  允许接收地址只有频道0,如果需要多频道可以参考Page21  
SPI_RW_Reg(WRITE_REG + SETUP_RETR 0x1a);
SPI_RW_Reg(WRITE_REG + RF_CH40);        //   设置信道工作为2.4GHZ,收发必须一致
SPI_RW_Reg(WRITE_REG + RX_PW_P0 RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节
SPI_RW_Reg(WRITE_REG + RF_SETUP 0x07);    //设置发射速率为1MHZ,发射功率为最大值0dB
SPI_RW_Reg(WRITE_REG + CONFIG 0x3f);     // IRQ收发完成中断响应,16位CRC,主发送

}
/****************************************************************************************************/
/*函数:uint SPI_RW(uint uchar)*/
/*功能:NRF24L01的SPI写时序*/
/****************************************************************************************************/
INT8U SPI_RW(INT8U data)
{
  while (!SPI0SR_SPTEF);   
SPI0DRL = data;
while(!(SPI0SR_SPIF));
return SPI0DRL;

/****************************************************************************************************/
/*函数:uchar SPI_Read(uchar reg)*/
/*功能:NRF24L01的SPI时序*/
/****************************************************************************************************/
uchar SPI_Read(uchar reg)
{
uchar reg_val;

CSN = 0;                // CSN low initialize SPI communication...
SPI_RW(reg);            // Select register to read from..
reg_val =~SPI_RW(0);    // ..then read registervalue
CSN = 1;                // CSN high terminate SPI communication

return(reg_val);        // return register value
}
/****************************************************************************************************/
/*功能:NRF24L01读写寄存器函数*/
/****************************************************************************************************/
uint SPI_RW_Reg(uchar reg uchar value)
{
uint status;

CSN = 0;                   // CSN low

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6372  2013-06-04 00:12  NRF24L01-SPI\NRF24L01_SPI.c

     文件       3514  2013-06-03 23:52  NRF24L01-SPI\NRF24L01_SPI.h

     目录          0  2013-06-11 12:38  NRF24L01-SPI

----------- ---------  ---------- -----  ----

                 9886                    3


评论

共有 条评论