📄 cc1100lib.c
字号:
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 + -