⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cc1100lib.c

📁 这是一个在PIC单片机上对射频收发器CC1100的操作程序。里面包含了一个发送和一个接收程序。采用C语言编的。
💻 C
📖 第 1 页 / 共 2 页
字号:
void halSpiWriteBurstReg(BYTE addr, BYTE *buffer, BYTE count);
void halSpiReadBurstReg(BYTE addr, BYTE *buffer, BYTE count);
void halSpiWriteReg(BYTE addr, BYTE value);
void halSpiStrobe(BYTE strobe);
BYTE halSpiReadReg(BYTE addr);
BYTE halSpiReadStatus(BYTE addr);
void halRfWriteRfSettings1();
void halRfWriteRfSettings2();
void halRfSendPacket(BYTE *txBuffer, UINT8 size);
BYTE halRfReceivePacket(BYTE *rxBuffer, UINT8 *length);

#define WRITE_BURST     0x40
#define READ_SINGLE     0x80
#define READ_BURST      0xC0
//-------------------------------------------------------------------------------------------------------
//  BYTE halSpiReadReg(BYTE addr)
//
//  DESCRIPTION:
//      This function gets the value of a single specified CC1100 register.
//
//  ARGUMENTS:
//      BYTE addr
//          Address of the CC1100 register to be accessed.
//
//  RETURN VALUE:
//      BYTE
//          Value of the accessed CC1100 register.
//-------------------------------------------------------------------------------------------------------
BYTE halSpiReadReg(BYTE addr) {
	unsigned char i,value;
    P_SCLK=0;
	P_CSn=0;
	addr|=READ_SINGLE;
	for(i=0;i<8;i++) {
		if(addr&0x80) P_SI=1;
		else P_SI=0;
		P_SCLK=1;
		addr <<=1;
		P_SCLK=0; 
	}
	P_SI=0;
	value=0; 
	for(i=0;i<8;i++) {
		value <<=1;
		P_SCLK=1;
		if(P_SO) value|=0x01;
		else value&=0xFE;
		P_SCLK=0;
	}
	P_CSn=1;
	return value;
}// halSpiReadReg
//-------------------------------------------------------------------------------------------------------
//  BYTE halSpiReadStatus(BYTE addr)
//
//  DESCRIPTION:
//      This function reads a CC1100 status register.
//
//  ARGUMENTS:
//      BYTE addr
//          Address of the CC1100 status register to be accessed.
//
//  RETURN VALUE:
//      BYTE
//          Value of the accessed CC1100 status register.
//-------------------------------------------------------------------------------------------------------
BYTE halSpiReadStatus(BYTE addr) {
	unsigned char i,value;
    P_SCLK=0;
	P_CSn=0;
	addr|=READ_BURST;
	for(i=0;i<8;i++) {
		if(addr&0x80) P_SI=1;
		else P_SI=0;
		P_SCLK=1;
		addr <<=1;
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
		P_SCLK=0; 
	}
	P_SI=0;
	value=0; 
	for(i=0;i<8;i++) {
		value <<=1;
		P_SCLK=1;
		if(P_SO) value|=0x01;
		else value&=0xFE;
		P_SCLK=0;
	}
	P_CSn=1;
	return value;
}// halSpiReadStatus
//-------------------------------------------------------------------------------------------------------
//  void halSpiWriteReg(BYTE addr, BYTE value)
//
//  DESCRIPTION:
//      Function for writing to a single CC1100 register
//
//  ARGUMENTS:
//      BYTE addr
//          Address of a specific CC1100 register to accessed.
//      BYTE value
//          Value to be written to the specified CC1100 register.
//-------------------------------------------------------------------------------------------------------
void halSpiWriteReg(BYTE addr, BYTE value) {
	unsigned char i;
    P_SCLK=0;
	P_CSn=0;
	addr&=0x7F;
	for(i=0;i<8;i++) {
		if(addr&0x80) P_SI=1;
		else P_SI=0;
		P_SCLK=1;
		addr <<=1;
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
		P_SCLK=0; 
	} 
	P_SI=0;
	for(i=0;i<8;i++) {
		if(value&0x80) P_SI=1;
		else P_SI=0;
		P_SCLK=1;
		value <<=1;
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
		P_SCLK=0; 
	}
	P_SI=0;
	P_CSn=1;

}// halSpiWriteReg
//-------------------------------------------------------------------------------------------------------
//  void halSpiReadBurstReg(BYTE addr, BYTE *buffer, BYTE count)
//
//  DESCRIPTION:
//      This function reads multiple CC1100 register, using SPI burst access.
//
//  ARGUMENTS:
//      BYTE addr
//          Address of the first CC1100 register to be accessed.
//      BYTE *buffer
//          Pointer to a byte array which stores the values read from a
//          corresponding range of CC1100 registers.
//      BYTE count
//          Number of bytes to be written to the subsequent CC1100 registers.
//-------------------------------------------------------------------------------------------------------
void halSpiReadBurstReg(BYTE addr, BYTE *buffer, BYTE count) {
	unsigned char j,i,value;
    P_SCLK=0;
	P_CSn=0;
	addr|=READ_BURST;
	for(i=0;i<8;i++) {
		if(addr&0x80) P_SI=1;
		else P_SI=0;
		P_SCLK=1;
		addr <<=1;
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
		P_SCLK=0; 
	}
	P_SI=0;
	value=0; 
	for(j=0;j<count;j++) {
	  for(i=0;i<8;i++) {
		value <<=1;
		P_SCLK=1;
		if(P_SO) value|=0x01;
		else value&=0xFE;
		P_SCLK=0;
	  }
	  buffer[j]=value;
	}
	P_CSn=1;
}// halSpiReadBurstReg

//-------------------------------------------------------------------------------------------------------
//  void halSpiWriteBurstReg(BYTE addr, BYTE *buffer, BYTE count)
//
//  DESCRIPTION:
//      This function writes to multiple CC1100 register, using SPI burst access.
//
//  ARGUMENTS:
//      BYTE addr
//          Address of the first CC1100 register to be accessed.
//      BYTE *buffer
//          Array of bytes to be written into a corresponding range of
//          CCxx00 registers, starting by the address specified in _addr_.
//      BYTE count
//          Number of bytes to be written to the subsequent CC1100 registers.   
//-------------------------------------------------------------------------------------------------------
void halSpiWriteBurstReg(BYTE addr, BYTE *buffer, BYTE count) {
	unsigned char i,j,value;
    P_SCLK=0;
	P_CSn=0;
	addr|=WRITE_BURST;
	for(i=0;i<8;i++) {
		if(addr&0x80) P_SI=1;
		else P_SI=0;
		P_SCLK=1;
		addr <<=1;
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
		P_SCLK=0; 
	} 
	P_SI=0;
	for(j=0;j<count;j++) {
	  value=buffer[j];
	  for(i=0;i<8;i++) {
		if(value&0x80) P_SI=1;
		else P_SI=0;
		P_SCLK=1;
		value <<=1;
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
//		asm("nop"); asm("nop"); asm("nop"); asm("nop");
		P_SCLK=0; 
	  }
	  P_SI=0;
	  for(i=0;i<10;i++);
	}
	P_CSn=1;
}// halSpiWriteBurstReg

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -