}\r
/*-----------------------------------------------------------*/\r
\r
-void vPortSetupTimerInterrupt( void )\r
-{\r
-uint32_t ulCurrentTimeHigh, ulCurrentTimeLow;\r
-volatile uint32_t * const pulTimeHigh = ( volatile uint32_t * const ) ( configCLINT_BASE_ADDRESS + 0xBFFC );\r
-volatile uint32_t * const pulTimeLow = ( volatile uint32_t * const ) ( configCLINT_BASE_ADDRESS + 0xBFF8 );\r
+#if( configCLINT_BASE_ADDRESS != 0 )\r
\r
- do\r
+ void vPortSetupTimerInterrupt( void )\r
{\r
- ulCurrentTimeHigh = *pulTimeHigh;\r
- ulCurrentTimeLow = *pulTimeLow;\r
- } while( ulCurrentTimeHigh != *pulTimeHigh );\r
-\r
- ullNextTime = ( uint64_t ) ulCurrentTimeHigh;\r
- ullNextTime <<= 32ULL;\r
- ullNextTime |= ( uint64_t ) ulCurrentTimeLow;\r
- ullNextTime += ( uint64_t ) ulTimerIncrementsForOneTick;\r
- *pullMachineTimerCompareRegister = ullNextTime;\r
-\r
- /* Prepare the time to use after the next tick interrupt. */\r
- ullNextTime += ( uint64_t ) ulTimerIncrementsForOneTick;\r
-}\r
+ uint32_t ulCurrentTimeHigh, ulCurrentTimeLow;\r
+ volatile uint32_t * const pulTimeHigh = ( volatile uint32_t * const ) ( configCLINT_BASE_ADDRESS + 0xBFFC );\r
+ volatile uint32_t * const pulTimeLow = ( volatile uint32_t * const ) ( configCLINT_BASE_ADDRESS + 0xBFF8 );\r
+\r
+ do\r
+ {\r
+ ulCurrentTimeHigh = *pulTimeHigh;\r
+ ulCurrentTimeLow = *pulTimeLow;\r
+ } while( ulCurrentTimeHigh != *pulTimeHigh );\r
+\r
+ ullNextTime = ( uint64_t ) ulCurrentTimeHigh;\r
+ ullNextTime <<= 32ULL;\r
+ ullNextTime |= ( uint64_t ) ulCurrentTimeLow;\r
+ ullNextTime += ( uint64_t ) ulTimerIncrementsForOneTick;\r
+ *pullMachineTimerCompareRegister = ullNextTime;\r
+\r
+ /* Prepare the time to use after the next tick interrupt. */\r
+ ullNextTime += ( uint64_t ) ulTimerIncrementsForOneTick;\r
+ }\r
+\r
+#endif /* ( configCLINT_BASE_ADDRESS != 0 ) */\r
/*-----------------------------------------------------------*/\r
\r
BaseType_t xPortStartScheduler( void )\r
started. */\r
configASSERT( ( xISRStackTop & portBYTE_ALIGNMENT_MASK ) == 0 );\r
}\r
- #endif\r
+ #endif /* configASSERT_DEFINED */\r
\r
+ /* If there is a CLINT then it is ok to use the default implementation\r
+ in this file, otherwise vPortSetupTimerInterrupt() must be implemented to\r
+ configure whichever clock is to be used to generate the tick interrupt. */\r
vPortSetupTimerInterrupt();\r
\r
- /* Enable mtime and external interrupts. 1<<7 for timer interrupt, 1<<11\r
- for external interrupt. _RB_ What happens here when mtime is not present as\r
- with pulpino? */\r
- __asm volatile( "csrs mie, %0" :: "r"(0x880) );\r
+ #if( configCLINT_BASE_ADDRESS != 0 )\r
+ {\r
+ /* Enable mtime and external interrupts. 1<<7 for timer interrupt, 1<<11\r
+ for external interrupt. _RB_ What happens here when mtime is not present as\r
+ with pulpino? */\r
+ __asm volatile( "csrs mie, %0" :: "r"(0x880) );\r
+ }\r
+ #else\r
+ {\r
+ /* Enable external interrupts. */\r
+ __asm volatile( "csrs mie, %0" :: "r"(0x800) );\r
+ }\r
+ #endif /* configCLINT_BASE_ADDRESS */\r
\r
xPortStartFirstTask();\r
\r