source: rc_autosar_rh850/trunk/driver/driver_if.c@ 113

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

ドライバーの追加.

File size: 5.4 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2014-2015 by Center for Embedded Computing Systems
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 *
8 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
9 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
10 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
11 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
13 * スコード中に含まれていること.
14 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
16 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
17 * の無保証規定を掲載すること.
18 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
19 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
20 * と.
21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
23 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
24 * 報告すること.
25 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
26 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
27 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
28 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
29 * 免責すること.
30 *
31 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
32 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
33 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
34 * 用する者に対して,AUTOSARパートナーになることを求めている.
35 *
36 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
37 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
38 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
39 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
40 * の責任を負わない.
41 *
42 * $Id: target_rc_car.c 20 2015-04-20 14:29:19Z honda $
43 */
44#include "Os.h"
45#include "driver_if.h"
46#include "rlin3x.h"
47#include "hsbrh850f1l_device.h"
48#include "taub_pwm.h"
49#include "prc_sil.h"
50
51/*
52 * IOポート経由で接続されたTLU01の制御
53 */
54
55/*
56 * TLU01-1 : P10_11
57 * TLU01-2 : P10_10
58 * TLU01-3 : P10_9
59 * TLU01-4 : P10_8
60 * TLU01-5 : P10_7
61 * TLU01-6 : P10_6
62 * TLU01-7 : P9_6
63 * TLU01-8 : P9_5
64 */
65
66#define TLU01_P10 0x0FC0 /* P10_11, P10_10, P10_9, P10_8, P10_7, P10_6 */
67#define TLU01_P9 0x0060 /* P9_6, P9_5 */
68
69/*
70 * ボディー系の初期化
71 */
72void
73tInitBody(void)
74{
75 uint16 wk;
76
77 /* PMC10 設定 */
78 wk = sil_reh_mem((void *) PMC(10));
79 wk &= ~TLU01_P10;
80 sil_wrh_mem((void *) PMC(10), wk);
81
82 /* PM10 設定 */
83 wk = sil_reh_mem((void *) PM(10));
84 wk &= ~TLU01_P10;
85 sil_wrh_mem((void *) PM(10), wk);
86
87 wk = sil_reh_mem((void *) P(10));
88 wk &= ~TLU01_P10;
89 sil_wrh_mem((void *) P(10), wk);
90
91 /* PMC9 設定 */
92 wk = sil_reh_mem((void *) PMC(9));
93 wk &= ~TLU01_P9;
94 sil_wrh_mem((void *) PMC(9), wk);
95
96 /* PM9 設定 */
97 wk = sil_reh_mem((void *) PM(9));
98 wk &= ~TLU01_P9;
99 sil_wrh_mem((void *) PM(9), wk);
100
101 wk = sil_reh_mem((void *) P(9));
102 wk &= ~TLU01_P9;
103 sil_wrh_mem((void *) P(9), wk);
104}
105
106#define TLU01_PORT_MIN 0
107#define TLU01_PORT_MAX 7
108
109static const uint32 tlu01_pinfo[8] ={
110 0x0A0200, /* WINKER_L */
111 0x0A0400, /* WINKER_R */
112 0x0A0080, /* BREAK_LAMP */
113 0x0A0800, /* HEAD_LAMP */
114 0x0A0100, /* FOG_LAMP */
115 0x0A0040, /* BACK_LAMP */
116 0x090040, /* BUZZER */
117 0x090020, /* Reserve */
118};
119
120void
121tlu01_set(uint8 no, boolean on)
122{
123 uint16 wk;
124 uint16 pattern;
125 uint32 pinfo;
126 uint8 portno;
127
128 if (!(no <= TLU01_PORT_MAX)) {
129 return;
130 }
131
132 pinfo = tlu01_pinfo[no];
133 pattern = pinfo & 0xffff;
134 portno = (tlu01_pinfo[no] >> 16);
135
136 wk = sil_reh_mem((void *) P(portno));
137 if (on) {
138 wk |= pattern;
139 }
140 else {
141 wk &= ~pattern;
142 }
143 sil_wrh_mem((void *) P(portno), wk);
144}
145
146/*
147 * 個別のLEDの設定
148 */
149void
150tSetEachLED(uint8 no, boolean on)
151{
152 tlu01_set(no, on);
153}
154
155/*
156 * 接続LEDの最大数
157 */
158#define MAX_LED_NO 6
159
160/*
161 * LEDの設定
162 */
163void
164tSetLED(uint32 pattern)
165{
166 int loop;
167
168 for(loop = 0; loop <= MAX_LED_NO; loop++){
169 if((pattern & (1 << loop)) != 0){
170 tlu01_set(loop, TRUE);
171 }
172 else{
173 tlu01_set(loop, FALSE);
174 }
175 }
176}
177
178void
179tSetBuzzer(boolean onoff){
180 uint16 wk;
181
182 wk = sil_reh_mem((void *) P(9));
183 if(onoff == TRUE){
184 wk |= 1 << 6;
185 }
186 else {
187 wk &= ~(1 << 6);
188 }
189 sil_wrh_mem((void *) P(9), wk);
190}
191
192/*
193 * SDBDT接続のUARTの初期化
194 */
195void
196tInitSBDBTUart(void)
197{
198 rlin3x_init();
199}
200
201/*
202 * SDBDT接続のUARTからの受信
203 */
204boolean
205tReceiveSBDBTUart(unsigned char *p_str, uint32 len)
206{
207 return rlin3x_receive(p_str, len);
208}
209
210/*
211 * SDBDT接続のUARTへ送信
212 */
213boolean
214tSendSBDBTUart(unsigned char *p_str)
215{
216 uint16 len = strlen(p_str);
217 return rlin3x_send(p_str, len);
218}
219
220/*
221 * PWM関連の初期化
222 */
223void
224tInitPWM(uint32 cycle_us, uint32 servo_duty_us, uint32 esc_duty_us)
225{
226 taub_init_pwm(cycle_us, servo_duty_us, esc_duty_us);
227}
228
229/*
230 * サーボのデューティ比の変更
231 */
232void
233tChangeServoDuty(uint32 servo_duty_us)
234{
235 taub_change_servo_duty(servo_duty_us);
236}
237
238/*
239 * ESCのデューティ比の変更
240 */
241void
242tChangeESCDuty(uint32 esc_duty_us)
243{
244 taub_change_esc_duty(esc_duty_us);
245}
246
247/*
248 * ESCのデューティ比の変更
249 */
250void
251tChangeESCDuty100NS(uint32 esc_duty_100ns)
252{
253 taub_change_esc_duty_100ns(esc_duty_100ns);
254}
Note: See TracBrowser for help on using the repository browser.