/********************************************************************* * Function: void SYSTEM_Initialize( SYSTEM_STATE state ) * * Overview: Initializes the system. * * PreCondition: None * * Input: SYSTEM_STATE - the state to initialize the system into * * Output: None * ********************************************************************/ void SYSTEM_Initialize( SYSTEM_STATE state ) { //On the PIC24FJ64GB004 Family of USB microcontrollers, the PLL will not power up and be enabled //by default, even if a PLL enabled oscillator configuration is selected (such as HS+PLL). //This allows the device to power up at a lower initial operating frequency, which can be //advantageous when powered from a source which is not gauranteed to be adequate for 32MHz //operation. On these devices, user firmware needs to manually set the CLKDIV<PLLEN> bit to //power up the PLL. { unsigned int pll_startup_counter = 600; CLKDIVbits.PLLEN = 1; while(pll_startup_counter--); } switch(state) { case SYSTEM_STATE_USB_HOST: PRINT_SetConfiguration(PRINT_CONFIGURATION_UART); break; case SYSTEM_STATE_USB_HOST_HID_KEYBOARD: LED_Enable(LED_USB_HOST_HID_KEYBOARD_DEVICE_READY); //also setup UART here PRINT_SetConfiguration(PRINT_CONFIGURATION_UART); //timwuu 2015.04.11 LCD_CursorEnable(true); TIMER_SetConfiguration(TIMER_CONFIGURATION_1MS); break; } }
/********************************************************************* * Function: void SYSTEM_Initialize( SYSTEM_STATE state ) * * Overview: Initializes the system. * * PreCondition: None * * Input: SYSTEM_STATE - the state to initialize the system into * * Output: None * ********************************************************************/ void SYSTEM_Initialize( SYSTEM_STATE state ) { switch(state) { case SYSTEM_STATE_USB_HOST: ANSELA = 0x0000; ANSELB = 0x0000; ANSELC = 0x0000; ANSELD = 0x0000; ANSELE = 0x0000; ANSELG = 0x0000; // Configure the device PLL to obtain 60 MIPS operation. The crystal // frequency is 8MHz. Divide 8MHz by 2, multiply by 60 and divide by // 2. This results in Fosc of 120MHz. The CPU clock frequency is // Fcy = Fosc/2 = 60MHz. Wait for the Primary PLL to lock and then // configure the auxilliary PLL to provide 48MHz needed for USB // Operation. PLLFBD = 58; /* M = 60 */ CLKDIVbits.PLLPOST = 0; /* N1 = 2 */ CLKDIVbits.PLLPRE = 0; /* N2 = 2 */ OSCTUN = 0; /* Initiate Clock Switch to Primary * Oscillator with PLL (NOSC= 0x3)*/ __builtin_write_OSCCONH(0x03); __builtin_write_OSCCONL(0x01); while (OSCCONbits.COSC != 0x3); // Configuring the auxiliary PLL, since the primary // oscillator provides the source clock to the auxiliary // PLL, the auxiliary oscillator is disabled. Note that // the AUX PLL is enabled. The input 8MHz clock is divided // by 2, multiplied by 24 and then divided by 2. Wait till // the AUX PLL locks. ACLKCON3 = 0x24C1; ACLKDIV3 = 0x7; ACLKCON3bits.ENAPLL = 1; while(ACLKCON3bits.APLLCK != 1); PRINT_SetConfiguration(PRINT_CONFIGURATION_LCD); LED_Enable(LED_USB_HOST_HID_MOUSE_DEVICE_READY); break; case SYSTEM_STATE_USB_HOST_HID_MOUSE: PRINT_SetConfiguration(PRINT_CONFIGURATION_LCD); LCD_CursorEnable(true); TIMER_SetConfiguration(TIMER_CONFIGURATION_1MS); break; } }
/********************************************************************* * Function: void SYSTEM_Initialize( SYSTEM_STATE state ) * * Overview: Initializes the system. * * PreCondition: None * * Input: SYSTEM_STATE - the state to initialize the system into * * Output: None * ********************************************************************/ void SYSTEM_Initialize( SYSTEM_STATE state ) { switch(state) { case SYSTEM_STATE_USB_HOST: PRINT_SetConfiguration(PRINT_CONFIGURATION_OLED); LED_Enable(LED_USB_HOST_HID_MOUSE_DEVICE_READY); break; case SYSTEM_STATE_USB_HOST_HID_MOUSE: PRINT_SetConfiguration(PRINT_CONFIGURATION_LCD); TIMER_SetConfiguration(TIMER_CONFIGURATION_1MS); break; } }
/********************************************************************* * Function: void SYSTEM_Initialize( SYSTEM_STATE state ) * * Overview: Initializes the system. * * PreCondition: None * * Input: SYSTEM_STATE - the state to initialize the system into * * Output: None * ********************************************************************/ void SYSTEM_Initialize( SYSTEM_STATE state ) { switch(state) { case SYSTEM_STATE_USB_HOST: PRINT_SetConfiguration(PRINT_CONFIGURATION_RAM_BUFFER); break; case SYSTEM_STATE_USB_HOST_HID_KEYBOARD: LED_Enable(LED_USB_HOST_HID_KEYBOARD_DEVICE_READY); PRINT_SetConfiguration(PRINT_CONFIGURATION_RAM_BUFFER); TIMER_SetConfiguration(TIMER_CONFIGURATION_1MS); break; } }