bsp: FreeRTOS: modified freertos for bug fix and openamp support

This patch modifies tcl file to correct configCLEAR_TICK_INTERRUPT API
definition and added ttc stop & initialize ttc again if ttc config fails
on rerun.

Signed-off-by: Kinjal Pravinbhai Patel <patelki@xilinx.com>
Acked by: Anirudha Sarangi <anirudh@xilinx.com>
This commit is contained in:
Kinjal Pravinbhai Patel 2015-08-13 18:42:34 +05:30 committed by Nava kishore Manne
parent 5b3ea5f28f
commit ab0e0327d9
2 changed files with 18 additions and 15 deletions

View file

@ -585,7 +585,7 @@ proc generate {os_handle} {
puts $config_file "void FreeRTOS_SetupTickInterrupt( void );"
puts $config_file "#define configSETUP_TICK_INTERRUPT() FreeRTOS_SetupTickInterrupt()\n"
puts $config_file "void FreeRTOS_ClearTickInterrupt( void );"
puts $config_file "#define portCLEAR_TICK_INTERRUPT() FreeRTOS_ClearTickInterrupt()\n"
puts $config_file "#define configCLEAR_TICK_INTERRUPT() FreeRTOS_ClearTickInterrupt()\n"
set max_api_call_interrupt_priority [common::get_property CONFIG.max_api_call_interrupt_priority $os_handle]
xput_define $config_file "configMAX_API_CALL_INTERRUPT_PRIORITY" "($max_api_call_interrupt_priority)"

View file

@ -95,7 +95,7 @@ void vApplicationStackOverflowHook( TaskHandle_t xTask, char *pcTaskName ) __att
/* Timer used to generate the tick interrupt. */
static XTtcPs xTimerInstance;
XScuGic xInterruptController;
/*-----------------------------------------------------------*/
void FreeRTOS_SetupTickInterrupt( void )
@ -104,7 +104,6 @@ uint16_t usInterval;
uint8_t ucPrescaler;
int iStatus;
XTtcPs_Config *pxTimerConfig;
XScuGic xInterruptController;
XScuGic_Config *pxInterruptControllerConfig;
/* Initialize the interrupt controller driver. */
@ -131,22 +130,26 @@ XScuGic_Config *pxInterruptControllerConfig;
pxTimerConfig = XTtcPs_LookupConfig( configTIMER_ID );
iStatus = XTtcPs_CfgInitialize( &xTimerInstance, pxTimerConfig, pxTimerConfig->BaseAddress );
if( iStatus != XST_SUCCESS )
{
xil_printf( "In %s: Timer Cfg initialization failed...\r\n", __func__ );
XTtcPs_Stop(&xTimerInstance);
iStatus = XTtcPs_CfgInitialize( &xTimerInstance, pxTimerConfig, pxTimerConfig->BaseAddress );
if( iStatus != XST_SUCCESS )
{
xil_printf( "In %s: Timer Cfg initialization failed...\r\n", __func__ );
return;
}
}
else
{
XTtcPs_SetOptions( &xTimerInstance, XTTCPS_OPTION_INTERVAL_MODE | XTTCPS_OPTION_WAVE_DISABLE );
XTtcPs_CalcIntervalFromFreq( &xTimerInstance, configTICK_RATE_HZ, &usInterval, &ucPrescaler );
XTtcPs_SetInterval( &xTimerInstance, usInterval );
XTtcPs_SetPrescaler( &xTimerInstance, ucPrescaler );
XTtcPs_SetOptions( &xTimerInstance, XTTCPS_OPTION_INTERVAL_MODE | XTTCPS_OPTION_WAVE_DISABLE );
XTtcPs_CalcIntervalFromFreq( &xTimerInstance, configTICK_RATE_HZ, &usInterval, &ucPrescaler );
XTtcPs_SetInterval( &xTimerInstance, usInterval );
XTtcPs_SetPrescaler( &xTimerInstance, ucPrescaler );
/* Enable the interrupt for timer. */
XScuGic_EnableIntr( configINTERRUPT_CONTROLLER_BASE_ADDRESS, configTIMER_INTERRUPT_ID );
XTtcPs_EnableInterrupts( &xTimerInstance, XTTCPS_IXR_INTERVAL_MASK );
XTtcPs_Start( &xTimerInstance );
/* Enable the interrupt for timer. */
XScuGic_EnableIntr( configINTERRUPT_CONTROLLER_BASE_ADDRESS, configTIMER_INTERRUPT_ID );
XTtcPs_EnableInterrupts( &xTimerInstance, XTTCPS_IXR_INTERVAL_MASK );
XTtcPs_Start( &xTimerInstance );
}
}
/*-----------------------------------------------------------*/