This repository has been archived on 2023-11-05. You can view files and clone it, but cannot push or open issues or pull requests.
FreeRTOS-Kernel/Source/portable/IAR/78K0R/portasm.s26

142 lines
4.9 KiB
Plaintext
Raw Normal View History

2009-02-10 04:21:35 +08:00
; FreeRTOS.org V5.1.2 - Copyright (C) 2003-2009 Richard Barry.
2009-01-30 18:47:35 +08:00
;
; This file is part of the FreeRTOS.org distribution.
;
; FreeRTOS.org is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; FreeRTOS.org is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with FreeRTOS.org; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
;
; A special exception to the GPL can be applied should you wish to distribute
; a combined work that includes FreeRTOS.org, without being obliged to provide
; the source code for any proprietary components. See the licensing section
; of http://www.FreeRTOS.org for full details of how and when the exception
; can be applied.
;
; ***************************************************************************
; See http://www.FreeRTOS.org for documentation, latest information, license
; and contact details. Please ensure to read the configuration and relevant
; port sections of the online documentation.
; ***************************************************************************
;
;------------------------------------------------------------------------------
2009-02-04 21:08:12 +08:00
#include "ISR_Support.h"
2009-01-30 18:47:35 +08:00
;------------------------------------------------------------------------------
#if __CORE__ != __78K0R__
#error "This file is only for 78K0R Devices"
#endif
#define CS 0xFFFFC
#define ES 0xFFFFD
; Functions implemented in this file
;------------------------------------------------------------------------------
PUBLIC vPortYield
PUBLIC vPortStart
; Functions used by scheduler
2009-02-04 05:09:16 +08:00
;------------------------------------------------------------------------------
2009-01-30 18:47:35 +08:00
EXTERN vTaskSwitchContext
EXTERN vTaskIncrementTick
; Tick ISR Prototype
;------------------------------------------------------------------------------
2009-02-06 21:23:23 +08:00
; EXTERN ?CL78K0R_V2_L00
2009-01-30 18:47:35 +08:00
PUBWEAK `??MD_INTTM05??INTVEC 68`
PUBLIC MD_INTTM05
MD_INTTM05 SYMBOL "MD_INTTM05"
`??MD_INTTM05??INTVEC 68` SYMBOL "??INTVEC 68", MD_INTTM05
;------------------------------------------------------------------------------
2009-02-05 00:53:52 +08:00
; Yield to another task. Implemented as a software interrupt. The return
; address and PSW will have been saved to the stack automatically before
; this code runs.
2009-01-30 18:47:35 +08:00
;
; Input: NONE
;
; Call: CALL vPortYield
;
; Output: NONE
;
;------------------------------------------------------------------------------
RSEG CODE:CODE
vPortYield:
portSAVE_CONTEXT ; Save the context of the current task.
2009-02-05 00:53:52 +08:00
call vTaskSwitchContext ; Call the scheduler to select the next task.
portRESTORE_CONTEXT ; Restore the context of the next task to run.
retb
2009-01-30 18:47:35 +08:00
;------------------------------------------------------------------------------
; Restore the context of the first task that is going to run.
;
; Input: NONE
;
; Call: CALL vPortStart
;
; Output: NONE
;
;------------------------------------------------------------------------------
RSEG CODE:CODE
vPortStart:
portRESTORE_CONTEXT ; Restore the context of whichever task the ...
2009-02-05 00:53:52 +08:00
reti ; An interrupt stack frame is used so the task
; is started using a RETI instruction.
2009-01-30 18:47:35 +08:00
;------------------------------------------------------------------------------
; Perform the necessary steps of the Tick Count Increment and Task Switch
2009-02-04 05:09:16 +08:00
; depending on the chosen kernel configuration
2009-01-30 18:47:35 +08:00
;
; Input: NONE
;
2009-02-04 05:09:16 +08:00
; Call: ISR
2009-01-30 18:47:35 +08:00
;
; Output: NONE
;
;------------------------------------------------------------------------------
MD_INTTM05:
portSAVE_CONTEXT ; Save the context of the current task.
call vTaskIncrementTick ; Call the timer tick function.
2009-02-05 00:53:52 +08:00
#if configUSE_PREEMPTION == 1
call vTaskSwitchContext ; Call the scheduler to select the next task.
2009-01-30 18:47:35 +08:00
#endif
2009-02-05 00:53:52 +08:00
portRESTORE_CONTEXT ; Restore the context of the next task to run.
reti
2009-01-30 18:47:35 +08:00
2009-02-06 21:23:23 +08:00
; REQUIRE ?CL78K0R_V2_L00
2009-02-05 00:53:52 +08:00
COMMON INTVEC:CODE:ROOT(1) ; Set ISR location to the Interrupt vector table.
2009-01-30 18:47:35 +08:00
ORG 68
`??MD_INTTM05??INTVEC 68`:
DW MD_INTTM05
2009-02-04 05:09:16 +08:00
2009-02-05 00:53:52 +08:00
COMMON INTVEC:CODE:ROOT(1) ; Set ISR location to the Interrupt vector table.
2009-02-04 05:09:16 +08:00
ORG 126
`??vPortYield??INTVEC 126`:
DW vPortYield
2009-02-05 00:53:52 +08:00
; Set value for the usCriticalNesting.
2009-01-30 18:47:35 +08:00
RSEG NEAR_ID:CONST:SORT:NOROOT(1)
`?<Initializer for usCriticalNesting>`:
DW 10
2009-02-04 05:09:16 +08:00
2009-01-30 18:47:35 +08:00
;#endif
END