Sample CC1200 code (running on Nucleo F303RE for Module17 to CC1200 eval board interfacing)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//consts | |
const uint8_t cc1200_tx_settings[50*3] = | |
{ | |
0x00, 0x01, 0x08, | |
0x00, 0x03, 0x09, | |
0x00, 0x08, 0x1F, | |
0x00, 0x0A, 0xC8, //deviation (for RX can be set to lower value like 0x9F) | |
0x00, 0x0B, 0x00, | |
0x00, 0x0C, 0x5D, | |
0x00, 0x0D, 0x00, | |
0x00, 0x0E, 0x8A, | |
0x00, 0x0F, 0xCB, | |
0x00, 0x10, 0xAC, | |
0x00, 0x11, 0x00, | |
0x00, 0x12, 0x45, | |
0x00, 0x13, 0x3F, | |
0x00, 0x14, 0x75, | |
0x00, 0x15, 0x10, | |
0x00, 0x16, 0x37, | |
0x00, 0x17, 0xEC, | |
0x00, 0x19, 0x11, | |
0x00, 0x1B, 0x51, | |
0x00, 0x1C, 0x87, | |
0x00, 0x1D, 0x00, | |
0x00, 0x20, 0x14, | |
0x00, 0x26, 0x03, | |
0x00, 0x27, 0x00, | |
0x00, 0x28, 0x20, | |
0x00, 0x2B, 0x3F, //power (0x01..0x3F) | |
0x00, 0x2E, 0xFF, | |
0x2F, 0x00, 0x1C, | |
0x2F, 0x01, 0x22, | |
0x2F, 0x05, 0x0D, | |
0x2F, 0x0C, 0x57, //freq 439M = 0x57CCCD | |
0x2F, 0x0D, 0xCC, //freq | |
0x2F, 0x0E, 0xCD, //freq | |
0x2F, 0x10, 0xEE, | |
0x2F, 0x11, 0x10, | |
0x2F, 0x12, 0x07, | |
0x2F, 0x13, 0xAF, | |
0x2F, 0x16, 0x40, | |
0x2F, 0x17, 0x0E, | |
0x2F, 0x19, 0x03, | |
0x2F, 0x1B, 0x33, | |
0x2F, 0x1D, 0x17, | |
0x2F, 0x1F, 0x00, | |
0x2F, 0x20, 0x6E, | |
0x2F, 0x21, 0x1C, | |
0x2F, 0x22, 0xAC, | |
0x2F, 0x27, 0xB5, | |
0x2F, 0x32, 0x0E, | |
0x2F, 0x36, 0x03, | |
0x2F, 0x91, 0x08, | |
}; | |
//vars | |
uint8_t tx_data[4]; | |
uint8_t rx_data[3]={0,0,0}; | |
uint16_t adc_val=0; | |
int8_t freq_shift=0; | |
//IRQs | |
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) | |
{ | |
HAL_GPIO_TogglePin(TST_PIN_GPIO_Port, TST_PIN_Pin); | |
if(mode) //TX | |
{ | |
HAL_ADC_Start(&hadc1); | |
adc_val=HAL_ADC_GetValue(&hadc1); | |
freq_shift=(adc_val>>4)-128+20; | |
tx_data[0]=freq_shift; | |
HAL_SPI_Transmit(&hspi3, tx_data, 1, 1); | |
} | |
else //RX | |
{ | |
HAL_SPI_TransmitReceive(&hspi3, tx_data, rx_data, 1, 10); | |
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, 2048+rx_data[0]*16); | |
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1); | |
} | |
} | |
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) | |
{ | |
if(GPIO_Pin==GPIO_PIN_1) | |
{ | |
if(HAL_GPIO_ReadPin(PTT_IN_GPIO_Port, PTT_IN_Pin)) | |
//PTT released | |
{ | |
//RX | |
mode=0; | |
//stop data transmission | |
HAL_TIM_Base_Stop_IT(&htim6); | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1); | |
//RX mode | |
tx_data[0]=0x34; | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0); | |
HAL_SPI_Transmit(&hspi3, tx_data, 1, 100); | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1); | |
//DAC - RF PA bias control | |
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_2, DAC_ALIGN_12B_R, 0); | |
HAL_DAC_Start(&hdac1, DAC_CHANNEL_2); | |
//initialize data transmission - RX | |
tx_data[0]=0x2F|0x80|0x40; | |
tx_data[1]=0x7D; | |
tx_data[2]=0; | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0); | |
HAL_SPI_TransmitReceive(&hspi3, tx_data, rx_data, 3, 10); | |
HAL_TIM_Base_Start_IT(&htim6); | |
} | |
else //PTT down | |
{ | |
//TX | |
mode=1; | |
//DAC - RF PA bias control | |
HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_2, DAC_ALIGN_12B_R, (3.0/3.3)*4095); | |
HAL_DAC_Start(&hdac1, DAC_CHANNEL_2); | |
//stop data transmission | |
HAL_TIM_Base_Stop_IT(&htim6); | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1); | |
//TX mode | |
tx_data[0]=0x35; | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0); | |
HAL_SPI_Transmit(&hspi3, tx_data, 1, 100); | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1); | |
//initialize data transmission - TX | |
tx_data[0]=0x2F|0x40; | |
tx_data[1]=0x7E; | |
tx_data[2]=0; | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0); | |
HAL_SPI_Transmit(&hspi3, tx_data, 3, 10); | |
//start data transmission | |
HAL_TIM_Base_Start_IT(&htim6); | |
} | |
} | |
} | |
//main routine | |
int main(void) | |
{ | |
/* USER CODE BEGIN 1 */ | |
/* USER CODE END 1 */ | |
/* MCU Configuration--------------------------------------------------------*/ | |
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */ | |
HAL_Init(); | |
/* USER CODE BEGIN Init */ | |
/* USER CODE END Init */ | |
/* Configure the system clock */ | |
SystemClock_Config(); | |
/* USER CODE BEGIN SysInit */ | |
/* USER CODE END SysInit */ | |
/* Initialize all configured peripherals */ | |
MX_GPIO_Init(); | |
MX_USART2_UART_Init(); | |
MX_TIM6_Init(); | |
MX_DAC1_Init(); | |
MX_SPI3_Init(); | |
MX_ADC1_Init(); | |
/* USER CODE BEGIN 2 */ | |
HAL_Delay(500); | |
HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED); | |
//chip reset | |
tx_data[0]=0x30; | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0); | |
HAL_SPI_Transmit(&hspi3, tx_data, 1, 10); | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1); | |
HAL_Delay(100); | |
for(uint8_t i=0; i<50; i++) | |
{ | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0); | |
if(cc1200_tx_settings[i*3]) | |
HAL_SPI_Transmit(&hspi3, &cc1200_tx_settings[i*3], 3, 100); | |
else | |
HAL_SPI_Transmit(&hspi3, &cc1200_tx_settings[i*3+1], 2, 100); | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1); | |
HAL_Delay(10); | |
} | |
//mode - RX | |
tx_data[0]=0x34; | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0); | |
HAL_SPI_Transmit(&hspi3, tx_data, 1, 100); | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1); | |
//freq offset compensation | |
int16_t offset=180; | |
tx_data[0]=0x2F|0x40; | |
tx_data[1]=0x0A; | |
tx_data[2]=*((uint8_t*)&offset+1); | |
tx_data[3]=*((uint8_t*)&offset); | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0); | |
HAL_SPI_Transmit(&hspi3, tx_data, 4, 10); | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1); | |
HAL_Delay(10); | |
//dont increment address in burst mode | |
tx_data[0]=0x2F; | |
tx_data[1]=0x06; | |
tx_data[2]=0; | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0); | |
HAL_SPI_Transmit(&hspi3, tx_data, 3, 10); | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 1); | |
//read samples | |
tx_data[0]=0x2F|0x80|0x40; | |
tx_data[1]=0x7D; | |
tx_data[2]=0; | |
HAL_GPIO_WritePin(nCS2_GPIO_Port, nCS2_Pin, 0); | |
HAL_SPI_TransmitReceive(&hspi3, tx_data, rx_data, 3, 10); | |
HAL_Delay(10); | |
HAL_TIM_Base_Start_IT(&htim6); | |
/* USER CODE END 2 */ | |
/* Infinite loop */ | |
/* USER CODE BEGIN WHILE */ | |
while (1) | |
{ | |
/* USER CODE END WHILE */ | |
/* USER CODE BEGIN 3 */ | |
} | |
/* USER CODE END 3 */ | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment