/* Setup a timer for a regular tick. This function uses the RTOS timer. The function is declared weak so an application writer can use a different timer by redefining this implementation. If a different timer is used then configTICK_INTERRUPT_VECTOR must also be defined in FreeRTOSConfig.h to ensure the RTOS provided tick interrupt handler is installed on the correct vector number.  */
__attribute__((weak))
/* Setup a timer for a regular tick. This function uses the RTOS timer. The function is declared weak so an application writer can use a different timer by redefining this implementation. If a different timer is used then configTICK_INTERRUPT_VECTOR must also be defined in FreeRTOSConfig.h to ensure the RTOS provided tick interrupt handler is installed on the correct vector number.  */
__attribute__((weak))
{
const uint32_t ulPreload = ( 32768ul / ( configTICK_RATE_HZ ) );
	configASSERT( ulPreload != 0UL );
	portMMCR_RTMR_CONTROL = 0ul;
	portMMCR_RTMR_PRELOAD = ulPreload;
	portMMCR_JTVIC_GIRQ23_SRC = ( portGIRQ23_RTOS_TIMER_MASK );
	portMMCR_JTVIC_GIRQ23_PRIA &= ~( 0x0Ful << 16 );
	portMMCR_JTVIC_GIRQ23_PRIA |= ( ( portIPL_TO_CODE( configKERNEL_INTERRUPT_PRIORITY ) ) << 16 );
	portMMCR_JTVIC_GIRQ23_SETEN = ( portGIRQ23_RTOS_TIMER_MASK );
	portMMCR_RTMR_CONTROL = 0x0Fu;
}