/* * Main function: initializes all system values and components, then starts * operation of the two threads. * * @author HP Truong, Jacob Barnett * * @param void * @return void */ int main (void) { CC2500_LowLevel_Init(); CC2500_Reset(); osKernelInitialize (); // initialize CMSIS-RTOS // initialize peripherals here /* LCD initiatization */ LCD_Init(); /* LCD Layer initiatization */ LCD_LayerInit(); /* Enable the LTDC controler */ LTDC_Cmd(ENABLE); /* Set LCD foreground layer as the current layer */ LCD_SetLayer(LCD_FOREGROUND_LAYER); LCD_SetFont(&Font16x24); LCD_Clear(LCD_COLOR_WHITE); receive_and_plot_thread = osThreadCreate(osThread(receive_and_plot), NULL); print_lcd_debug_thread = osThreadCreate(osThread(print_lcd_debug), NULL); osKernelStart (); // start thread execution }
/** * @brief Set CC2500 Initialization. * @param LIS302DL_Config_Struct: pointer to a LIS302DL_Config_TypeDef structure * that contains the configuration setting for the LIS302DL. * @retval None */ void CC2500_Default_Init(void) { uint8_t buffer[0x2f]; buffer[CC2500_REG_IOCFG2_ADDR] = SMARTRF_SETTING_IOCFG2; buffer[CC2500_REG_IOCFG1_ADDR] = SMARTRF_SETTING_IOCFG1; buffer[CC2500_REG_IOCFG0_ADDR] = SMARTRF_SETTING_IOCFG0; buffer[CC2500_REG_FIFOTHR_ADDR] = SMARTRF_SETTING_FIFOTHR; buffer[CC2500_REG_SYNC1_ADDR] = SMARTRF_SETTING_SYNC1; buffer[CC2500_REG_SYNC0_ADDR] = SMARTRF_SETTING_SYNC0; buffer[CC2500_REG_PKTLEN_ADDR] = SMARTRF_SETTING_PKTLEN; buffer[CC2500_REG_PKTCTRL1_ADDR] = SMARTRF_SETTING_PKTCTRL1; buffer[CC2500_REG_PKTCTRL0_ADDR] = SMARTRF_SETTING_PKTCTRL0; buffer[CC2500_REG_ADDR_ADDR] = SMARTRF_SETTING_ADDR; buffer[CC2500_REG_CHANNR_ADDR] = SMARTRF_SETTING_CHANNR; buffer[CC2500_REG_FSCTRL1_ADDR] = SMARTRF_SETTING_FSCTRL1; buffer[CC2500_REG_FSCTRL0_ADDR] = SMARTRF_SETTING_FSCTRL0; buffer[CC2500_REG_FREQ2_ADDR] = SMARTRF_SETTING_FREQ2; buffer[CC2500_REG_FREQ1_ADDR] = SMARTRF_SETTING_FREQ1; buffer[CC2500_REG_FREQ0_ADDR] = SMARTRF_SETTING_FREQ0; buffer[CC2500_REG_MDMCFG4_ADDR] = SMARTRF_SETTING_MDMCFG4; buffer[CC2500_REG_MDMCFG3_ADDR] = SMARTRF_SETTING_MDMCFG3; buffer[CC2500_REG_MDMCFG2_ADDR] = SMARTRF_SETTING_MDMCFG2; buffer[CC2500_REG_MDMCFG1_ADDR] = SMARTRF_SETTING_MDMCFG1; buffer[CC2500_REG_MDMCFG0_ADDR] = SMARTRF_SETTING_MDMCFG0; buffer[CC2500_REG_DEVIATN_ADDR] = SMARTRF_SETTING_DEVIATN; buffer[CC2500_REG_MCSM2_ADDR] = SMARTRF_SETTING_MCSM2; buffer[CC2500_REG_MCSM1_ADDR] = SMARTRF_SETTING_MCSM1; buffer[CC2500_REG_MCSM0_ADDR] = SMARTRF_SETTING_MCSM0; buffer[CC2500_REG_FOCCFG_ADDR] = SMARTRF_SETTING_FOCCFG; buffer[CC2500_REG_BSCFG_ADDR] = SMARTRF_SETTING_BSCFG; buffer[CC2500_REG_AGCTRL2_ADDR] = SMARTRF_SETTING_AGCCTRL2; buffer[CC2500_REG_AGCTRL1_ADDR] = SMARTRF_SETTING_AGCCTRL1; buffer[CC2500_REG_AGCTRL0_ADDR] = SMARTRF_SETTING_AGCCTRL0; buffer[CC2500_REG_WOREVT1_ADDR] = SMARTRF_SETTING_WOREVT1; buffer[CC2500_REG_WOREVT0_ADDR] = SMARTRF_SETTING_WOREVT0; buffer[CC2500_REG_WORCTRL_ADDR] = SMARTRF_SETTING_WORCTRL; buffer[CC2500_REG_FREND1_ADDR] = SMARTRF_SETTING_FREND1; buffer[CC2500_REG_FREND0_ADDR] = SMARTRF_SETTING_FREND0; buffer[CC2500_REG_FSCAL3_ADDR] = SMARTRF_SETTING_FSCAL3; buffer[CC2500_REG_FSCAL2_ADDR] = SMARTRF_SETTING_FSCAL2; buffer[CC2500_REG_FSCAL1_ADDR] = SMARTRF_SETTING_FSCAL1; buffer[CC2500_REG_FSCAL0_ADDR] = SMARTRF_SETTING_FSCAL0; buffer[CC2500_REG_RCCTRL1_ADDR] = SMARTRF_SETTING_RCCTRL1; buffer[CC2500_REG_RCCTRL0_ADDR] = SMARTRF_SETTING_RCCTRL0; buffer[CC2500_REG_FSTEST_ADDR] = SMARTRF_SETTING_FSTEST; buffer[CC2500_REG_PTEST_ADDR] = SMARTRF_SETTING_PTEST; buffer[CC2500_REG_AGCTEST_ADDR] = SMARTRF_SETTING_AGCTEST; buffer[CC2500_REG_TEST2_ADDR] = SMARTRF_SETTING_TEST2; buffer[CC2500_REG_TEST1_ADDR] = SMARTRF_SETTING_TEST1; buffer[CC2500_REG_TEST0_ADDR] = SMARTRF_SETTING_TEST0; /* Configure the low level interface ---------------------------------------*/ CC2500_LowLevel_Init(); /* Configure*/ CC2500_SRES_CMD(); CC2500_WriteRegister(buffer, CC2500_REG_IOCFG2_ADDR, 0x2f); }
/** * @brief Set CC2500 Initialization. * @param None * @retval None */ void CC2500_Init(void) { CC2500_LowLevel_Init(); // Wireless configuration as defined on project specification page 9 uint8_t reg; // reset the device first CC2500_Strobe(CC2500_STROBE_SRES, DUMMY_BYTE); osDelay(50); // put the device in idle mode CC2500_Strobe(CC2500_STROBE_SIDLE, DUMMY_BYTE); osDelay(50); reg = (uint8_t)CC2500_SETTING_FSCTRL1; CC2500_Write(®, CC2500_CFG_REG_FSCTRL1, 1); reg = (uint8_t)CC2500_SETTING_FSCTRL0; CC2500_Write(®, CC2500_CFG_REG_FSCTRL0, 1); reg = (uint8_t)CC2500_SETTING_FREQ2; CC2500_Write(®, CC2500_CFG_REG_FREQ2, 1); reg = (uint8_t)CC2500_SETTING_FREQ1; CC2500_Write(®, CC2500_CFG_REG_FREQ1, 1); reg = (uint8_t)CC2500_SETTING_FREQ0; CC2500_Write(®, CC2500_CFG_REG_FREQ0, 1); reg = (uint8_t)CC2500_SETTING_MDMCFG4; CC2500_Write(®, CC2500_CFG_REG_MDMCFG4, 1); reg = (uint8_t)CC2500_SETTING_MDMCFG3; CC2500_Write(®, CC2500_CFG_REG_MDMCFG3, 1); reg = (uint8_t)CC2500_SETTING_MDMCFG2; CC2500_Write(®, CC2500_CFG_REG_MDMCFG2, 1); reg = (uint8_t)CC2500_SETTING_MDMCFG1; CC2500_Write(®, CC2500_CFG_REG_MDMCFG1, 1); reg = (uint8_t)CC2500_SETTING_MDMCFG0; CC2500_Write(®, CC2500_CFG_REG_MDMCFG0, 1); reg = (uint8_t)CC2500_SETTING_CHANNR; CC2500_Write(®, CC2500_CFG_REG_CHANNR, 1); reg = (uint8_t)CC2500_SETTING_DEVIATN; CC2500_Write(®, CC2500_CFG_REG_DEVIATN, 1); reg = (uint8_t)CC2500_SETTING_FREND1; CC2500_Write(®, CC2500_CFG_REG_FRIEND1, 1); reg = (uint8_t)CC2500_SETTING_FREND0; CC2500_Write(®, CC2500_CFG_REG_FRIEND0, 1); reg = (uint8_t)CC2500_SETTING_MCSM0; CC2500_Write(®, CC2500_CFG_REG_MCSM0, 1); reg = (uint8_t)0x33; CC2500_Write(®, CC2500_CFG_REG_MCSM1, 1); reg = (uint8_t)CC2500_SETTING_FOCCFG; CC2500_Write(®, CC2500_CFG_REG_FOCCFG, 1); reg = (uint8_t)CC2500_SETTING_BSCFG; CC2500_Write(®, CC2500_CFG_REG_BSCFG, 1); reg = (uint8_t)CC2500_SETTING_AGCCTRL2; CC2500_Write(®, CC2500_CFG_REG_AGCCTRL2, 1); reg = (uint8_t)CC2500_SETTING_AGCCTRL1; CC2500_Write(®, CC2500_CFG_REG_AGCCTRL1, 1); reg = (uint8_t)CC2500_SETTING_AGCCTRL0; CC2500_Write(®, CC2500_CFG_REG_AGCCTRL0, 1); reg = (uint8_t)CC2500_SETTING_FSCAL3; CC2500_Write(®, CC2500_CFG_REG_FSCAL3, 1); reg = (uint8_t)CC2500_SETTING_FSCAL2; CC2500_Write(®, CC2500_CFG_REG_FSCAL2, 1); reg = (uint8_t)CC2500_SETTING_FSCAL1; CC2500_Write(®, CC2500_CFG_REG_FSCAL1, 1); reg = (uint8_t)CC2500_SETTING_FSCAL0; CC2500_Write(®, CC2500_CFG_REG_FSCAL0, 1); reg = (uint8_t)CC2500_SETTING_FSTEST; CC2500_Write(®, CC2500_CFG_REG_FSTEST, 1); reg = (uint8_t)CC2500_SETTING_TEST2; CC2500_Write(®, CC2500_CFG_REG_TEST2, 1); reg = (uint8_t)CC2500_SETTING_TEST1; CC2500_Write(®, CC2500_CFG_REG_TEST1, 1); reg = (uint8_t)CC2500_SETTING_TEST0; CC2500_Write(®, CC2500_CFG_REG_TEST0, 1); reg = (uint8_t)CC2500_SETTING_FIFOTHR; CC2500_Write(®, CC2500_CFG_REG_FIFOTHR, 1); reg = (uint8_t)CC2500_SETTING_IOCFG2; CC2500_Write(®, CC2500_CFG_REG_IOCFG2, 1); reg = (uint8_t)CC2500_SETTING_IOCFG0; CC2500_Write(®, CC2500_CFG_REG_IOCFG0, 1); reg = (uint8_t)CC2500_SETTING_PKTCTRL1; CC2500_Write(®, CC2500_CFG_REG_PKTCTRL1, 1); reg = (uint8_t)CC2500_SETTING_PKTCTRL0; CC2500_Write(®, CC2500_CFG_REG_PKTCTRL0, 1); reg = (uint8_t)CC2500_SETTING_ADDR; CC2500_Write(®, CC2500_CFG_REG_ADDR, 1); reg = (uint8_t)CC2500_SETTING_PKTLEN; CC2500_Write(®, CC2500_CFG_REG_PKTLEN, 1); // flush the rx and tx buffer CC2500_Strobe(CC2500_STROBE_SFTX, DUMMY_BYTE); CC2500_Strobe(CC2500_STROBE_SFRX, DUMMY_BYTE); }
/** * @brief Configures wireless chip. * * @notes Configures configures the wireless chip settings by writing to the * config registers. */ void CC2500_Init(void){ uint8_t ctrl[16]; //Configure the low level interface ---------------------------- CC2500_LowLevel_Init(); //TUESDAY ctrl[0] = SMARTRF_SETTING_IOCFG2; CC2500_Write(ctrl, IOCFG2, 1); CC2500_Write(ctrl, IOCFG2, 1); while(!CC2500_CheckRegisters(ctrl, IOCFG2, 1)); ctrl[0] = SMARTRF_SETTING_IOCFG0D; ctrl[1] = SMARTRF_SETTING_FIFOTHR; CC2500_Write(ctrl, IOCFG0, 2); while(!CC2500_CheckRegisters(ctrl, IOCFG0, 2))CC2500_Write(ctrl, IOCFG0, 2); ctrl[0] = SMARTRF_SETTING_PKTLEN; ctrl[1] = SMARTRF_SETTING_PKTCTRL1; ctrl[2] = SMARTRF_SETTING_PKTCTRL0; ctrl[3] = SMARTRF_SETTING_ADDR; ctrl[4] = SMARTRF_SETTING_CHANNR; ctrl[5] = SMARTRF_SETTING_FSCTRL1; ctrl[6] = SMARTRF_SETTING_FSCTRL0; ctrl[7] = SMARTRF_SETTING_FREQ2; ctrl[8] = SMARTRF_SETTING_FREQ1; ctrl[9] = SMARTRF_SETTING_FREQ0; ctrl[10] = SMARTRF_SETTING_MDMCFG4; ctrl[11] = SMARTRF_SETTING_MDMCFG3; ctrl[12] = SMARTRF_SETTING_MDMCFG2; ctrl[13] = SMARTRF_SETTING_MDMCFG1; ctrl[14] = SMARTRF_SETTING_MDMCFG0; ctrl[15] = SMARTRF_SETTING_DEVIATN; CC2500_Write(ctrl, PKTLEN, 16); while(!CC2500_CheckRegisters(ctrl, PKTLEN, 16))CC2500_Write(ctrl, PKTLEN, 16);; ctrl[0] = SMARTRF_SETTING_MCSM1; ctrl[1] = SMARTRF_SETTING_MCSM0; ctrl[2] = SMARTRF_SETTING_FOCCFG; ctrl[3] = SMARTRF_SETTING_BSCFG; ctrl[4] = SMARTRF_SETTING_AGCCTRL2; ctrl[5] = SMARTRF_SETTING_AGCCTRL1; ctrl[6] = SMARTRF_SETTING_AGCCTRL0; CC2500_Write(ctrl, MCSM1, 7); while(!CC2500_CheckRegisters(ctrl, MCSM1, 7))CC2500_Write(ctrl, MCSM1, 7);; ctrl[0] = SMARTRF_SETTING_FREND1; ctrl[1] = SMARTRF_SETTING_FREND0; ctrl[2] = SMARTRF_SETTING_FSCAL3; ctrl[3] = SMARTRF_SETTING_FSCAL2; ctrl[4] = SMARTRF_SETTING_FSCAL1; ctrl[5] = SMARTRF_SETTING_FSCAL0; ctrl[6] = SMARTRF_SETTING_FSTEST; CC2500_Write(ctrl, FREND1, 7); while(!CC2500_CheckRegisters(ctrl, FREND1, 7))CC2500_Write(ctrl, FREND1, 7);; ctrl[0] = SMARTRF_SETTING_TEST2; ctrl[1] = SMARTRF_SETTING_TEST1; ctrl[2] = SMARTRF_SETTING_TEST0; CC2500_Write(ctrl, TEST2, 3); while(!CC2500_CheckRegisters(ctrl, TEST2, 3))CC2500_Write(ctrl, TEST2, 3);; ctrl[0] = SMARTRF_SETTING_SYNC1; ctrl[1] = SMARTRF_SETTING_SYNC0; CC2500_Write(ctrl, SYNC1, 2); }
/** * @brief Set CC2500 Initialization. * @param None * @retval None */ void CC2500_Init() { /* Configure the low level interface ---------------------------------------*/ CC2500_LowLevel_Init(); }