Dear Sir Madam
We are working on CC1121 which is interfaced to 8051 core microcontroller.
The Transmission is seems OK as we are getting the GPIO status while transmission of Data.
But we are not getting the data at receiver end.
Can you please help to support here.
Attached is the RF receiver.c and transmitter.c file.
#include <N78E059A.H>
#include <TA6932.h>
#include "typedef.h"
#include "intrins.h"
#include "CC1121_REG_DEFINATION.H"
#include "RF_FUNCTION.H"
#include "RF_SPI_FUNC.H"
#define BLANK_NO_DIGIT 0
#define BLANK_1_DIGIT 1
#define BLANK_2_DIGIT 2
#define BLANK_3_DIGIT 3
#define BLANK_4_DIGIT 4
#define BLANK_5_DIGIT 5
#define FULL_MESSAGE 6
#define HALF_MESSAGE 3
#define SHOW_NEGATIVE 1
#define HIDE_NEGATIVE 0
#define SHOW_DP 1
#define HIDE_DP 0
#define FULL_INTENSITY 1
#define DIM_INTENSITY 0
#define DISPLAY_BLANK 0x2A
#define DISPLAY_DASH 0x29
#define NO_OF_DIGIT 6
#define SHOW 1
#define HIDE 0
#define BUZZER_ON BUZZER = 0;
#define BUZZER_OFF BUZZER = 1;
#define PAGE_SIZE 255
//************************************* RF RELATED MEMORY LOCATIONS DECLARATIONS
#define NVM_RF_PAGE 0x0F
#define NVM_RF_PAGE_START_ADDRESS 0xFF00
#define NVM_RF_DATA_LENGTH 11 //time being 47
#define NVM_RF_SIGNATURE 0xAA
#define NVM_RF_SIGNATURE_ADDRESS_LOC 0x00
#define NVM_RF_CONFIG_START_LOC 0x01
#define NVM_RF_PACKET_LENGTH_LOC 0x07
#define NVM_RF_COMM_ADDRESS_LOC 0x0A
//************************************* END OF RF RELATED MEMORY LOCATION DECLARATION
sbit DISP_6932_DT = P0^0;
sbit DISP_6932_CLK = P0^1;
sbit DISP_6932_STR = P0^2;
sbit RF_CS = P1^4;
sbit RF_MOSI = P1^5;
sbit RF_MISO = P1^6;
sbit RF_SCLK = P1^7;
sbit BUZZER = P2^0; // "0" = Buzzer ON , "1" = Buzzer OFF
idata DISPLAY_DIG DISPLAY;
extern code unsigned char CONFIG_ARRAY_NORMAL[47] ;
extern code unsigned char CONFIG_ARRAY_EXTENDED[64];
unsigned char bdata DP_REG _at_ 0x20;
sbit DP_LED = DP_REG^0;
sbit DP_SSD6 = DP_REG^1;//6
sbit DP_SSD5 = DP_REG^2;//5
sbit DP_SSD4 = DP_REG^3;//4
sbit DP_SSD3 = DP_REG^4;//3
sbit DP_SSD2 = DP_REG^5;//2
sbit DP_SSD1 = DP_REG^6;//1
sbit DP_BLANK = DP_REG^7;
unsigned char bdata LED_REG _at_ 0x22;
sbit LED_BATT = LED_REG^1; // "1" = LED is ON , "0" = LED is OFF
sbit LED_ZERO = LED_REG^3; // "1" = LED is ON , "0" = LED is OFF
sbit LED_TARE = LED_REG^6; // "1" = LED is ON , "0" = LED is OFF
sbit LED_LITER = LED_REG^0; // "1" = LED is ON , "0" = LED is OFF //LED_COUNT
sbit LED_HOLD = LED_REG^4; // "1" = LED is ON , "0" = LED is OFF
//sbit LED_BATT = LED_REG^1; // "1" = LED is ON , "0" = LED is OFF
//sbit LED_ZERO = LED_REG^3; // "1" = LED is ON , "0" = LED is OFF
//sbit LED_TARE = LED_REG^6; // "1" = LED is ON , "0" = LED is OFF
sbit LED_COUNT = LED_REG^7; // "1" = LED is ON , "0" = LED is OFF
bit RF_PRESENT , INTENSITY;
unsigned char RF_DEVICE_ADDRESS;
xdata unsigned char BUFFER[255] ;
void main(void)
{
RF_DEVICE_ADDRESS = 0x05;
INIT_DISPLAY ();
FILL_DISPLAY (0x08 , SHOW_DP);
DELAY(5000);
CLEAR_BUFFER();
// NVM_WRITE_RF_PARAMETERS();
// CHECK_RF_AND_CONFIGURE ();
// DELAY(5000);
if(INIT_CC1121())
PROCESS_RF_ERROR ();
RAM_TEST();
PACKET.COMMUNICATION_ADDRESS = RF_DEVICE_ADDRESS;
PACKET.SLAVE_OPERATION_COMMAND = SLAVE_COMMAND_NORMAL_OPERATION;
CLEAR_BUFFER();
CONVERT_TO_DECIMAL_AND_DISPLAY (123456 , 4 , 1 , 0);
while(1)
{
TRANSMIT_DATA ();
DELAY(50000);
}
}
void FILL_DISPLAY (unsigned char DATA , bit SHOW_HIDE_DP)
{
unsigned char SAVE_DP = DP_REG;
if(!SHOW_HIDE_DP)
DP_REG = 0;
DISPLAY.SSD1 = DATA ;
DISPLAY.SSD2 = DATA ;
DISPLAY.SSD3 = DATA ;
DISPLAY.SSD4 = DATA ;
DISPLAY.SSD5 = DATA ;
DISPLAY.SSD6 = DATA ;
DISPLAY.LED = LED_REG;
SHOW_DISPLAY ();
DP_REG = SAVE_DP;
}
void SHOW_DISPLAY (void)
{
DISPLAY.LED = LED_REG;
SHOW_6932_DISPLAY ();
}
// void CHECK_RF_AND_CONFIGURE (void)
// {
// INIT_CC1121 ();
// // if(RF_PRESENT)
// // {
// // if(NVM_BYTE_READ (NVM_RF_PAGE_START_ADDRESS + NVM_RF_SIGNATURE_ADDRESS_LOC) != NVM_RF_SIGNATURE)
// // NVM_WRITE_RF_PARAMETERS ();
// // NVM_READ_LOAD_RF_PARAMETERS ();
// // INIT_CC1101 ();
// // }
// _nop_();
// }
bit INIT_CC1121 (void)
{
if( CC1121_SPI_REG_SEND_STROBE (cc1121_SRES) )
return (1);
if( CC1121_SPI_WRITE (0 , CONFIG_ARRAY_NORMAL , sizeof(CONFIG_ARRAY_NORMAL) ))
return(1);
if( CC1121_SPI_WRITE (0x2F00 , CONFIG_ARRAY_EXTENDED , sizeof(CONFIG_ARRAY_EXTENDED) ))
return(1);
// manualCalibration();
return (0);
}
//void NVM_WRITE_RF_PARAMETERS (void)
//{
// xdata unsigned char i = 0 , *PTR = &CC1121_CONFIGURATION;
// CLEAR_BUFFER();
//// BUFFER[i] = 0X12; //NVM_RF_SIGNATURE;
// for(i = 0; i <= NVM_RF_DATA_LENGTH ; i++)
// {BUFFER[i] = *(PTR + i);} //- 1);
//// ERASE_DATA_FLASH_PAGE (NVM_RF_PAGE);
//// WRITE_TO_NVM (BUFFER , NVM_RF_PAGE_START_ADDRESS , NVM_RF_DATA_LENGTH + 1 );
//}
/*
void NVM_WRITE_RF_PARAMETERS (void)
{
xdata unsigned char i = 0 , *PTR = &CC1101_CONFIGURATION;
CLEAR_BUFFER();
BUFFER[i] = NVM_RF_SIGNATURE;
for(i = 1; i <= NVM_RF_DATA_LENGTH ; i++)
BUFFER[i] = *(PTR + i - 1);
ERASE_DATA_FLASH_PAGE (NVM_RF_PAGE);
WRITE_TO_NVM (BUFFER , NVM_RF_PAGE_START_ADDRESS , NVM_RF_DATA_LENGTH + 1 );
}
void NVM_READ_LOAD_RF_PARAMETERS (void)
{
READ_FROM_NVM (BUFFER , NVM_RF_PAGE_START_ADDRESS + NVM_RF_CONFIG_START_LOC , NVM_RF_DATA_LENGTH );
RF_DEVICE_ADDRESS = BUFFER[NVM_RF_COMM_ADDRESS_LOC - 1];
}
void READ_MODIFY_WRITE_RF_ADDRESS (unsigned char MASTER_ADDRESS)
{
CLEAR_BUFFER ();
READ_FROM_NVM (BUFFER , NVM_RF_PAGE_START_ADDRESS , PAGE_SIZE);
BUFFER[(unsigned char)(NVM_RF_PAGE_START_ADDRESS + NVM_RF_COMM_ADDRESS_LOC)] = MASTER_ADDRESS;
ERASE_DATA_FLASH_PAGE (NVM_RF_PAGE);
WRITE_TO_NVM (BUFFER , NVM_RF_PAGE_START_ADDRESS , PAGE_SIZE );
RESTART_MICROCONTROLLER ();
}
void RESTART_MICROCONTROLLER (void)
{
TA = 0xAA;
TA = 0x55;
CHPCON &= 0xFD;
TA = 0xAA;
TA = 0x55;
CHPCON |= 0x80;
}
*/
void DELAY (unsigned long i)
{
while(i)
i--;
}
void RAM_TEST (void)
{
unsigned char i;
for( i=0 ; i < 10 ; i++ )
{
DISPLAY.SSD1 = i;
DISPLAY.SSD2 = i;
DISPLAY.SSD3 = i;
DISPLAY.SSD4 = i;
DISPLAY.SSD5 = i;
DISPLAY.SSD6 = i;
SHOW_DISPLAY ();
DELAY(5000);
BUZZER_ON
DELAY(8000);
BUZZER_OFF
}
}
void CLEAR_BUFFER (void)
{
unsigned char i;
for(i=0;i<PAGE_SIZE;i++)
BUFFER[i] = 0xFF;
}
void CONVERT_TO_DECIMAL_AND_DISPLAY (unsigned long HEX_VALUE , unsigned char NO_OF_BLANK , bit DISPLAY_YES_NO , bit NEG_YES_NO) //long // Routine to Convert FARE to DECIMAL and DISPLAY
{
unsigned char DIG[NO_OF_DIGIT];
unsigned char CN;
for(CN = 0 ; CN < NO_OF_DIGIT ; CN++)
{
DIG[CN] = HEX_VALUE % 10;
HEX_VALUE /= 10;
}
if(NO_OF_BLANK)
{
for(CN = NO_OF_DIGIT-1 ; CN > (NO_OF_DIGIT - 1 - NO_OF_BLANK) ; CN--) // Leading Zero Blanking Loop
{
if(((CN == NO_OF_DIGIT-1) && (DIG[CN] == 0)) || ((DIG[CN] == 0)&&(DIG[CN+1] == DISPLAY_BLANK)))
DIG[CN] = DISPLAY_BLANK;
}
}
DISPLAY.SSD1 = DIG[0];
DISPLAY.SSD2 = DIG[1];
DISPLAY.SSD3 = DIG[2];
DISPLAY.SSD4 = DIG[3];
DISPLAY.SSD5 = DIG[4];
DISPLAY.SSD6 = DIG[5];
if(DISPLAY_YES_NO)
SHOW_DISPLAY ();
}
void PROCESS_RF_ERROR (void)
{
DISPLAY.SSD1 = DISPLAY_BLANK;
DISPLAY.SSD2 = 0x1A;
DISPLAY.SSD3 = 0x0F;
DISPLAY.SSD4 = 0x0E;
DISPLAY.SSD5 = 0x1A;
DISPLAY.SSD6 = 0x1A;
SHOW_DISPLAY ();
while(1);
}