📄 sys_support.s
字号:
/* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2000,2001 by Embedded and Real-Time Systems Laboratory * Toyohashi Univ. of Technology, JAPAN * * 惧淡螟侯涪荚は·Free Software Foundation によって给山されている * GNU General Public License の Version 2 に淡揭されている掘凤か·笆 * 布の(1)×(4)の掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェ * アを猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを浩网脱材墙なバイナリコ〖ド∈リロケ〖タブルオブ * ジェクトファイルやライブラリなど∷の妨で网脱する眷圭には·网脱 * に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯涪山绩· * この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを浩网脱稍材墙なバイナリコ〖ドの妨または怠达に寥 * み哈んだ妨で网脱する眷圭には·肌のいずれかの掘凤を塔たすことˉ * (a) 网脱に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 网脱の妨轮を·侍に年める数恕によって·惧淡螟侯涪荚に鼠桂する * ことˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚を倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚は· * 塑ソフトウェアに簇して·その努脱材墙拉も崔めて·いかなる瘦沮も乖わ * ないˉまた·塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じたい * かなる禄巢に簇しても·その勒扦を砷わないˉ * * @(#) $Id: sys_support.S,v 1.5 2002/04/05 07:43:51 honda Exp $ */#define _MACRO_ONLY#include "jsp_kernel.h"#include "evaluator7t.h" /* * 你レベルのタ〖ゲットシステム巴赂の介袋步 * * スタ〖トアップモジュ〖ルの面で·メモリ介袋步の涟に钙び叫されるˉ */ #define SYSCFG 0x03ff0000 #define INTOFFSET 0x03ff0000+0x4024#define INTPND 0x03ff0000+0x4004#define INTMASK 0x03ff0000+0x4008 #define LEDDATA 0x03ff0000+0x5008 .text .align 2 .global hardware_init_hookhardware_init_hook: ldr r2, syscfg_k /* キャッシュON */ ldr r1, [r2,#0] bic r1, r1,#0x32 orr r1, r1,#0x12 str r1, [r2,#0] mov pc, lr .align 2syscfg_k: .long SYSCFG/* * * 充哈みの叫掐り庚借妄 * */ .text .align 4 .global IRQ_HandlerIRQ_Handler: ldr sp, .int_stack sub lr,lr,#4 /* * 办箕弄にint_stackに略闰 */ stmfd sp!, {r0 - r3,lr} /* * 充り哈み妥傍の冉年·システムモ〖ドになると粕めない * (KS32C50100巴赂) */ ldr r0, intoffset_k ldr r1, [r0] /* * システムモ〖ド スタックを掐れ仑えるため充り哈みは敦贿 * コンテキストをタスクスタックに姥み木すˉ */ mrs r0, spsr mov r3, sp mov r2,#(CPSR_SYS|CPSR_FIQ_BIT|CPSR_IRQ_BIT) msr cpsr,r2 ldr r2,[r3,#0x10] /* load PC */ stmfd sp!,{r2} /* Store PC */ ldr r2,[r3,#0x0C] /* load r3 */ stmfd sp!,{r2,ip,lr} /* Store r3,ip,lr */ ldmfd r3!,{r2,ip,lr} /* load r0,r1,r2 */ stmfd sp!,{r0,r2,ip,lr} /* Store SPSR,r0,r1,r2 */ /* * 驴脚充り哈みか冉年 */ ldr r2, .interrupt_count ldr r3, [r2] add r0,r3,#1 str r0, [r2] cmp r3, #0x00 moveq r2,sp /* ネスト充り哈みでない眷圭 */ ldreq sp,stack /* スタックの恃构 */ stmeqfd sp!,{r2} /* タスクスタックの瘦赂 */ ldr r2, int_table_k /* 充哈み悼击テ〖ブルの粕み叫し */ ldr r0, [r2,r1] mov r2,r1,lsr #2 mov r1,#1 mov r3,r1,lsl r2 ldr r1,intpnd_k /* ペンディングビットのクリア */ str r3,[r1] stmfd sp!,{r3} /* マスクビットを瘦赂 */ ldr r2,.int_mask /* 票じ充り哈みのネストを松ぐため */ ldr r1,[r2] /* マスクする */ orr r1,r1,r3 str r1,[r2] /* 充り哈み钓材 */ mov r2,#CPSR_SYS msr cpsr,r2 /* Call Handler */ mov lr, pc mov pc, r0 mov r2,#(CPSR_SYS|CPSR_FIQ_BIT|CPSR_IRQ_BIT) /* 充り哈み敦贿 */ msr cpsr,r2 ldmfd sp!,{r3} /* ペンディングビットの牲耽 */ ldr r2,.int_mask /* 充り哈み钓材 */ ldr r1,[r2] bic r1,r1,r3 str r1,[r2] /* interrupt_count デクリメント */ ldr r2,.interrupt_count ldr r1, [r2] sub r3,r1,#1 str r3, [r2] cmp r3,#0x00 bne return_to_task_irq /* タスクスタックの牲耽 */ ldmfd sp!,{r0} mov sp, r0 ldr r1, reqflg_k /* Check reqflg */ ldr r0,[r1] cmp r0,#0 beq return_to_task_irq mov r0,#0 str r0,[r1] /* Clear reqflg */ b ret_intreturn_to_task_irq: /* * 牲耽借妄 * 充り哈み钓材となるがタスクコンテキスト惧に瘦赂しているため· * 啼玛はない */ ldmfd sp!,{r1} /* CPSRの牲耽借妄 */ msr cpsr, r1 /* 充り哈み钓材 */ ldmfd sp!,{r0-r3,ip,lr,pc} .align 4.int_stack: .long int_stack + 6 * 4 intoffset_k: .long INTOFFSETint_table_k: .long int_table reqflg_k: .long reqflgintpnd_k: .long INTPNDstack: .long STACKTOP.interrupt_count: .long interrupt_count.int_mask: .long INTMASK
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -