From ab0e0327d92f8aeed1b6f8d6cf9b79479987d351 Mon Sep 17 00:00:00 2001 From: Kinjal Pravinbhai Patel Date: Thu, 13 Aug 2015 18:42:34 +0530 Subject: [PATCH] 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 Acked by: Anirudha Sarangi --- .../data/freertos821_xilinx.tcl | 2 +- .../portable/GCC/ARM_CR5/portZynqUltrascale.c | 31 ++++++++++--------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/ThirdParty/bsp/freertos821_xilinx/data/freertos821_xilinx.tcl b/ThirdParty/bsp/freertos821_xilinx/data/freertos821_xilinx.tcl index 73f58c62..a1200d39 100755 --- a/ThirdParty/bsp/freertos821_xilinx/data/freertos821_xilinx.tcl +++ b/ThirdParty/bsp/freertos821_xilinx/data/freertos821_xilinx.tcl @@ -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)" diff --git a/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CR5/portZynqUltrascale.c b/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CR5/portZynqUltrascale.c index a6a115c0..53047486 100644 --- a/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CR5/portZynqUltrascale.c +++ b/ThirdParty/bsp/freertos821_xilinx/src/Source/portable/GCC/ARM_CR5/portZynqUltrascale.c @@ -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 ); - } } /*-----------------------------------------------------------*/