| /* |
| * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. |
| * |
| * SPDX-License-Identifier: MIT |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a copy of |
| * this software and associated documentation files (the "Software"), to deal in |
| * the Software without restriction, including without limitation the rights to |
| * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of |
| * the Software, and to permit persons to whom the Software is furnished to do so, |
| * subject to the following conditions: |
| * |
| * The above copyright notice and this permission notice shall be included in all |
| * copies or substantial portions of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS |
| * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR |
| * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER |
| * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| * |
| */ |
| |
| //#include <csi_config.h> |
| |
| /******************************************************************** |
| * Functions: vPortStartTask |
| * |
| ********************************************************************/ |
| .global vPortStartTask |
| .type vPortStartTask, %function |
| vPortStartTask: |
| psrclr ie |
| lrw r4, pxCurrentTCB |
| ld.w r4, (r4) // the current task stack pointer is the first member |
| ld.w sp, (r4) |
| |
| ldw r0, (sp, 64) |
| mtcr r0, epc |
| ldw r0, (sp, 60) |
| mtcr r0, epsr |
| ldw r15, (sp, 56) |
| ldm r0-r13, (sp) |
| addi sp, 68 |
| rte |
| |
| /******************************************************************** |
| * Functions: vPortYield |
| * |
| ********************************************************************/ |
| .global vPortYield |
| .type vPortYield, %function |
| vPortYield: |
| psrclr ee |
| subi sp, 68 |
| stm r0-r13, (sp) |
| stw r15, (sp, 56) |
| mfcr r0, psr |
| bseti r0, 8 |
| stw r0, (sp, 60) |
| stw r15, (sp, 64) |
| |
| lrw r2, pxCurrentTCB |
| ld.w r3, (r2) |
| st.w sp, (r3) |
| |
| jbsr vTaskSwitchContext |
| lrw r4, pxCurrentTCB |
| ld.w r4, (r4) |
| ld.w sp, (r4) |
| |
| ldw r0, (sp, 64) |
| mtcr r0, epc |
| ldw r0, (sp, 60) |
| mtcr r0, epsr |
| ldw r15, (sp, 56) |
| ldm r0-r13, (sp) |
| addi sp, 68 |
| |
| rte |
| |
| /******************************************************************** |
| * Functions: NOVIC_IRQ_Default_Handler |
| * |
| ********************************************************************/ |
| .global NOVIC_IRQ_Default_Handler |
| .type NOVIC_IRQ_Default_Handler, %function |
| NOVIC_IRQ_Default_Handler: |
| psrset ee |
| subi sp, 68 |
| stm r0-r13, (sp) |
| stw r15, (sp, 56) |
| mfcr r0, epsr |
| stw r0, (sp, 60) |
| mfcr r0, epc |
| stw r0, (sp, 64) |
| |
| lrw r7, pxCurrentTCB |
| ldw r7, (r7) |
| stw sp, (r7) |
| |
| lrw sp, g_top_irqstack |
| |
| lrw r1, g_irqvector |
| mfcr r0, psr |
| lsri r0, 16 |
| sextb r0 |
| subi r0, 32 |
| lsli r0, 2 |
| add r1, r0 |
| ldw r1, (r1) |
| lsri r0, 2 |
| jsr r1 |
| |
| lrw r7, pxCurrentTCB |
| ldw r7, (r7) |
| ldw sp, (r7) |
| |
| ldw r0, (sp, 64) |
| mtcr r0, epc |
| ldw r0, (sp, 60) |
| mtcr r0, epsr |
| ldm r0-r13, (sp) |
| ldw r15, (sp, 56) |
| addi sp, 68 |
| rte |