source: atk2-sc3-1.4.0-ntisr/arch/v850_gcc/prc_insn.h@ 172

Last change on this file since 172 was 172, checked in by ertl-ishikawa, 8 years ago

ATK2-SC3 1.4.0 RH850依存部 非信頼C2ISR対応を追加

  • Property svn:executable set to *
File size: 6.5 KB
Line 
1/*
2 * TOPPERS ATK2
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 * Automotive Kernel Version 2
5 *
6 * Copyright (C) 2012-2014 by Center for Embedded Computing Systems
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 * Copyright (C) 2012-2014 by FUJI SOFT INCORPORATED, JAPAN
9 * Copyright (C) 2012-2013 by Spansion LLC, USA
10 * Copyright (C) 2012-2013 by NEC Communication Systems, Ltd., JAPAN
11 * Copyright (C) 2012-2014 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
12 * Copyright (C) 2012-2014 by Renesas Electronics Corporation, JAPAN
13 * Copyright (C) 2012-2014 by Sunny Giken Inc., JAPAN
14 * Copyright (C) 2012-2014 by TOSHIBA CORPORATION, JAPAN
15 * Copyright (C) 2012-2014 by Witz Corporation, JAPAN
16 *
17 * 上記著作権者
18は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
19 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
20 * 変・再é…
21å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
22 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
23 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
24 * スコード中に含まれていること.
25 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
26 * 用できる形で再é…
27å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
28å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
29 * 者
30マニュアルなど)に,上記の著作権表示,この利用条件および下記
31 * の無保証規定を掲載すること.
32 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
33 * 用できない形で再é…
34å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
35 * と.
36 * (a) 再é…
37å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
38マニュアルなど)に,上記の著
39 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
40 * (b) 再é…
41å¸ƒã®å½¢æ…
42‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
43 * 報告すること.
44 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
45 * 害からも,上記著作権者
46およびTOPPERSプロジェクトをå…
47è²¬ã™ã‚‹ã“と.
48 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
49 * 由に基づく請求からも,上記著作権者
50およびTOPPERSプロジェクトを
51 * å…
52è²¬ã™ã‚‹ã“と.
53 *
54 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
55 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
56 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
57 * 用する者
58に対して,AUTOSARパートナーになることを求めている.
59 *
60 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
61お
62 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
63 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
64 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
65 * の責任を負わない.
66 *
67 * $Id: prc_insn.h 187 2015-06-25 03:39:04Z t_ishikawa $
68 */
69
70/*
71 * プロセッサの特殊命令のインライン関数定義(V850用)
72 */
73#ifndef TOPPERS_PRC_INSN_H
74#define TOPPERS_PRC_INSN_H
75
76#ifndef TOPPERS_MACRO_ONLY
77
78#define V850_MEMORY_CHANGED Asm("" ::: "memory");
79#define SYNCM Asm("syncm");
80
81LOCAL_INLINE uint32
82current_psw(void)
83{
84 volatile uint32 psw;
85 Asm(" ldsr r0,31 \n" /* Select CPU function grp */
86 "\t stsr 5 , %0 \n"
87 : "=r" (psw) :);
88 return(psw);
89}
90
91LOCAL_INLINE void
92set_psw(uint32 psw)
93{
94 Asm(" ldsr r0,31 \n" /* Select CPU function grp */
95 "\t ldsr %0 , 5 \n"
96 : : "r" (psw));
97 return;
98}
99
100LOCAL_INLINE void
101set_psw_wo_fgs(uint32 psw)
102{
103 Asm("\t ldsr %0 , 5 \n"
104 : : "r" (psw));
105 return;
106}
107
108LOCAL_INLINE void
109disable_int(void)
110{
111 Asm(" di");
112}
113
114LOCAL_INLINE void
115enable_int(void)
116{
117 Asm(" ei");
118}
119
120LOCAL_INLINE void
121set_bit(uint8 bit_offset, uint32 addr)
122{
123 uint32 any;
124
125 Asm("mov %1 , %0;"
126 "set1 %2 , 0[%0]" : "=r" (any) : "i" (addr), "i" (bit_offset));
127}
128
129LOCAL_INLINE void
130clr_bit(uint8 bit_offset, uint32 addr)
131{
132 uint32 any;
133
134 Asm("mov %1 , %0;"
135 "clr1 %2 , 0[%0]" : "=r" (any) : "i" (addr), "i" (bit_offset));
136}
137
138#ifdef __v850e2v3__
139
140#define LDSR_REG(reg, val) {\
141 Asm("\tldsr %0, " #reg \
142 : : "r"(val) : "memory" ); \
143}
144
145#define STSR_REG(reg, val) {\
146 Asm("\tstsr " #reg ", %0" \
147 : "=r"(val) : : "memory" ); \
148}
149
150
151#elif defined(__v850e3v5__)
152
153/*
154 * V850E3V5用の割込みコントローラ操作ルーチン
155 */
156LOCAL_INLINE void
157set_pmr(uint16 pmr)
158{
159 uint32 psw;
160
161 /* PMR must be set in di sate(PSW.ID = 1) */
162 psw = current_psw();
163 disable_int();
164
165 Asm("ldsr %0, sr11, 2" ::"r" (pmr));
166
167 set_psw_wo_fgs(psw);
168 Asm("syncp");
169}
170
171LOCAL_INLINE uint16
172get_ispr(void)
173{
174 uint16 ispr;
175 Asm("stsr sr10, %0, 2" : "=r" (ispr) :);
176 return(ispr);
177}
178
179LOCAL_INLINE void
180clear_ispr(void)
181{
182 uint32 psw;
183
184 /* ISPR must be set in di sate(PSW.ID = 1) */
185 psw = current_psw();
186 disable_int();
187
188 Asm("ldsr %0, sr13, 2" ::"r" (1)); /* INTCFG = 1; ISPR を書き換え可能に */
189 Asm("ldsr %0, sr10, 2" ::"r" (0)); /* ISPR = 0 */
190 Asm("ldsr %0, sr13, 2" ::"r" (0)); /* INTCFG = 0; ISPR を書き換え禁止に(自動更新に) */
191
192 set_psw_wo_fgs(psw);
193 Asm("syncp");
194}
195
196LOCAL_INLINE uint32
197current_cpuid(void)
198{
199 uint32 htcfg0_val;
200 Asm("stsr sr0, %0, 2":"=r"(htcfg0_val):);
201 return(((htcfg0_val >> 16) & 0x03));
202}
203
204#define LDSR_REG(reg, sel, val) {\
205 uint32 sval = val; \
206 Asm("ldsr %0, "#reg", "#sel"\n"\
207 ::"r"(sval));\
208}
209
210#define STSR_REG(reg, sel, val) {\
211 Asm("stsr "#reg", %0, "#sel"\n"\
212 :"=r"(val) );\
213}
214
215#define MPA_WRITE(mpuid, mpla, mpua, mpat) { \
216 __LDSR(mpuid*4, 6, mpla); \
217 __LDSR(mpuid*4+1, 6, mpua); \
218 __LDSR(mpuid*4+2, 6, mpat); \
219}
220
221LOCAL_INLINE void
222set_intbp(uint32 intbp)
223{
224 uint32 psw;
225
226 /* INTBP must be set in di sate(PSW.ID = 1) */
227 psw = current_psw();
228 disable_int();
229
230 Asm("\t ldsr %0, 4, 1 \n"
231 : : "r" (intbp) :);
232
233 set_psw_wo_fgs(psw);
234
235 return;
236}
237
238#else /* __v850e3v5__ */
239#error please define ether __v850e2v3__ or __v850e3v5__
240#endif /* __v850e2v3__ */
241
242#endif /* TOPPERS_MACRO_ONLY */
243
244#endif /* TOPPERS_PRC_INSN_H */
Note: See TracBrowser for help on using the repository browser.