cc1100lib.c

来自「这是一个在PIC单片机上对射频收发器CC1100的操作程序。里面包含了一个发送和」· C语言 代码 · 共 456 行 · 第 1/2 页

C
456
字号
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 + =
减小字号Ctrl + -
显示快捷键?