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

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

ドライバーの追加.

File size: 5.1 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 "can_if.h"
46#include "hsbrh850f1l_device.h"
47#include "prc_sil.h"
48
49/*
50 * Port 0 Configration for RSCAN0
51 * P10_1 : RSCAN0_TX : 第2兼用
52 * P10_0 : RSCAN0_RX : 第2兼用
53 */
54#define RSCAN0_P10_MASK ((uint16) 0x0003)
55#define RSCAN0_PMC10_INIT ((uint16) 0x0003)
56#define RSCAN0_PFCAE10_INIT ((uint16) 0x0000)
57#define RSCAN0_PFCE10_INIT ((uint16) 0x0000)
58#define RSCAN0_PFC10_INIT ((uint16) 0x0003)
59#define RSCAN0_PM10_INIT ((uint16) 0x0001)
60#define RSCAN0_PIBC10_INIT ((uint16) 0x0001)
61
62/*
63 * rscan_port_init();
64 */
65static void
66rscan_port_init(void) {
67 uint16 wk;
68
69 /*
70 * CAN0
71 * RX : P10_1
72 * TX : P10_0
73 */
74 /* PFCAE0 設定 */
75 wk = sil_reh_mem((void *) PFCAE(10));
76 wk &= ~RSCAN0_P10_MASK;
77 wk |= (RSCAN0_PFCAE10_INIT & RSCAN0_P10_MASK);
78 sil_wrh_mem((void *) PFCAE(10), wk);
79
80 /* PFCE0 設定 */
81 wk = sil_reh_mem((void *) PFCE(10));
82 wk &= ~RSCAN0_P10_MASK;
83 wk |= (RSCAN0_PFCE10_INIT & RSCAN0_P10_MASK);
84 sil_wrh_mem((void *) PFCE(10), wk);
85
86 /* PFC0 設定 */
87 wk = sil_reh_mem((void *) PFC(10));
88 wk &= ~RSCAN0_P10_MASK;
89 wk |= (RSCAN0_PFC10_INIT & RSCAN0_P10_MASK);
90 sil_wrh_mem((void *) PFC(10), wk);
91
92 /* PMC0 設定 */
93 wk = sil_reh_mem((void *) PMC(10));
94 wk &= ~RSCAN0_P10_MASK;
95 wk |= (RSCAN0_PMC10_INIT & RSCAN0_P10_MASK);
96 sil_wrh_mem((void *) PMC(10), wk);
97
98 /* PM0 設定 */
99 wk = sil_reh_mem((void *) PM(10));
100 wk &= ~RSCAN0_P10_MASK;
101 wk |= (RSCAN0_PM10_INIT & RSCAN0_P10_MASK);
102 sil_wrh_mem((void *) PM(10), wk);
103
104 /* PIBC0 設定 */
105 wk = sil_reh_mem((void *) PIBC(10));
106 wk &= ~RSCAN0_P10_MASK;
107 wk |= (RSCAN0_PIBC10_INIT & RSCAN0_P10_MASK);
108 sil_wrh_mem((void *) PIBC(10), wk);
109
110 /* CANトランシーバポート初期化(現状CanTrcvが存在しないため,ここで初期化する) */
111 sil_wrh_mem((void *) P(9U), sil_reh_mem((void *) P(9U)) & 0xFFFDU);
112 sil_wrh_mem((void *) PM(9U), sil_reh_mem((void *) PM(9U)) & 0xFFFDU);
113 sil_wrh_mem((void *) PMC(9U), sil_reh_mem((void *) PMC(9U)) & 0xFFFDU);
114}
115
116/* C_ISO_CANOSCクロック分周レジスタ */
117#define CKSC_ICANOSCD_CTL 0xFFF8AA00U
118
119static void
120rscan_clock_init() {
121 /* CANで使用するクロック(C_ISO_CANOSC)に メインクロック(MainOsc)を設定する */
122 sil_wrw_mem((void *) PROTCMD1, 0x000000A5U);
123 sil_wrw_mem((void *) CKSC_ICANOSCD_CTL, 0x00000001U);
124 sil_wrw_mem((void *) CKSC_ICANOSCD_CTL, 0xFFFFFFFEU);
125 sil_wrw_mem((void *) CKSC_ICANOSCD_CTL, 0x00000001U);
126}
127
128/*
129 * CANの初期化
130 */
131void
132tCanInit(void)
133{
134 rscan_clock_init();
135
136 rscan_port_init();
137
138 /* CAM初期化 */
139 RsCanInit(0);
140}
141
142void
143tCanSetMailBoxInfo(uint8 mb_id, uint8 direction,
144 uint32 id, uint8 mask)
145{
146 RsCanSetMailBoxInfo(0, mb_id, direction, 0, id, mask, 0);
147}
148
149/*
150 * CANの有効化
151 */
152void
153tCanEnable(void)
154{
155 RsCanEnable(0);
156}
157
158/*
159 * CANデータの受信
160 */
161uint8
162tCanGetRxData(uint8 mb_id, uint8 id, uint8 *p_data, uint8 *p_len){
163 return RsCanGetRxData(0, mb_id, p_data, p_len);
164}
165
166/*
167 * CANデータの送信
168 */
169uint8
170tCanSetTxData(uint8 mb_id, uint8 id, uint8 *p_data, uint8 len){
171 return RsCanSetTxData(0, mb_id, id, p_data, len);
172}
Note: See TracBrowser for help on using the repository browser.