source: azure_iot_hub_f767zi/trunk/asp_baseplatform/pdic/stm32f7xx/sai.h@ 457

Last change on this file since 457 was 457, 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: 14.7 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-2016 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 * STM32F7xx SAIデバイスドライバの外部宣言
44 *
45 */
46
47#ifndef _SAI_H_
48#define _SAI_H_
49
50#ifdef __cplusplus
51 extern "C" {
52#endif
53
54
55/*
56 * AUDIOポート定義
57 */
58#define AUDIO1_PORTID 1
59#define AUDIO2_PORTID 2
60#define NUM_AUDIOPORT 2
61
62/*
63 * AUDIOハードウェア設定構造体
64 */
65typedef struct _AUDIO_PortControlBlock{
66 uint32_t base;
67 uint32_t outgioclockbase;
68 uint32_t outgioclockbit;
69 uint32_t ingioclockbase;
70 uint32_t ingioclockbit;
71 uint32_t intgioclockbase;
72 uint32_t intgioclockbit;
73 uint32_t outdmaclockbase;
74 uint32_t outdmaclockbit;
75 uint32_t indmaclockbase;
76 uint32_t indmaclockbit;
77 uint32_t audioclockbase;
78 uint32_t audioclockbit;
79
80 uint32_t giofsobase;
81 uint32_t giomcobase;
82 uint32_t giosdibase;
83 uint32_t giointbase;
84 uint32_t outdmabase;
85 uint32_t outdmachannel;
86 uint32_t indmabase;
87 uint32_t indmachannel;
88 uint8_t outmsckpin;
89 uint8_t outfspin;
90 uint8_t outsckin;
91 uint8_t outsdpin;
92 uint8_t insdpin;
93 uint8_t inintpin;
94 uint8_t outaf;
95 uint8_t inaf;
96} AUDIO_PortControlBlock;
97
98/*
99 * AUDIO初期化構造体
100 */
101typedef struct {
102 uint32_t AudioMode; /* AUDIOモード */
103 uint32_t Synchro; /* SAIブロックシンクロ値 */
104 uint32_t SynchroExt; /* SAIブロックシンクロ拡張値 */
105 uint32_t OutputDrive; /* 出力デバイス */
106 uint32_t NoDivider; /* DIVIDER有効/無効 */
107 uint32_t FIFOThreshold; /* FIFOスレッシュホールド設定 */
108 uint32_t AudioFrequency; /* AUDIO サンプリング周波数 */
109 uint32_t Mckdiv; /* マスタークロックDIVIDER値 */
110 uint32_t MonoStereoMode; /* モノクロ/ステレオモード */
111 uint32_t CompandingMode; /* コンパウンディングモード */
112 uint32_t TriState; /* TRIStateマネージメント設定 */
113 uint32_t Protocol; /* SAI BLOCKプロトコル */
114 uint32_t DataSize; /* SAI BLOCKデータサイズ */
115 uint32_t FirstBit; /* MSB/LSB設定 */
116 uint32_t ClockStrobing; /* クロック・ストロービング設定 */
117
118 /*
119 * フレームデータ
120 */
121 uint32_t FrameLength; /* フレーム長 */
122 uint32_t ActiveFrameLength; /* アクティブ・フレーム長 */
123 uint32_t FSDefinition; /* フレーム・シンクロナス定義 */
124 uint32_t FSPolarity; /* FS POLARITY設定 */
125 uint32_t FSOffset; /* FS OFFSET設定 */
126
127 /*
128 * スロット定義
129 */
130 uint32_t FirstBitOffset; /* スロット中の最初のデータビット位置 */
131 uint32_t SlotSize; /* スロットサイズ */
132 uint32_t SlotNumber; /* スロット番号 */
133 uint32_t SlotActive; /* SLOTアクティブ設定 */
134}SAI_Init_t;
135
136/*
137 * AUDIOハンドラ定義
138 */
139typedef struct _AUDIO_HandleStruct AUDIO_Handle_t;
140struct _AUDIO_HandleStruct
141{
142 uint32_t base; /* SAIデバイスのベースアドレス */
143 const AUDIO_PortControlBlock *pcb; /* ハードウエア定義構造体へのポインタ */
144 SAI_Init_t OutInit; /* 出力ブロック初期設定 */
145 SAI_Init_t InInit; /* 入力ブロック初期設定 */
146 uint8_t *pBuffPtr; /* データ領域へのポインタ */
147 uint16_t XferSize; /* データサイズ */
148 uint16_t XferCount; /* 送受信カウント */
149 DMA_Handle_t *hdmatx; /* 送信DMAハンドラへのポインタ */
150 DMA_Handle_t *hdmarx; /* 受信DMAハンドラへのポインタ */
151 void (*audiomutecallback)(AUDIO_Handle_t *haudio, uint32_t mode); /* MUTEコールバック関数 */
152 void (*audioerrorcallback)(AUDIO_Handle_t *haudio, uint32_t mode); /* 割込みエラーコールバック関数 */
153 void (*transcallback)(AUDIO_Handle_t *haudio); /* 送信終了コールバック関数 */
154 void (*transhalfcallback)(AUDIO_Handle_t *haudio); /* 送信終了コールバック関数 */
155 void (*recevcallback)(AUDIO_Handle_t *haudio); /* 受信終了コールバック関数 */
156 void (*recevhalfcallback)(AUDIO_Handle_t *haudio); /* 受信終了コールバック関数 */
157 void (*errorcallback)(AUDIO_Handle_t *haudio); /* エラーコールバック関数 */
158 volatile uint32_t status[2]; /* AUDIOステータス */
159 volatile uint32_t ErrorCode; /* エラーコード */
160};
161
162
163/*
164 * AUDIO設定モード定義
165 */
166#define AUDIO_OUT_BLOCK 0
167#define AUDIO_IN_BLOCK 1
168
169/*
170 * AUDIOステータス定義
171 */
172#define AUDIO_STATUS_RESET 0x00 /* AUDIOデバイスリセット状態 */
173#define AUDIO_STATUS_READY 0x01 /* AUDIOデバイスレディ状態 */
174#define AUDIO_STATUS_BUSY 0x02 /* AUDIOデバイスビジィー状態 */
175#define AUDIO_STATUS_BUSY_TX 0x12 /* AUDIOデバイス送信ビジィー状態 */
176#define AUDIO_STATUS_BUSY_RX 0x22 /* AUDIOデバイス受信ビジィー状態 */
177#define AUDIO_STATUS_TIMEOUT 0x03 /* AUDIOデバイスタイムアウト状態 */
178#define AUDIO_STATUS_ERROR 0x04 /* AUDIOデバイスエラー状態 */
179
180/*
181 * AUDIOエラー定義
182 */
183#define AUDIO_ERROR_NONE 0x00000000 /* エラーなし */
184#define AUDIO_ERROR_OVRUDR 0x00000001 /* オーバーランまたはアンダーラン */
185#define AUDIO_ERROR_AFSDET 0x00000004 /* Anticipated Frame synchronisation detection */
186#define AUDIO_ERROR_LFSDET 0x00000008 /* Late Frame synchronisation detection */
187#define AUDIO_ERROR_WCKCFG 0x00000010 /* Wrong clock configuration */
188#define AUDIO_ERROR_TIMEOUT 0x00000040 /* タイムアウト */
189
190/*
191 * SAIブロックシンクロ拡張値(SynchroExt)
192 */
193#define SAI_SYNCEXT_DISABLE 0x00000000
194#define SAI_SYNCEXT_IN_ENABLE 0x00000001
195#define SAI_SYNCEXT_OUTBLOCKA_ENABLE 0x00000002
196#define SAI_SYNCEXT_OUTBLOCKB_ENABLE 0x00000004
197
198/*
199 * AUDIOモード(AudioMode)
200 */
201#define SAI_MODEMASTER_TX 0x00000000
202#define SAI_MODEMASTER_RX SAI_xCR1_MODE_0
203#define SAI_MODESLAVE_TX SAI_xCR1_MODE_1
204#define SAI_MODESLAVE_RX (SAI_xCR1_MODE_1 | SAI_xCR1_MODE_0)
205
206/*
207 * SAI BLOCKプロトコル(Protocol)
208 */
209#define SAI_FREE_PROTOCOL 0x00000000
210#define SAI_SPDIF_PROTOCOL SAI_xCR1_PRTCFG_0
211#define SAI_AC97_PROTOCOL SAI_xCR1_PRTCFG_1
212
213/*
214 * SAI BLOCKデータサイズ(DataSize)
215 */
216#define SAI_DATASIZE_8 SAI_xCR1_DS_1
217#define SAI_DATASIZE_10 (SAI_xCR1_DS_1 | SAI_xCR1_DS_0)
218#define SAI_DATASIZE_16 SAI_xCR1_DS_2
219#define SAI_DATASIZE_20 (SAI_xCR1_DS_2 | SAI_xCR1_DS_0)
220#define SAI_DATASIZE_24 (SAI_xCR1_DS_2 | SAI_xCR1_DS_1)
221#define SAI_DATASIZE_32 (SAI_xCR1_DS_2 | SAI_xCR1_DS_1 | SAI_xCR1_DS_0)
222
223/*
224 * MSB/LSB設定(FirstBit)
225 */
226#define SAI_FIRSTBIT_MSB 0x00000000
227#define SAI_FIRSTBIT_LSB SAI_xCR1_LSBFIRST
228
229/*
230 * クロック・ストロービング設定(ClockStrobing)
231 */
232#define SAI_CLOCKSTROBING_FALLINGEDGE ((uint32_t)0x00000000)
233#define SAI_CLOCKSTROBING_RISINGEDGE ((uint32_t)SAI_xCR1_CKSTR)
234
235/*
236 * SAIブロックシンクロ値(Synchro)
237 */
238#define SAI_ASYNCHRONOUS 0x00000000
239#define SAI_SYNCHRONOUS SAI_xCR1_SYNCEN_0
240#define SAI_SYNCHRONOUS_EXT SAI_xCR1_SYNCEN_1
241
242/*
243 * 出力デバイス(OutputDrive)
244 */
245#define SAI_OUTPUTDRIVE_DISABLE 0x00000000
246#define SAI_OUTPUTDRIVE_ENABLE SAI_xCR1_OUTDRIV
247
248/*
249 * DIVIDER有効/無効(NoDivider)
250 */
251#define SAI_MASTERDIVIDER_ENABLE 0x00000000
252#define SAI_MASTERDIVIDER_DISABLE SAI_xCR1_NODIV
253
254/*
255 * フレーム・シンクロナス定義(FSDefinition)
256 */
257#define SAI_FS_STARTFRAME 0x00000000
258#define SAI_FS_CHANNEL_IDENTIFICATION SAI_xFRCR_FSDEF
259
260/*
261 * FS POLARITY設定(FSPolarity)
262 */
263#define SAI_FS_ACTIVE_LOW 0x00000000
264#define SAI_FS_ACTIVE_HIGH SAI_xFRCR_FSPO
265
266/*
267 * FS OFFSET設定(FSOffset)
268 */
269#define SAI_FS_FIRSTBIT 0x00000000
270#define SAI_FS_BEFOREFIRSTBIT SAI_xFRCR_FSOFF
271
272/*
273 * SLOTサイズ設定(SlotSize)
274 */
275#define SAI_SLOTSIZE_DATASIZE 0x00000000
276#define SAI_SLOTSIZE_16B SAI_xSLOTR_SLOTSZ_0
277#define SAI_SLOTSIZE_32B SAI_xSLOTR_SLOTSZ_1
278
279/*
280 * SLOTアクティブ設定(SlotActive)
281 */
282#define SAI_SLOT_NOTACTIVE 0x00000000
283#define SAI_SLOTACTIVE_0 0x00010000
284#define SAI_SLOTACTIVE_1 0x00020000
285#define SAI_SLOTACTIVE_2 0x00040000
286#define SAI_SLOTACTIVE_3 0x00080000
287#define SAI_SLOTACTIVE_4 0x00100000
288#define SAI_SLOTACTIVE_5 0x00200000
289#define SAI_SLOTACTIVE_6 0x00400000
290#define SAI_SLOTACTIVE_7 0x00800000
291#define SAI_SLOTACTIVE_8 0x01000000
292#define SAI_SLOTACTIVE_9 0x02000000
293#define SAI_SLOTACTIVE_10 0x04000000
294#define SAI_SLOTACTIVE_11 0x08000000
295#define SAI_SLOTACTIVE_12 0x10000000
296#define SAI_SLOTACTIVE_13 0x20000000
297#define SAI_SLOTACTIVE_14 0x40000000
298#define SAI_SLOTACTIVE_15 0x80000000
299#define SAI_SLOTACTIVE_ALL 0xFFFF0000
300
301/*
302 * モノクロ/ステレオモード(MonoStereoMode)
303 */
304#define SAI_STEREOMODE 0x00000000
305#define SAI_MONOMODE SAI_xCR1_MONO
306
307/*
308 * TRIStateマネージメント設定(TriState)
309 */
310#define SAI_OUTPUT_NOTRELEASED 0x00000000
311#define SAI_OUTPUT_RELEASED SAI_xCR2_TRIS
312
313/*
314 * FIFOスレシュホールド設定(FIFOThreshold)
315 */
316#define SAI_FIFOTHRESHOLD_EMPTY 0x00000000
317#define SAI_FIFOTHRESHOLD_1QF SAI_xCR2_FTH_0
318#define SAI_FIFOTHRESHOLD_HF SAI_xCR2_FTH_1
319#define SAI_FIFOTHRESHOLD_3QF (SAI_xCR2_FTH_1 | SAI_xCR2_FTH_0)
320#define SAI_FIFOTHRESHOLD_FULL SAI_xCR2_FTH_2
321
322/*
323 * コンパウンディングモード設定(CompandingMode)
324 */
325#define SAI_NOCOMPANDING 0x00000000
326#define SAI_ULAW_1CPL_COMPANDING SAI_xCR2_COMP_1
327#define SAI_ALAW_1CPL_COMPANDING (SAI_xCR2_COMP_1 | SAI_xCR2_COMP_0)
328#define SAI_ULAW_2CPL_COMPANDING (SAI_xCR2_COMP_1 | SAI_xCR2_CPL)
329#define SAI_ALAW_2CPL_COMPANDING (SAI_xCR2_COMP_1 | SAI_xCR2_COMP_0 | SAI_xCR2_CPL)
330
331
332extern AUDIO_Handle_t *audio_init(ID id);
333extern void audio_deinit(AUDIO_Handle_t *haudio, uint32_t mode);
334extern void audio_clockconfig(AUDIO_Handle_t *haudio, uint32_t AudioFreq, void *Params);
335
336extern ER audio_start(AUDIO_Handle_t *haudio, uint32_t mode);
337extern ER audio_end(AUDIO_Handle_t *haudio, uint32_t mode);
338extern ER audio_transmit(AUDIO_Handle_t *haudio, uint8_t *pData, uint16_t Size);
339extern ER audio_receive(AUDIO_Handle_t *haudio, uint8_t *pData, uint16_t Size);
340
341extern ER audio_dmapause(AUDIO_Handle_t *haudio, uint32_t mode);
342extern ER audio_dmaresume(AUDIO_Handle_t *haudio, uint32_t mode);
343extern ER audio_dmastop(AUDIO_Handle_t *haudio, uint32_t mode);
344extern void audio_enable(AUDIO_Handle_t *haudio, uint32_t mode);
345extern ER audio_disable(AUDIO_Handle_t *haudio, uint32_t mode);
346extern AUDIO_Handle_t *audio_gethandle(ID id);
347extern uint32_t audio_status(AUDIO_Handle_t *haudio, uint32_t mode);
348extern void audio_irqhandler(AUDIO_Handle_t *haudio);
349
350#ifdef __cplusplus
351}
352#endif
353
354#endif /* _SAI_H_ */
355
Note: See TracBrowser for help on using the repository browser.