int main( void ) { char cIPAddress[ 16 ]; /* Enough space for "xxx.xxx.xxx.xxx\0". */ /* Configure the hardware for use by this demo. */ prvSetupHardware(); /* Start the standard demo tasks. These are just here to exercise the kernel port and provide examples of how the FreeRTOS API can be used. */ vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY ); vCreateBlockTimeTasks(); vStartSemaphoreTasks( mainSEM_TEST_PRIORITY ); vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY ); vStartIntegerMathTasks( mainINTEGER_TASK_PRIORITY ); vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY ); vStartQueuePeekTasks(); vStartRecursiveMutexTasks(); vStartLEDFlashTasks( mainFLASH_TASK_PRIORITY ); /* Create the USB task. */ xTaskCreate( vUSBTask, ( signed char * ) "USB", configMINIMAL_STACK_SIZE, ( void * ) NULL, tskIDLE_PRIORITY, NULL ); /* Display the IP address, then create the uIP task. The WEB server runs in this task. */ LCDdriver_initialisation(); LCD_PrintString( 5, 10, "FreeRTOS.org", 14, COLOR_GREEN); sprintf( cIPAddress, "%d.%d.%d.%d", configIP_ADDR0, configIP_ADDR1, configIP_ADDR2, configIP_ADDR3 ); LCD_PrintString( 5, 30, cIPAddress, 14, COLOR_RED); xTaskCreate( vuIP_Task, ( signed char * ) "uIP", mainBASIC_WEB_STACK_SIZE, ( void * ) NULL, mainUIP_TASK_PRIORITY, NULL ); /* Start the scheduler. */ vTaskStartScheduler(); /* Will only get here if there was insufficient memory to create the idle task. The idle task is created within vTaskStartScheduler(). */ for( ;; ); }
void prvSetupHardware( void ) { /* Disable peripherals power. */ SC->PCONP = 0; /* Enable GPIO power. */ SC->PCONP = PCONP_PCGPIO; /* Disable TPIU. */ PINCON->PINSEL10 = 0; if ( SC->PLL0STAT & ( 1 << 25 ) ) { /* Enable PLL, disconnected. */ SC->PLL0CON = 1; SC->PLL0FEED = PLLFEED_FEED1; SC->PLL0FEED = PLLFEED_FEED2; } /* Disable PLL, disconnected. */ SC->PLL0CON = 0; SC->PLL0FEED = PLLFEED_FEED1; SC->PLL0FEED = PLLFEED_FEED2; /* Enable main OSC. */ SC->SCS |= 0x20; while( !( SC->SCS & 0x40 ) ); /* select main OSC, 12MHz, as the PLL clock source. */ SC->CLKSRCSEL = 0x1; SC->PLL0CFG = 0x20031; SC->PLL0FEED = PLLFEED_FEED1; SC->PLL0FEED = PLLFEED_FEED2; /* Enable PLL, disconnected. */ SC->PLL0CON = 1; SC->PLL0FEED = PLLFEED_FEED1; SC->PLL0FEED = PLLFEED_FEED2; /* Set clock divider. */ SC->CCLKCFG = 0x03; /* Configure flash accelerator. */ SC->FLASHCFG = 0x403a; /* Check lock bit status. */ while( ( ( SC->PLL0STAT & ( 1 << 26 ) ) == 0 ) ); /* Enable and connect. */ SC->PLL0CON = 3; SC->PLL0FEED = PLLFEED_FEED1; SC->PLL0FEED = PLLFEED_FEED2; while( ( ( SC->PLL0STAT & ( 1 << 25 ) ) == 0 ) ); /* Configure the clock for the USB. */ if( SC->PLL1STAT & ( 1 << 9 ) ) { /* Enable PLL, disconnected. */ SC->PLL1CON = 1; SC->PLL1FEED = PLLFEED_FEED1; SC->PLL1FEED = PLLFEED_FEED2; } /* Disable PLL, disconnected. */ SC->PLL1CON = 0; SC->PLL1FEED = PLLFEED_FEED1; SC->PLL1FEED = PLLFEED_FEED2; SC->PLL1CFG = 0x23; SC->PLL1FEED = PLLFEED_FEED1; SC->PLL1FEED = PLLFEED_FEED2; /* Enable PLL, disconnected. */ SC->PLL1CON = 1; SC->PLL1FEED = PLLFEED_FEED1; SC->PLL1FEED = PLLFEED_FEED2; while( ( ( SC->PLL1STAT & ( 1 << 10 ) ) == 0 ) ); /* Enable and connect. */ SC->PLL1CON = 3; SC->PLL1FEED = PLLFEED_FEED1; SC->PLL1FEED = PLLFEED_FEED2; while( ( ( SC->PLL1STAT & ( 1 << 9 ) ) == 0 ) ); /* Setup the peripheral bus to be the same as the PLL output (64 MHz). */ SC->PCLKSEL0 = 0x05555555; /* Prepare the LCD. */ LCDdriver_initialisation(); LCD_PrintString( 5, 10, "FreeRTOS.org", 14, COLOR_GREEN); }