⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpu_support.arm

📁 toppers操作系统源码
💻 ARM
字号:
/* *  TOPPERS/JSP Kernel *      Toyohashi Open Platform for Embedded Real-Time Systems/ *      Just Standard Profile Kernel *  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory *                              Toyohashi Univ. of Technology, JAPAN *                2003      by Advanced Data Controls, Corp *  *  惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation  *  によって给山されている GNU General Public License の Version 2 に淡 *  揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア *  を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· *  网脱と钙ぶ∷することを痰浸で钓满するˉ *  (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 *      涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 *      スコ〖ド面に崔まれていることˉ *  (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗 *      脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱 *      荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡 *      の痰瘦沮惮年を非很することˉ *  (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗 *      脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ *      とˉ *    (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟 *        侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ *    (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに *        鼠桂することˉ *  (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 *      巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ *  *  塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お *  よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も *  崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 *  儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ *  *  @(#) $Id: cpu_support.arm,v 1.4 2003/12/24 06:51:28 honda Exp $ *//* *    プロセッサ巴赂モジュ〖ル アセンブリ咐胳婶∈ARMv4脱∷ */#define _MACRO_ONLY#include "jsp_kernel.h"#include "offset.h"#include <armv4.h>#include <t_config.h>        /* *  タスクディスパッチャ * *  dispatchは· *  dispatch は·システムモ〖ドˇ充哈み敦贿觉轮で钙び叫さなければならな *  いˉ_exit_and_dispatch も·システムモ〖ドˇ充哈み敦贿觉轮で钙び叫す *  のが付搂であるが·カ〖ネル弹瓢箕に滦炳するため·IRQモ〖ドで钙び叫した *    眷圭にも滦炳しているˉ */        .text        .align 4            .globl dispatch        .globl exit_and_dispatchdispatch:        stmfd sp!, {r4 - r11,lr}   /* レジスタの瘦赂 */        ldr   r0, =runtsk          /* runtskを粕み哈む */        ldr   r1, [r0]        str   sp, [r1,#TCB_sp]      /* タスクスタックを瘦赂 */        adr   r2, dispatch_r        str   r2, [r1,#TCB_pc]      /* 悸乖浩倡戎孟を瘦赂 */        ldr   r6, =interrupt_count  /* r6 <-interrupt_count */        mov   r5, #(CPSR_SVC|CPSR_FIQ_BIT|CPSR_IRQ_BIT)  /* 充り哈み敦贿(システムモ〖ド) */        mov   r4, #(CPSR_SVC|CPSR_FIQ_BIT)               /* 充り哈み钓材(システムモ〖ド) */        b     dispatcher_1dispatch_r:        ldmfd sp!,{r4 - r11,lr}        /*         * タスク毋嘲借妄ル〖チンの弹瓢         * dispatch_r は dispatcher_1 から钙び叫されるため·         * tcbのアドレスはr1に掐っている         */        ldr  r0,[r1,#TCB_enatex]        tst   r0,#TCB_enatex_mask        beq   dispatch_r_1          /* enatex が FALSE ならリタ〖ン */        ldr   r0,[r1,#TCB_texptn]   /* texptnをロ〖ド               */        tst   r0,r0                 /* texptn が0で痰ければ         */        bne   call_texrtn           /* タスク毋嘲ル〖チンの钙び叫し */dispatch_r_1:           mov   pc,lr        exit_and_dispatch:        ldr   r6, =interrupt_count /* interrupt_countを0クリア */        mov   r3, #0                str   r3, [r6]                                                /*         *  FIQは撅に敦贿するˉ         */        mov   r5, #(CPSR_SVC|CPSR_FIQ_BIT|CPSR_IRQ_BIT) /* 充り哈み敦贿(システムモ〖ド) */        mov   r4, #(CPSR_SVC|CPSR_FIQ_BIT)  /* 充り哈み钓材(システムモ〖ド) */        msr   cpsr, r5          /* システムモ〖ド */dispatcher_1:        /*         *  ここではシステムモ〖ドˇ充哈み敦贿觉轮でなければならないˉ         */        ldr   r0, =schedtsk   /* schedtsk を粕み哈む */        ldr   r1, [r0]        cmp   r1, #0        beq   dispatcher_2#ifdef GHS_HOOK /* GHS */	stmfd  sp!,{r0,r1}	mov    r0,r1	ldr    r2,=dispatch_hook	mov    lr,pc	mov    pc,r2	ldmfd  sp!,{r0,r1}#endif        ldr   r2, =runtsk     /* schedtsk を runtskに */        str   r1, [r2]dispatcher_3:                   ldr   sp, [r1,#TCB_sp] /* タスクスタックを牲耽 */        ldr   pc, [r1,#TCB_pc] /* 悸乖浩倡戎孟を牲耽   */dispatcher_2:        mov   r3,#1        str   r3, [r6]        /* sleepモ〖ドを积つCPUなら今き垂える */        msr   cpsr, r4        /* 充哈み略ち      */        WAIT_INTERRUPT                msr   cpsr, r5        /* 充哈み敦贿      */        mov   r3,#0        str   r3, [r6]                b     dispatcher_1                /* *  タスク弹瓢箕借妄 */        .text        .globl activate_ractivate_r:        mov   r1,#(CPSR_SVC|CPSR_FIQ_BIT) /* 充り哈み钓材(システムモ〖ド) */        msr   cpsr, r1         /* 充哈み钓材 */        ldr   lr, =ext_tsk     /* 提り戎孟肋年 */        ldmfd sp!, {r0,pc}     /* 苞眶,PC肋年  */        /* *  充哈みハンドラ】CPU毋嘲ハンドラ叫庚借妄 * *  ret_int はシステムモ〖ドˇIRQ充哈み敦贿觉轮で钙び叫すˉ */        .text        .globl ret_int        .globl ret_exc ret_int:ret_exc:                        /*         *   システムモ〖ドで丸ること         */        ldr   r2, =runtsk       /* runtsk を粕み哈む */        ldr   r1, [r2]        ldr   r2, =enadsp        ldr   r0, [r2]        cmp   r0, #0        beq   ret_int_1        ldr   r2, =schedtsk        ldr   r0, [r2]        cmp   r0, r1            /* schedtsk と runtskを孺秤 */        beq   ret_int_1        stmfd sp!, {r4-r11}     /* 荒りのレジスタを瘦赂 */        str   sp, [r1,#TCB_sp]  /* タスクスタックを瘦赂 */        adr   r0, ret_int_r     /* 悸乖浩倡戎孟を瘦赂   */        str   r0, [r1,#TCB_pc]        b     dispatcher_1ret_int_r:        ldmfd sp!, {r4-r11}     /* レジスタの牲耽 */ret_int_1:        /*         * タスク毋嘲借妄ル〖チンの弹瓢         * dispatch_r は dispatcher_1 から钙び叫されるため·         * tcbのアドレスはr1に掐っている         * ret_int_1 は ret_exeから钙び叫される         */        ldr  r0, [r1,#TCB_enatex]         tst   r0, #TCB_enatex_mask        beq   ret_int_2              /* enatex が FALSE ならリタ〖ン */        ldr   r0, [r1,#TCB_texptn]   /* texptnをロ〖ド               */        tst   r0, r0                 /* texptn が0で痰ければ         */        blne  call_texrtn            /* タスク毋嘲ル〖チンの钙び叫し */        ret_int_2:                      ldmfd sp!, {r0}       /* spsr を牲耽 */        msr cpsr,r0        ldmfd sp!, {r0 - r3,ip,lr,pc} /* タスクへ提る */                /*         *  腮警箕粗略ち         */	.globl sil_dly_nsesil_dly_nse:        sub   r0, r0, #SIL_DLY_TIM1        cmp   r0, #0        bgt   _sil_dly_nse1        movle pc, lr_sil_dly_nse1:        sub   r0, r0, #SIL_DLY_TIM2        cmp   r0, #0        bgt   _sil_dly_nse1        movle pc, lr

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -