OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Source/] [portable/] [GCC/] [OpenRISC/] [port.c] - Diff between revs 572 and 621

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 572 Rev 621
Line 61... Line 61...
#include "task.h"
#include "task.h"
 
 
/* Processor constants. */
/* Processor constants. */
#include "port_spr_defs.h"
#include "port_spr_defs.h"
 
 
 
/* Jump buffer */
 
#include <setjmp.h>
 
static jmp_buf jmpbuf;
 
 
/* Tick Timer Interrupt handler */
/* Tick Timer Interrupt handler */
void vTickHandler( void );
void vTickHandler( void );
 
 
/* Setup the timer to generate the tick interrupts. */
/* Setup the timer to generate the tick interrupts. */
static void prvSetupTimerInterrupt( void );
static void prvSetupTimerInterrupt( void );
Line 170... Line 174...
        return pxTopOfStack;
        return pxTopOfStack;
}
}
 
 
portBASE_TYPE xPortStartScheduler( void )
portBASE_TYPE xPortStartScheduler( void )
{
{
 
        if(setjmp((void *)jmpbuf) == 0) {
        /* Start the timer that generates the tick ISR.  Interrupts are disabled
        /* Start the timer that generates the tick ISR.  Interrupts are disabled
        here already. */
        here already. */
        prvSetupTimerInterrupt();
        prvSetupTimerInterrupt();
 
 
        /* Start the first task. */
        /* Start the first task. */
        portRESTORE_CONTEXT();
        portRESTORE_CONTEXT();
 
 
        /* Should not get here! */
        /* Should not get here! */
 
        } else {
 
                /* Retrun by vPortEndScheduler */
 
        }
 
 
        return 0;
        return 0;
}
}
 
 
void vPortEndScheduler( void )
void vPortEndScheduler( void )
{
{
        mtspr(SPR_SR, mfspr(SPR_SR) & (~SPR_SR_TEE));   // Tick stop
        mtspr(SPR_SR, mfspr(SPR_SR) & (~SPR_SR_TEE));   // Tick stop
 
        longjmp((void *)jmpbuf, 1);                                             // return to xPortStartScheduler
}
}
 
 
/*
/*
 * Setup the tick timer to generate the tick interrupts at the required frequency.
 * Setup the tick timer to generate the tick interrupts at the required frequency.
 */
 */
Line 209... Line 219...
 
 
    // set OR1200 to accept exceptions
    // set OR1200 to accept exceptions
    mtspr(SPR_SR, mfspr(SPR_SR) | SPR_SR_TEE);
    mtspr(SPR_SR, mfspr(SPR_SR) | SPR_SR_TEE);
}
}
 
 
 
/*
 
 * naked attribute is ignored or32-elf-gcc 4.5.1-or32-1.0rc1
 
 * use assemble routines in portasm.S
 
 */
#if 0
#if 0
void vTickHandler( void )
void vTickHandler( void )
{
{
        // clears interrupt
        // clears interrupt
        mtspr(SPR_TTMR, mfspr(SPR_TTMR) & ~(SPR_TTMR_IP));
        mtspr(SPR_TTMR, mfspr(SPR_TTMR) & ~(SPR_TTMR_IP));

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.