source: atk2-sc3_fl850f1l/arch/v850_gcc/prc_insn.h@ 117

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

ATK2-SC3 1.3.2 FL850F1L(RH850F1L)依存部(GCC/GHS/CCRH)を追加

File size: 5.7 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 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
18 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
19 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
20 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
21 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
22 * スコード中に含まれていること.
23 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
24 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
25 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
26 * の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
29 * と.
30 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
31 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
32 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
33 * 報告すること.
34 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
35 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
36 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
37 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
38 * 免責すること.
39 *
40 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
41 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
42 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
43 * 用する者に対して,AUTOSARパートナーになることを求めている.
44 *
45 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
47 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
48 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
49 * の責任を負わない.
50 *
51 * $Id: prc_insn.h 187 2015-06-25 03:39:04Z t_ishikawa $
52 */
53
54/*
55 * プロセッサの特殊命令のインライン関数定義(V850用)
56 */
57#ifndef TOPPERS_PRC_INSN_H
58#define TOPPERS_PRC_INSN_H
59
60#ifndef TOPPERS_MACRO_ONLY
61
62#define V850_MEMORY_CHANGED Asm("" ::: "memory");
63#define SYNCM Asm("syncm");
64
65LOCAL_INLINE uint32
66current_psw(void)
67{
68 volatile uint32 psw;
69 Asm(" ldsr r0,31 \n" /* Select CPU function grp */
70 "\t stsr 5 , %0 \n"
71 : "=r" (psw) :);
72 return(psw);
73}
74
75LOCAL_INLINE void
76set_psw(uint32 psw)
77{
78 Asm(" ldsr r0,31 \n" /* Select CPU function grp */
79 "\t ldsr %0 , 5 \n"
80 : : "r" (psw));
81 return;
82}
83
84LOCAL_INLINE void
85set_psw_wo_fgs(uint32 psw)
86{
87 Asm("\t ldsr %0 , 5 \n"
88 : : "r" (psw));
89 return;
90}
91
92LOCAL_INLINE void
93disable_int(void)
94{
95 Asm(" di");
96}
97
98LOCAL_INLINE void
99enable_int(void)
100{
101 Asm(" ei");
102}
103
104LOCAL_INLINE void
105set_bit(uint8 bit_offset, uint32 addr)
106{
107 uint32 any;
108
109 Asm("mov %1 , %0;"
110 "set1 %2 , 0[%0]" : "=r" (any) : "i" (addr), "i" (bit_offset));
111}
112
113LOCAL_INLINE void
114clr_bit(uint8 bit_offset, uint32 addr)
115{
116 uint32 any;
117
118 Asm("mov %1 , %0;"
119 "clr1 %2 , 0[%0]" : "=r" (any) : "i" (addr), "i" (bit_offset));
120}
121
122#ifdef __v850e2v3__
123
124#define LDSR_REG(reg, val) {\
125 Asm("\tldsr %0, " #reg \
126 : : "r"(val) : "memory" ); \
127}
128
129#define STSR_REG(reg, val) {\
130 Asm("\tstsr " #reg ", %0" \
131 : "=r"(val) : : "memory" ); \
132}
133
134
135#elif defined(__v850e3v5__)
136
137/*
138 * V850E3V5用の割込みコントローラ操作ルーチン
139 */
140LOCAL_INLINE void
141set_pmr(uint16 pmr)
142{
143 uint32 psw;
144
145 /* PMR must be set in di sate(PSW.ID = 1) */
146 psw = current_psw();
147 disable_int();
148
149 Asm("ldsr %0, sr11, 2" ::"r" (pmr));
150
151 set_psw_wo_fgs(psw);
152 Asm("syncp");
153}
154
155LOCAL_INLINE uint16
156get_ispr(void)
157{
158 uint16 ispr;
159 Asm("stsr sr10, %0, 2" : "=r" (ispr) :);
160 return(ispr);
161}
162
163LOCAL_INLINE void
164clear_ispr(void)
165{
166 uint32 psw;
167
168 /* ISPR must be set in di sate(PSW.ID = 1) */
169 psw = current_psw();
170 disable_int();
171
172 Asm("ldsr %0, sr13, 2" ::"r" (1)); /* INTCFG = 1; ISPR を書き換え可能に */
173 Asm("ldsr %0, sr10, 2" ::"r" (0)); /* ISPR = 0 */
174 Asm("ldsr %0, sr13, 2" ::"r" (0)); /* INTCFG = 0; ISPR を書き換え禁止に(自動更新に) */
175
176 set_psw_wo_fgs(psw);
177 Asm("syncp");
178}
179
180LOCAL_INLINE uint32
181current_cpuid(void)
182{
183 uint32 htcfg0_val;
184 Asm("stsr sr0, %0, 2":"=r"(htcfg0_val):);
185 return(((htcfg0_val >> 16) & 0x03));
186}
187
188#define LDSR_REG(reg, sel, val) {\
189 uint32 sval = val; \
190 Asm("ldsr %0, "#reg", "#sel"\n"\
191 ::"r"(sval));\
192}
193
194#define STSR_REG(reg, sel, val) {\
195 Asm("stsr "#reg", %0, "#sel"\n"\
196 :"=r"(val) );\
197}
198
199#define MPA_WRITE(mpuid, mpla, mpua, mpat) { \
200 __LDSR(mpuid*4, 6, mpla); \
201 __LDSR(mpuid*4+1, 6, mpua); \
202 __LDSR(mpuid*4+2, 6, mpat); \
203}
204
205LOCAL_INLINE void
206set_intbp(uint32 intbp)
207{
208 uint32 psw;
209
210 /* INTBP must be set in di sate(PSW.ID = 1) */
211 psw = current_psw();
212 disable_int();
213
214 Asm("\t ldsr %0, 4, 1 \n"
215 : : "r" (intbp) :);
216
217 set_psw_wo_fgs(psw);
218
219 return;
220}
221
222#else /* __v850e3v5__ */
223#error please define ether __v850e2v3__ or __v850e3v5__
224#endif /* __v850e2v3__ */
225
226#endif /* TOPPERS_MACRO_ONLY */
227
228#endif /* TOPPERS_PRC_INSN_H */
Note: See TracBrowser for help on using the repository browser.