void SYS_Initialize ( void* data ) { /* Core Processor Initialization */ SYS_CLK_Initialize( NULL ); sysObj.sysDevcon = SYS_DEVCON_Initialize(SYS_DEVCON_INDEX_0, (SYS_MODULE_INIT*)&sysDevconInit); SYS_DEVCON_PerformanceConfig(SYS_CLK_SystemFrequencyGet()); SYS_DEVCON_JTAGEnable(); SYS_PORTS_Initialize(); /* Board Support Package Initialization */ BSP_Initialize(); /* System Services Initialization */ SYS_INT_Initialize(); /* Initialize Drivers */ sysObj.drvTmr0 = DRV_TMR_Initialize(DRV_TMR_INDEX_0, (SYS_MODULE_INIT *)&drvTmr0InitData); SYS_INT_VectorPrioritySet(INT_VECTOR_T2, INT_PRIORITY_LEVEL4); SYS_INT_VectorSubprioritySet(INT_VECTOR_T2, INT_SUBPRIORITY_LEVEL0); /* Configure the Flash Controller Interrupt Priority */ SYS_INT_VectorPrioritySet(INT_VECTOR_FCE, INT_PRIORITY_LEVEL4); /* Configure the Flash Controller Interrupt Sub Priority */ SYS_INT_VectorSubprioritySet(INT_VECTOR_FCE, INT_SUBPRIORITY_LEVEL1); /* Initialize the NVM Driver */ sysObj.drvNvm = DRV_NVM_Initialize(DRV_NVM_INDEX_0, (SYS_MODULE_INIT *)&drvNvmInit); /* Initialize the NVM Media Driver Layer */ sysObj.drvNvmMedia = DRV_NVM_MEDIA_Initialize(DRV_NVM_MEDIA_INDEX_0,(SYS_MODULE_INIT *)&drvNvmMediaInit); /* Initialize System Services */ sysObj.sysConsole0 = SYS_CONSOLE_Initialize(SYS_CONSOLE_INDEX_0, (SYS_MODULE_INIT *)&consUsbInit); sysObj.sysDebug = SYS_DEBUG_Initialize(SYS_DEBUG_INDEX_0, (SYS_MODULE_INIT*)&debugInit); /*** TMR Service Initialization Code ***/ sysObj.sysTmr = SYS_TMR_Initialize(SYS_TMR_INDEX_0, (const SYS_MODULE_INIT * const)&sysTmrInitData); SYS_CMD_Initialize(); SYS_FS_Initialize( (const void *) sysFSInit ); SYS_RANDOM_Initialize(0, 0); /* Initialize Middleware */ /* Set priority of USB interrupt source */ SYS_INT_VectorPrioritySet(INT_VECTOR_USB1, INT_PRIORITY_LEVEL1); /* Set Sub-priority of USB interrupt source */ SYS_INT_VectorSubprioritySet(INT_VECTOR_USB1, INT_SUBPRIORITY_LEVEL0); /* Initialize the USB device layer */ sysObj.usbDevObject0 = USB_DEVICE_Initialize (USB_DEVICE_INDEX_0 , ( SYS_MODULE_INIT* ) & usbDevInitData); /* set priority for ETHERNET interrupt source */ SYS_INT_VectorPrioritySet(INT_VECTOR_ETH, INT_PRIORITY_LEVEL5); /* set sub-priority for ETHERNET interrupt source */ SYS_INT_VectorSubprioritySet(INT_VECTOR_ETH, INT_SUBPRIORITY_LEVEL0); /* TCPIP Stack Initialization */ sysObj.tcpip = TCPIP_STACK_Init(); if (sysObj.tcpip == SYS_MODULE_OBJ_INVALID) { return; } /* Enable Global Interrupts */ SYS_INT_Enable(); /* Initialize the Application */ APP_Initialize(); }
/******************************************************************************* Function: void SYS_Initialize ( void *data ) Summary: Initializes the board, services, drivers, application and other modules Description: This routine initializes the board, services, drivers, application and other modules as configured at build time. In a bare-metal environment (where no OS is supported), this routine should be called almost immediately after entering the "main" routine. Precondition: The C-language run-time environment and stack must have been initialized. Parameters: data - Pointer to the system initialzation data structure containing pointers to the board, system service, and driver initialization routines Returns: None. Example: <code> SYS_INT_Initialize(NULL); </code> Remarks: Basic System Initialization Sequence: 1. Initilize minimal board services and processor-specific items (enough to use the board to initialize drivers and services) 2. Initialize all supported system services 3. Initialize all supported modules (libraries, drivers, middleware, and application-level modules) 4. Initialize the main (static) application, if present. The order in which services and modules are initialized and started may be important. For a static system (a system not using the ISP's dynamic implementation of the initialization and "Tasks" services) this routine is implemented for the specific configuration of an application. */ void SYS_Initialize(void* data) { BSP_Initialize(); // cache configuration cache_enable(0); SetPic32MZIoPins(); /* Initializethe interrupt system */ SYS_INT_Initialize(); /* Remap the SPI pins */ PLIB_PORTS_RemapOutput(PORTS_ID_0, OTPUT_FUNC_SDO2, OUTPUT_PIN_RPG8); PLIB_PORTS_RemapInput(PORTS_ID_0, INPUT_FUNC_SDI2, INPUT_PIN_RPD7); /* set priority for SPI interrupt source */ SYS_INT_VectorPrioritySet(INT_VECTOR_SPI2_TX, INT_PRIORITY_LEVEL3); SYS_INT_VectorPrioritySet(INT_VECTOR_SPI2_RX, INT_PRIORITY_LEVEL3); /* set sub-priority for SPI interrupt source */ SYS_INT_VectorSubprioritySet(INT_VECTOR_SPI2_TX, INT_SUBPRIORITY_LEVEL1); SYS_INT_VectorSubprioritySet(INT_VECTOR_SPI2_RX, INT_SUBPRIORITY_LEVEL1); clkObject.systemClock = 200000000L; //Turn ON the system clock if(!SYS_TICK_Initialize(clkObject.systemClock, SYS_TICKS_PER_SECOND)) { return; } SYS_INT_Enable(); /* Initialize the clock system service. This is used * by the SPI Driver. */ clkObject.MZperipheralClock[2] = 100000000L; clkObject.peripheralClock = 100000000L; /* Initialize the SPI driver */ appDrvObjects.drvSPIObject = DRV_SPI_Initialize(DRV_SPI_INDEX_0, (SYS_MODULE_INIT *)&drvSPIInit); /* Initialize the SDCARD driver*/ appDrvObjects.drvSDCARDObject = DRV_SDCARD_Initialize(DRV_SDCARD_INDEX_0, (SYS_MODULE_INIT *)&drvSDCARDInit); /* Initialize the SYS_FS Layer */ SYS_FS_Initialize( (const void *) sysFATFSInit ); if(!_SYS_DEBUG_INIT(SYS_DEBUG_PORT)) { return; } if(!_SYS_CONSOLE_INIT(SYS_CONSOLE_PORT)) { return; } if(!_SYS_RANDOM_INIT()) { return; } if (!_SYS_COMMAND_INIT()) { return; } if (!SYS_USERIO_Initialize(0)) { return; } // TCP/IP stack initialization SYS_OUT_MESSAGE("TCPStack " TCPIP_STACK_VERSION " "" "); // Initialize the TCPIP stack if (!TCPIP_STACK_Init()) { return; } APP_Initialize(); return; } //SYS_Initialize