source: EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_sil.h@ 270

Last change on this file since 270 was 270, checked in by coas-nagasima, 7 years ago

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 4.9 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6 * Toyohashi Univ. of Technology, JAPAN
7 * Copyright (C) 2004-2016 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
9 *
10 * 上記著作権者
11は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 * 変・再é…
14å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * スコード中に含まれていること.
18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19 * 用できる形で再é…
20å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
21å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
22 * 者
23マニュアルなど)に,上記の著作権表示,この利用条件および下記
24 * の無保証規定を掲載すること.
25 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
26 * 用できない形で再é…
27å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
28 * と.
29 * (a) 再é…
30å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
31マニュアルなど)に,上記の著
32 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
33 * (b) 再é…
34å¸ƒã®å½¢æ…
35‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
36 * 報告すること.
37 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
38 * 害からも,上記著作権者
39およびTOPPERSプロジェクトをå…
40è²¬ã™ã‚‹ã“と.
41 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
42 * 由に基づく請求からも,上記著作権者
43およびTOPPERSプロジェクトを
44 * å…
45è²¬ã™ã‚‹ã“と.
46 *
47 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
48お
49 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
50 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
51 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
52 * の責任を負わない.
53 *
54 * $Id: core_sil.h 270 2017-02-09 04:03:47Z coas-nagasima $
55 */
56
57/*
58 * sil.hのコア依存部(ARM用)
59 *
60 * このヘッダファイルは,target_sil.h(または,そこからインクルードさ
61 * れるファイル)のみからインクルードされる.他のファイルから直接イン
62 * クルードしてはならない.
63 */
64
65#ifndef TOPPERS_CORE_SIL_H
66#define TOPPERS_CORE_SIL_H
67
68#include <t_stddef.h>
69
70#ifndef TOPPERS_MACRO_ONLY
71#ifndef __thumb__
72
73/*
74 * ステータスレジスタ(CPSR)の現在値の読出し
75 */
76Inline uint32_t
77TOPPERS_current_cpsr(void)
78{
79 uint32_t cpsr;
80
81 Asm("mrs %0, cpsr" : "=r"(cpsr));
82 return(cpsr);
83}
84
85/*
86 * ステータスレジスタ(CPSR)の現在値の変更
87 */
88Inline void
89TOPPERS_set_cpsr(uint32_t cpsr)
90{
91 Asm("msr cpsr_cxsf, %0" : : "r"(cpsr) : "memory","cc");
92}
93
94#else /* __thumb__ */
95/*
96 * Thumbモードではmrs/msr命令が使用できないため,関数として実現して,
97 * ARMモードに移行して実行する.
98 */
99
100/*
101 * ステータスレジスタ(CPSR)の現在値の読出し
102 */
103extern uint32_t current_cpsr(void);
104#define TOPPERS_current_cpsr() current_cpsr()
105
106/*
107 * ステータスレジスタ(CPSR)の現在値の変更
108 */
109extern void set_cpsr(uint32_t cpsr);
110#define TOPPERS_set_cpsr(cpsr) current_cpsr(cpsr)
111
112#endif /* __thumb__ */
113
114/*
115 * すべての割込み(FIQとIRQ)の禁止
116 */
117Inline uint32_t
118TOPPERS_disint(void)
119{
120 uint32_t cpsr;
121 uint32_t fiq_irq_mask;
122
123 cpsr = TOPPERS_current_cpsr();
124 fiq_irq_mask = cpsr & (0x40U|0x80U);
125#if __TARGET_ARCH_ARM == 6 || __TARGET_ARCH_ARM == 7
126 Asm("cpsid fi" ::: "memory");
127#else /* __TARGET_ARCH_ARM == 6 || __TARGET_ARCH_ARM == 7 */
128 cpsr |= (0x40U|0x80U);
129 TOPPERS_set_cpsr(cpsr);
130#endif /* __TARGET_ARCH_ARM == 6 || __TARGET_ARCH_ARM == 7 */
131 return(fiq_irq_mask);
132}
133
134/*
135 * FIQとIRQの禁止ビットの復帰
136 */
137Inline void
138TOPPERS_set_fiq_irq(uint32_t fiq_irq_mask)
139{
140 uint32_t cpsr;
141
142 cpsr = TOPPERS_current_cpsr();
143 cpsr &= ~(0x40U|0x80U);
144 cpsr |= fiq_irq_mask;
145 TOPPERS_set_cpsr(cpsr);
146}
147
148/*
149 * å…
150¨å‰²è¾¼ã¿ãƒ­ãƒƒã‚¯çŠ¶æ…
151‹ã®åˆ¶å¾¡
152 */
153#define SIL_PRE_LOC uint32_t TOPPERS_fiq_irq_mask
154#define SIL_LOC_INT() ((void)(TOPPERS_fiq_irq_mask = TOPPERS_disint()))
155#define SIL_UNL_INT() (TOPPERS_set_fiq_irq(TOPPERS_fiq_irq_mask))
156
157#endif /* TOPPERS_MACRO_ONLY */
158#endif /* TOPPERS_CORE_SIL_H */
Note: See TracBrowser for help on using the repository browser.