source: azure_iot_hub_riscv/trunk/asp_baseplatform/pdic/k210/spi.h@ 453

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

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 8.8 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2008-2011 by Embedded and Real-Time Systems Laboratory
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 * Copyright (C) 2015-2019 by TOPPERS PROJECT Educational Working Group.
9 *
10 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15 * スコード中に含まれていること.
16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
19 * の無保証規定を掲載すること.
20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
22 * と.
23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
24 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
26 * 報告すること.
27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
31 * 免責すること.
32 *
33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
37 * の責任を負わない.
38 *
39 * @(#) $Id$
40 */
41/*
42 *
43 * K210 SPIデバイスドライバの外部宣言
44 *
45 */
46
47#ifndef _SPI_H_
48#define _SPI_H_
49
50#ifdef __cplusplus
51 extern "C" {
52#endif
53
54/*
55 * SPIポート定義
56 */
57#define SPI1_PORTID 1
58#define SPI2_PORTID 2
59#define SPI3_PORTID 3
60#define SPI4_PORTID 3
61#define NUM_SPIPORT 4
62
63
64/*
65 * SPI状態定義
66 */
67#define SPI_STATUS_RESET 0x0000 /* SPI未使用状態 */
68#define SPI_STATUS_READY 0x0001 /* SPIレディ状態 */
69#define SPI_STATUS_ERROR 0x0002 /* SPIエラー状態 */
70#define SPI_STATUS_BUSY 0x0004 /* SPI処理中 */
71
72/*
73 * SPI転送モード
74 */
75#define SPI_XMODE_TX 0x0000 /* 送信モード */
76#define SPI_XMODE_RX 0x0001 /* 受信モード */
77#define SPI_XMODE_TXRX 0x0002 /* 送受信モード */
78
79/*
80 * SPIエラー定義
81 */
82#define SPI_ERROR_NONE 0x00000000 /* No error */
83#define SPI_ERROR_MODF 0x00000001 /* MODF error */
84#define SPI_ERROR_CRC 0x00000002 /* CRC error */
85#define SPI_ERROR_OVR 0x00000004 /* OVR error */
86#define SPI_ERROR_FRE 0x00000008 /* FRE error */
87#define SPI_ERROR_DMA 0x00000010 /* DMA transfer error */
88#define SPI_ERROR_TIMEOUT 0x00000020
89
90/*
91 * SPIワークモード定義
92 */
93#define SPI_WORK_MODE_0 0x00000000
94#define SPI_WORK_MODE_1 0x00000001
95#define SPI_WORK_MODE_2 0x00000002
96#define SPI_WORK_MODE_3 0x00000003
97
98/*
99 * SPIフレームフォーマット定義
100 */
101#define SPI_FF_STANDARD 0x00000000
102#define SPI_FF_DUAL 0x00000001
103#define SPI_FF_QUAD 0x00000002
104#define SPI_FF_OCTAL 0x00000003
105
106/*
107 * SPIインストラクションアドレスモード
108 */
109#define SPI_AITM_STANDARD 0x00000000
110#define SPI_AITM_ADDR_STANDARD 0x00000001
111#define SPI_AITM_AS_FRAME_FORMAT 0x00000002
112
113
114/*
115 * SPI転送モード定義
116 */
117#define SPI_TMOD_TRANS_RECV 0x00000000
118#define SPI_TMOD_TRANS 0x00000001
119#define SPI_TMOD_RECV 0x00000002
120#define SPI_TMOD_EEROM 0x00000003
121
122/*
123 * SPI転送データ長定義
124 */
125#define SPI_TRANS_CHAR 0x01
126#define SPI_TRANS_SHORT 0x02
127#define SPI_TRANS_INT 0x04
128
129/*
130 * SPI CS選択定義
131 */
132#define SPI_CHIP_SELECT_0 0x00
133#define SPI_CHIP_SELECT_1 0x01
134#define SPI_CHIP_SELECT_2 0x02
135#define SPI_CHIP_SELECT_3 0x03
136#define SPI_CHIP_SELECT_MAX 4
137
138/*
139 * SPI 設定初期設定構造体
140 */
141typedef struct
142{
143 uint32_t WorkMode;
144 uint32_t FrameFormat;
145 uint32_t DataSize; /* SPI転送データサイズ */
146 uint32_t Prescaler; /* SPIクロック分周設定 */
147 uint32_t SignBit; /* SPI MSB/LSB設定 */
148 uint32_t InstLength; /* SPI Instraction Length */
149 uint32_t AddrLength; /* SPI Address Length */
150 uint32_t WaitCycles; /* SPI WaitCycles */
151 uint32_t IATransMode; /* SPI 転送モード */
152 int32_t SclkPin; /* SPI SCLK-PIN */
153 int32_t MosiPin; /* SPI MOSI-PIN */
154 int32_t MisoPin; /* SPI MISO-PIN */
155 int32_t SsPin; /* SPI Slave Select-PIN */
156 int32_t SsNo; /* SPI Slave Select-Number */
157 int32_t TxDMAChannel; /* SPI TxDMAチャンネル */
158 int32_t RxDMAChannel; /* SPI RxDMAチャンネル */
159 int semid; /* SPI 通信用セマフォ値 */
160 int semlock; /* SPI ロックセマフォ値 */
161 int semdmaid; /* SPI DMA通信用セマフォ値 */
162}SPI_Init_t;
163
164/*
165 * SPIハンドラ
166 */
167typedef struct _SPI_Handle_t
168{
169 unsigned long base; /* SPI registers base address */
170 SPI_Init_t Init; /* SPI communication parameters */
171 uint8_t spi_num;
172 uint8_t dfs_offset;
173 uint8_t frf_offset;
174 uint8_t work_mode_offset;
175 uint8_t tmod_offset;
176 uint8_t dummy[3];
177 uint8_t *pTxBuffPtr; /* Pointer to SPI Tx transfer Buffer */
178 uint32_t TxXferSize; /* SPI Tx transfer size */
179 uint32_t TxXferCount; /* SPI Tx Transfer Counter */
180 uint8_t *pRxBuffPtr; /* Pointer to SPI Rx transfer Buffer */
181 uint32_t RxXferSize; /* SPI Rx transfer size */
182 uint32_t RxXferCount; /* SPI Rx Transfer Counter */
183 DMA_Handle_t *hdmatx; /* SPI Tx DMA handle parameters */
184 DMA_Handle_t *hdmarx; /* SPI Rx DMA handle parameters */
185 uint16_t xmode; /* SPI Transfar mode */
186 volatile uint16_t status; /* SPI communication state */
187 volatile uint32_t ErrorCode; /* SPI Error code */
188}SPI_Handle_t;
189
190
191extern SPI_Handle_t *spi_init(ID port, const SPI_Init_t *init);
192extern ER spi_deinit(SPI_Handle_t *hspi);
193extern ER spi_core_transmit(SPI_Handle_t *hspi, int8_t ss_no, uint8_t *pdata, uint16_t length);
194extern ER spi_core_transmit_fill(SPI_Handle_t *hspi, int8_t ss_no, const uint32_t *tx_buff, size_t tx_len);
195extern ER spi_core_receive(SPI_Handle_t *hspi, int8_t ss_no, void *rx_buff, size_t rx_len);
196extern ER spi_core_transrecv(SPI_Handle_t *hspi, int8_t ss_no, const uint8_t *tx_buf, uint8_t *rx_buf, size_t len);
197extern ER spi_transmit(SPI_Handle_t *hspi, uint8_t *pdata, uint16_t length);
198extern ER spi_receive(SPI_Handle_t *hspi, uint8_t *pdata, uint16_t length);
199extern ER spi_transrecv(SPI_Handle_t *hspi, uint8_t *ptxData, uint8_t *prxData, uint16_t length);
200extern ER spi_wait(SPI_Handle_t *hspi, uint32_t timeout);
201extern void spi_handler(SPI_Handle_t *hspi);
202extern void spi_isr(intptr_t exinf);
203extern DMA_Handle_t *spi_dmac_set_single_mode(SPI_Handle_t *hspi,
204 uint8_t rtx,
205 int8_t ss_no,
206 const void *src, void *dest, uint8_t src_inc,
207 uint8_t dest_inc,
208 uint8_t dmac_burst_size,
209 uint8_t dmac_trans_width,
210 size_t block_size);
211extern ER spi_dmac_wait_done(DMA_Handle_t * hdma);
212
213
214#ifdef __cplusplus
215}
216#endif
217
218#endif /* _SPI_H_ */
219
Note: See TracBrowser for help on using the repository browser.