void initialize_packetizer(Packetizer_Config config) { switch (config.which_channel) { case PACKET_UART_CH_1: UART1_channel.control_byte = config.control_byte; UART1_channel.receive_callback = config.callback; initialize_UART(config.uart_config); break; case PACKET_UART_CH_2: UART2_channel.control_byte = config.control_byte; UART2_channel.receive_callback = config.callback; initialize_UART(config.uart_config); break; } }
/* The initialize function configures the PLL to set the internal clock * frequency. It also configures the digital IO and calls the initialization * functions for each of the modules. A light sequence signals the end of * initialization. */ void initialize(void){ /* Configure Phase Lock Loop for the system clock reference at 40MHz */ // Fosc (Clock frequency) is set at 80MHz // Fin is 7.37 MHz from internal FRC oscillator // FPLLI = Fin/N1 = 3.685 MHz CLKDIVbits.PLLPRE = 0; // N1 = 2 // FVCO = FPLLI*M1 = 162.14MHz PLLFBDbits.PLLDIV = 42; // M = 44 // FPLLO = FVCO/N2 = 81.07 MHz // FOSC ~= 80MHz, FCY ~= 40MHz CLKDIVbits.PLLPOST = 0; // N2 = 2 /* Initiate Clock Switch */ //The __builtin macro handles unlocking the OSCCON register __builtin_write_OSCCONH(1); //New oscillator is FRC with PLL __builtin_write_OSCCONL(OSCCON | 0x01); //Enable clock switch while (OSCCONbits.COSC!= 1); //Wait for FRC with PLL to be clock source while (OSCCONbits.LOCK!= 1); //Wait for PLL to lock /* Configure IO*/ TRISDbits.TRISD10 = 1; //USER input //LED outputs ANSELBbits.ANSB13 = 0; //Disable Analog on B13 TRISBbits.TRISB13 = 0; //LED1 ANSELBbits.ANSB12 = 0; //Disable Analog on B12 TRISBbits.TRISB12 = 0; //LED2 TRISDbits.TRISD11 = 0; //LED3 TRISDbits.TRISD0 = 0; //LED4 //Magnet Control TRISBbits.TRISB14 = 0; //Top Magnet //Store bits indicating reason for reset resetStat = RCON; //Clear reset buffer so next reset reading is correct RCON = 0; /* Initialize peripherals*/ initialize_PWM(); initialize_CN(); initialize_ADC(); initialize_QEI(); initialize_UART(); initialize_UART2(); //initialize_I2C_Master(); lights(); __delay32(10000000); //initialize_MPU(); initialize_encoder_values(1600,1700,1800); }