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

📄 cpu_support.s

📁 toppers操作系统源码
💻 S
📖 第 1 页 / 共 2 页
字号:
/* *  TOPPERS/JSP Kernel *      Toyohashi Open Platform for Embedded Real-Time Systems/ *      Just Standard Profile Kernel *  *  Copyright (C) 2000-2005 by Embedded and Real-Time Systems Laboratory *                              Toyohashi Univ. of Technology, JAPAN *  *  惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation  *  によって给山されている GNU General Public License の Version 2 に淡 *  揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア *  を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· *  网脱と钙ぶ∷することを痰浸で钓满するˉ *  (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 *      涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 *      スコ〖ド面に崔まれていることˉ *  (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗 *      脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱 *      荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡 *      の痰瘦沮惮年を非很することˉ *  (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗 *      脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ *      とˉ *    (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟 *        侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ *    (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに *        鼠桂することˉ *  (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 *      巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ *  *  塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お *  よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も *  崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 *  儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ *  *//* *      プロセッサ巴赂モジュ〖ル アセンブリ咐胳婶∈Xstormy16脱∷ */#define _MACRO_ONLY#include <offset.h>#include <cpu_sfrs.h>/* *  タスクˇ充り哈みˇ毋嘲瓷妄脱RAM挝拌 */        .section .data_0,"aw"                                /*                                 *  充り哈みˇ毋嘲ネストカウンタ                                 *  (カ〖ネル弹瓢箕を润タスクコンテキストと                                 *  して胺うため介袋猛を1とする)                                 */        .global _kernel_intnest_kernel_intnest:        .hword 1                                /*                                 *  充り哈みハンドラテ〖ブル                                 *  (UART充り哈みを崔め17改)                                 */        .global _kernel_ih_table_kernel_ih_table:        .hword 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0                                /*                                 *  毋嘲ハンドラテ〖ブル                                 *  (踏年盗炭吾/瘩眶戎孟ワ〖ドアクセス/                                 *  メモリ嘲/reserved)                                 */        .global _kernel_eh_table_kernel_eh_table:        .hword 0,0,0,0/* *  充り哈みベクトル *  (このsectionは8000h-8083hにリンクされる) */        .section .int_vec,"ax"        .global _start        .align 1_start:	clr1 psw,#7        br _kernel_int_irq_0	clr1 psw,#7        br _kernel_int_irq_1	clr1 psw,#7        br _kernel_int_irq_2	clr1 psw,#7        br _kernel_int_irq_3	clr1 psw,#7        br _kernel_int_irq_4	clr1 psw,#7        br _kernel_int_irq_5	clr1 psw,#7        br _kernel_int_irq_6	clr1 psw,#7        br _kernel_int_irq_7	clr1 psw,#7        br _kernel_int_irq_8	clr1 psw,#7        br _kernel_int_irq_9	clr1 psw,#7        br _kernel_int_irq_a	clr1 psw,#7        br _kernel_int_irq_b	clr1 psw,#7        br _kernel_int_irq_c	clr1 psw,#7        br _kernel_int_irq_d	clr1 psw,#7        br _kernel_int_irq_e	clr1 psw,#7        br _kernel_int_irq_f        .org 0x80        jmpf _kernel_int_irq_ex/* *  充り哈みハンドラ掐り庚 */_kernel_int_irq_0:                                /*                                 *  ワッチドッグタイマ充り哈みかRESETかの冉们                                 */        bn __WDTCR,#4,_after_reset        bp __WDTCR,#5,_after_reset        push r0        mov r0,#_kernel_ih_table+0        br _int_common_after_reset:	jmpf _int_reset_kernel_int_irq_1:        push r0        mov r0,#_kernel_ih_table+2        br _int_common_kernel_int_irq_2:        push r0        mov r0,#_kernel_ih_table+4        br _int_common_kernel_int_irq_3:        push r0        mov r0,#_kernel_ih_table+6        br _int_common_kernel_int_irq_4:        push r0        mov r0,#_kernel_ih_table+8        br _int_common_kernel_int_irq_5:        push r0        mov r0,#_kernel_ih_table+10        br _int_common_kernel_int_irq_6:        push r0        mov r0,#_kernel_ih_table+12        br _int_common_kernel_int_irq_7:        push r0        mov r0,#_kernel_ih_table+14        br _int_common_kernel_int_irq_8:        push r0        mov r0,#_kernel_ih_table+16        br _int_common_kernel_int_irq_9:        push r0        mov r0,#_kernel_ih_table+18        br _int_common_kernel_int_irq_a:        push r0        mov r0,#_kernel_ih_table+20        br _int_common_kernel_int_irq_b:        push r0        mov r0,#_kernel_ih_table+22        br _int_common_kernel_int_irq_c:        push r0        mov r0,#_kernel_ih_table+24        br _int_common_kernel_int_irq_d:        push r0        mov r0,#_kernel_ih_table+26        br _int_common_kernel_int_irq_e:        push r0        mov r0,#_kernel_ih_table+28        br _int_common_kernel_int_irq_f:        push r0        mov r0,#_kernel_ih_table+30        br _int_common/* *  充り哈みハンドラ掐り庚借妄 */_int_common:                                /*                                 *  r1/r2の锣闰(r0は锣闰貉み)                                 */        push r1        push r2                                /*                                 *  ネストした充り哈みかどうかチェック                                 */        mov r1,_kernel_intnest        bz interrupt_from_task/* *  ネストした充り哈みの借妄 */                                /*                                 *  ネストカウンタをインクリメントし、                                 *  惧疤の充り哈みを钓材                                 */        inc r1        mov _kernel_intnest,r1        set1 psw,#7                                /*                                 *  r3-r9(caller saved register)の锣闰                                 */        push r3        push r4        push r5        push r6        push r7        push r8        push r9                                /*                                 *  充り哈みハンドラの钙び叫し                                 */        mov r1,(r0)        bz 1f        mov r8,#0        call r8,r11:                                /*                                 *  r1-r9の牲傅                                 */        pop r9        pop r8        pop r7        pop r6        pop r5        pop r4        pop r3        pop r2        pop r1                                /*                                 *  ネストカウンタをデクリメントし、                                 *  充り哈まれた傅の充り哈みハンドラへ提る                                 */        clr1 psw,#7        mov r0,_kernel_intnest        dec r0        mov _kernel_intnest,r0        pop r0        iret/* *  ネストしていない充り哈みの借妄 */interrupt_from_task:                                /*                                 *  ネストカウンタをインクリメント                                 */        mov _kernel_intnest,#1                                /*                                 *  スタックを润タスク脱に磊り仑え、惧疤                                 *  充り哈みを钓材                                 */        mov r1,sp        mov sp,#__stack        set1 psw,#7                                /*                                 *  r3-r9(caller saved register)を                                 *  タスク娄スタックに锣闰                                 */        mov (r1++),r3        mov (r1++),r4        mov (r1++),r5        mov (r1++),r6        mov (r1++),r7        mov r3,r8        mov (r1++),r3        mov r3,r9        mov (r1++),r3                                /*                                 *  タスク娄スタックポインタを充り哈み脱                                 *  スタックに锣闰                                 */        push r1                                /*                                 *  充り哈みハンドラの钙び叫し                                 */        mov r1,(r0)        bz 1f        mov r8,#0        call r8,r11:                                /*                                 *  充り哈みを敦贿                                 */        clr1 psw,#7/* *  充り哈み、毋嘲鼎奶の叫庚借妄 */ret_int_and_exc:                                /*                                 *  タスク脱スタックに提す                                 */        pop r1        mov sp,r1                                /*                                 *  ネストカウンタをデクリメント                                 */        mov _kernel_intnest,#0                                /*                                 *  reqflgをチェックし、FALSEなら、傅の                                 *  タスクに提る借妄にジャンプ                                 */        mov r0,#_kernel_reqflg        mov r1,(r0)        bz ret_to_task_int/* *  充り哈み面にタスクの磊り仑え妥滇が券栏した眷圭の借妄 */                                /*                                 *  reqflgをクリア                                 */        mov r1,#0        mov (r0),r1                                /*                                 *  ディスパッチ敦贿か、runtsk=schedtsk                                 *  なら、傅のタスクに提る借妄へ                                 */        mov r0,#_kernel_enadsp        mov r1,(r0)        bz ret_int_1        mov r0,#_kernel_runtsk        mov r1,(r0)        mov r2,#_kernel_schedtsk        mov r3,(r2)        bz r1,r3,ret_int_1                                /*                                 *  タスクの磊り仑えのため、r10-13/spを锣闰                                 */        push r10        push r11        push r12        push r13        mov r7,sp        mov (r1,+TCB_sp),r7             /* r1 points runtsk */                                /*                                 *  mode=1(ret_int_rに提る)を肋年し                                 *  ディスパッチャへ                                 */        mov r7,#1        mov (r1,+TCB_mode),r7        br dispatcher/* *  充り哈み面のディスパッチからの牲耽借妄 */ret_int_r:                                /*                                 *  r10-13を牲傅                                 */        pop r13        pop r12        pop r11        pop r10/* *  傅のタスクに提る借妄 */ret_int_1:        mov r0,#_kernel_runtsk        mov r1,(r0)                                /*                                 *  タスク毋嘲ハンドラ钓材のチェック                                 */        mov.b r7,(r1,+TCB_enatex)        bn r7,#TCB_enatex_bit,ret_to_task_int                                /*                                 *  タスク毋嘲券栏のチェック                                 */        mov r7,(r1,+TCB_texptn)        bz ret_to_task_int                                /*                                 *  タスク毋嘲ハンドラの钙び叫し                                 */        callf _kernel_call_texrtn                                /*                                 *  r0-r9を牲傅し、傅のタスクに提る                                 */ret_to_task_int:        pop r9        pop r8        pop r7        pop r6        pop r5        pop r4        pop r3

⌨️ 快捷键说明

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