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

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

SPIとSerial、KPUの動作を改善

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 7.9 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
51extern "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 * SPI状態定義
65 */
66#define SPI_STATUS_RESET 0x0000 /* SPI未使用状態 */
67#define SPI_STATUS_READY 0x0001 /* SPIレディ状態 */
68#define SPI_STATUS_ERROR 0x0002 /* SPIエラー状態 */
69#define SPI_STATUS_BUSY 0x0004 /* SPI処理中 */
70
71/*
72 * SPI転送モード
73 */
74#define SPI_XMODE_TX 0x0000 /* 送信モード */
75#define SPI_XMODE_RX 0x0001 /* 受信モード */
76#define SPI_XMODE_TXRX 0x0002 /* 送受信モード */
77
78/*
79 * SPIエラー定義
80 */
81#define SPI_ERROR_NONE 0x00000000 /* No error */
82#define SPI_ERROR_MODF 0x00000001 /* MODF error */
83#define SPI_ERROR_CRC 0x00000002 /* CRC error */
84#define SPI_ERROR_OVR 0x00000004 /* OVR error */
85#define SPI_ERROR_FRE 0x00000008 /* FRE error */
86#define SPI_ERROR_DMA 0x00000010 /* DMA transfer error */
87#define SPI_ERROR_TIMEOUT 0x00000020
88
89/*
90 * SPIワークモード定義
91 */
92#define SPI_WORK_MODE_0 0x00000000
93#define SPI_WORK_MODE_1 0x00000001
94#define SPI_WORK_MODE_2 0x00000002
95#define SPI_WORK_MODE_3 0x00000003
96
97/*
98 * SPIフレームフォーマット定義
99 */
100#define SPI_FF_STANDARD 0x00000000
101#define SPI_FF_DUAL 0x00000001
102#define SPI_FF_QUAD 0x00000002
103#define SPI_FF_OCTAL 0x00000003
104
105/*
106 * SPIインストラクションアドレスモード
107 */
108#define SPI_AITM_STANDARD 0x00000000
109#define SPI_AITM_ADDR_STANDARD 0x00000001
110#define SPI_AITM_AS_FRAME_FORMAT 0x00000002
111
112/*
113 * SPI転送モード定義
114 */
115#define SPI_TMOD_TRANS_RECV 0x00000000
116#define SPI_TMOD_TRANS 0x00000001
117#define SPI_TMOD_RECV 0x00000002
118#define SPI_TMOD_EEROM 0x00000003
119
120/*
121 * SPI転送データ長定義
122 */
123#define SPI_TRANS_CHAR 0x01
124#define SPI_TRANS_SHORT 0x02
125#define SPI_TRANS_INT 0x04
126
127/*
128 * SPI CS選択定義
129 */
130#define SPI_CHIP_SELECT_0 0x00
131#define SPI_CHIP_SELECT_1 0x01
132#define SPI_CHIP_SELECT_2 0x02
133#define SPI_CHIP_SELECT_3 0x03
134#define SPI_CHIP_SELECT_MAX 4
135
136 /*
137 * SPI 設定初期設定構造体
138 */
139 typedef struct
140 {
141 uint32_t WorkMode;
142 uint32_t FrameFormat;
143 uint32_t DataSize; /* SPI転送データサイズ */
144 uint32_t Prescaler; /* SPIクロック分周設定 */
145 uint32_t SignBit; /* SPI MSB/LSB設定 */
146 uint32_t InstLength; /* SPI Instraction Length */
147 uint32_t AddrLength; /* SPI Address Length */
148 uint32_t WaitCycles; /* SPI WaitCycles */
149 uint32_t IATransMode; /* SPI 転送モード */
150 int32_t SclkPin; /* SPI SCLK-PIN */
151 int32_t MosiPin; /* SPI MOSI-PIN */
152 int32_t MisoPin; /* SPI MISO-PIN */
153 int32_t SsPin; /* SPI Slave Select-PIN */
154 int32_t SsNo; /* SPI Slave Select-Number */
155 int32_t TxDMAChannel; /* SPI TxDMAチャンネル */
156 int32_t RxDMAChannel; /* SPI RxDMAチャンネル */
157 int semid; /* SPI 通信用セマフォ値 */
158 int semlock; /* SPI ロックセマフォ値 */
159 int semdmaid; /* SPI DMA通信用セマフォ値 */
160 } SPI_Init_t;
161
162 /*
163 * SPIハンドラ
164 */
165 typedef struct _SPI_Handle_t
166 {
167 unsigned long base; /* SPI registers base address */
168 SPI_Init_t Init; /* SPI communication parameters */
169 uint8_t spi_num;
170 uint8_t dfs_offset;
171 uint8_t frf_offset;
172 uint8_t work_mode_offset;
173 uint8_t tmod_offset;
174 uint8_t dummy[3];
175 uint8_t *pTxBuffPtr; /* Pointer to SPI Tx transfer Buffer */
176 uint32_t TxXferSize; /* SPI Tx transfer size */
177 uint32_t TxXferCount; /* SPI Tx Transfer Counter */
178 uint8_t *pRxBuffPtr; /* Pointer to SPI Rx transfer Buffer */
179 uint32_t RxXferSize; /* SPI Rx transfer size */
180 uint32_t RxXferCount; /* SPI Rx Transfer Counter */
181 DMA_Handle_t *hdmatx; /* SPI Tx DMA handle parameters */
182 DMA_Handle_t *hdmarx; /* SPI Rx DMA handle parameters */
183 uint16_t xmode; /* SPI Transfar mode */
184 volatile uint16_t status; /* SPI communication state */
185 volatile uint32_t ErrorCode; /* SPI Error code */
186 } SPI_Handle_t;
187
188 extern SPI_Handle_t *spi_init(ID port, const SPI_Init_t *init);
189 extern ER spi_deinit(SPI_Handle_t *hspi);
190 extern ER spi_core_transmit(SPI_Handle_t *hspi, int8_t ss_no, uint8_t *pdata, uint16_t length);
191 extern ER spi_core_transmit_fill(SPI_Handle_t *hspi, int8_t ss_no, const uint32_t *tx_buff, size_t tx_len);
192 extern ER spi_core_receive(SPI_Handle_t *hspi, int8_t ss_no, void *rx_buff, size_t rx_len);
193 extern ER spi_core_transrecv(SPI_Handle_t *hspi, int8_t ss_no, const uint8_t *tx_buf, uint8_t *rx_buf, size_t len);
194 extern ER spi_transmit(SPI_Handle_t *hspi, uint8_t *pdata, uint16_t length);
195 extern ER spi_receive(SPI_Handle_t *hspi, uint8_t *pdata, uint16_t length);
196 extern ER spi_transrecv(SPI_Handle_t *hspi, uint8_t *ptxData, uint8_t *prxData, uint16_t length);
197 extern ER spi_wait(SPI_Handle_t *hspi, uint32_t timeout);
198 extern void spi_handler(SPI_Handle_t *hspi);
199 extern void spi_isr(intptr_t exinf);
200 extern DMA_Handle_t *spi_dmac_set_single_mode(SPI_Handle_t *hspi,
201 uint8_t rtx,
202 int8_t ss_no,
203 const void *src, void *dest, uint8_t src_inc,
204 uint8_t dest_inc,
205 uint8_t dmac_burst_size,
206 uint8_t dmac_trans_width,
207 size_t block_size);
208 extern ER spi_dmac_wait_done(DMA_Handle_t *hdma);
209
210#ifdef __cplusplus
211}
212#endif
213
214#endif /* _SPI_H_ */
Note: See TracBrowser for help on using the repository browser.