source: azure_iot_hub_f767zi/trunk/asp_baseplatform/pdic/stm32f7xx/adc.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: 13.6 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 * STM32F4xx ADCデバイスドライバの外部宣言
44 *
45 */
46
47#ifndef _ADC_H_
48#define _ADC_H_
49
50#ifdef __cplusplus
51 extern "C" {
52#endif
53
54/*
55 * ADCポート定義
56 */
57#define ADC1_PORTID 1
58#define ADC2_PORTID 2
59#define ADC3_PORTID 3
60#define NUM_ADCPORT 3
61
62/*
63 * ADCクロックプリスケーラ定義(ClockPrescaler)
64 */
65#define ADC_CLOCK_SYNC_PCLK_DIV2 0x00000000
66#define ADC_CLOCK_SYNC_PCLK_DIV4 ADC_CCR_ADCPRE_0
67#define ADC_CLOCK_SYNC_PCLK_DIV6 ADC_CCR_ADCPRE_1
68#define ADC_CLOCK_SYNC_PCLK_DIV8 ADC_CCR_ADCPRE
69
70/*
71 * ADCリゾリューション定義(Resolution)
72 */
73#define ADC_RESOLUTION_12B 0x00000000
74#define ADC_RESOLUTION_10B ADC_CR1_RES_0
75#define ADC_RESOLUTION_8B ADC_CR1_RES_1
76#define ADC_RESOLUTION_6B ADC_CR1_RES
77
78/*
79 * ADCデータアライン定義(DataAlign)
80 */
81#define ADC_DATAALIGN_RIGHT 0x00000000
82#define ADC_DATAALIGN_LEFT ADC_CR2_ALIGN
83
84
85/*
86 * ADCスキャンコンバージョンモード(ScanConvMode)
87 */
88#define ADC_SCANMODE_DISABLE 0x00000000
89#define ADC_SCANMODE_ENABLE ADC_CR1_SCAN
90
91/*
92 * ADC EOCシーケンス設定(EOCSelection)
93 */
94#define ADC_EOC_SEQ_DISABLE 0x00000000
95#define ADC_EOC_SEQ_ENABLE ADC_CR2_EOCS
96
97/*
98 * ADC継続モード設定(ContinuousConvMode)
99 */
100#define ADC_CONTINUOUS_DISABLE 0x00000000
101#define ADC_CONTINUOUS_ENABLE ADC_CR2_CONT
102
103/*
104 * ADC DMA設定定義(DMAContinuousRequests)
105 */
106#define ADC_DMACONTINUOUS_DISABLE 0x00000000
107#define ADC_DMANONECIRCULAR 0x80000000
108#define ADC_DMACONTINUOUS_ENABLE ADC_CR2_DDS
109#define ADC_DMACONTINUOUS_ENABLE2 (ADC_CR2_DDS | ADC_DMANONECIRCULAR)
110
111/*
112 * ADC 非継続モード設定(DiscontinuousConvMode)
113 */
114#define ADC_DISCONTINUOUS_DISABLE 0x00000000
115#define ADC_DISCONTINUOUS_ENABLE ADC_CR1_DISCEN
116
117/*
118 * ADC外部トリガソース設定(ExternalTrigConv)
119 */
120#define ADC_EXTERNALTRIGCONV_T1_CC1 0x00000000
121#define ADC_EXTERNALTRIGCONV_T1_CC2 ADC_CR2_EXTSEL_0
122#define ADC_EXTERNALTRIGCONV_T1_CC3 ADC_CR2_EXTSEL_1
123#define ADC_EXTERNALTRIGCONV_T2_CC2 (ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0)
124#define ADC_EXTERNALTRIGCONV_T2_CC3 ADC_CR2_EXTSEL_2
125#define ADC_EXTERNALTRIGCONV_T2_CC4 (ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0)
126#define ADC_EXTERNALTRIGCONV_T2_TRGO (ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1)
127#define ADC_EXTERNALTRIGCONV_T3_CC1 (ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0)
128#define ADC_EXTERNALTRIGCONV_T3_TRGO ADC_CR2_EXTSEL_3
129#define ADC_EXTERNALTRIGCONV_T4_CC4 (ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_0)
130#define ADC_EXTERNALTRIGCONV_T5_CC1 (ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_1)
131#define ADC_EXTERNALTRIGCONV_T5_CC2 (ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0)
132#define ADC_EXTERNALTRIGCONV_T5_CC3 (ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2)
133#define ADC_EXTERNALTRIGCONV_T8_CC1 (ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0)
134#define ADC_EXTERNALTRIGCONV_T8_TRGO (ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1)
135#define ADC_EXTERNALTRIGCONV_Ext_IT11 ADC_CR2_EXTSEL
136#define ADC_SOFTWARE_START (ADC_CR2_EXTSEL + 1)
137
138/*
139 * ADC外部トリガエッジ設定()
140 */
141#define ADC_EXTERNALTRIGCONVEDGE_NONE 0x00000000
142#define ADC_EXTERNALTRIGCONVEDGE_RISING ADC_CR2_EXTEN_0
143#define ADC_EXTERNALTRIGCONVEDGE_FALLING ADC_CR2_EXTEN_1
144#define ADC_EXTERNALTRIGCONVEDGE_RISINGFALLING ADC_CR2_EXTEN
145
146
147/*
148 * ADCチャネル定義
149 */
150#define ADC_CHANNEL_0 0x00000000
151#define ADC_CHANNEL_1 ADC_CR1_AWDCH_0
152#define ADC_CHANNEL_2 ADC_CR1_AWDCH_1
153#define ADC_CHANNEL_3 (ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0)
154#define ADC_CHANNEL_4 ADC_CR1_AWDCH_2
155#define ADC_CHANNEL_5 (ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_0)
156#define ADC_CHANNEL_6 (ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_1)
157#define ADC_CHANNEL_7 (ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0)
158#define ADC_CHANNEL_8 ADC_CR1_AWDCH_3
159#define ADC_CHANNEL_9 (ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_0)
160#define ADC_CHANNEL_10 (ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_1)
161#define ADC_CHANNEL_11 (ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0)
162#define ADC_CHANNEL_12 (ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2)
163#define ADC_CHANNEL_13 (ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_0)
164#define ADC_CHANNEL_14 (ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_1)
165#define ADC_CHANNEL_15 (ADC_CR1_AWDCH_3 | ADC_CR1_AWDCH_2 | ADC_CR1_AWDCH_1 | ADC_CR1_AWDCH_0)
166#define ADC_CHANNEL_16 ADC_CR1_AWDCH_4
167#define ADC_CHANNEL_17 (ADC_CR1_AWDCH_4 | ADC_CR1_AWDCH_0)
168#define ADC_CHANNEL_18 (ADC_CR1_AWDCH_4 | ADC_CR1_AWDCH_1)
169
170#define ADC_CHANNEL_VREFINT ADC_CHANNEL_17
171#define ADC_CHANNEL_VBAT ADC_CHANNEL_18
172
173/*
174 * ADCサンプリング時間設定
175 */
176#define ADC_SAMPLETIME_3CYCLES 0x00000000
177#define ADC_SAMPLETIME_15CYCLES ADC_SMPR1_SMP10_0
178#define ADC_SAMPLETIME_28CYCLES ADC_SMPR1_SMP10_1
179#define ADC_SAMPLETIME_56CYCLES (ADC_SMPR1_SMP10_1 | ADC_SMPR1_SMP10_0)
180#define ADC_SAMPLETIME_84CYCLES ADC_SMPR1_SMP10_2
181#define ADC_SAMPLETIME_112CYCLES (ADC_SMPR1_SMP10_2 | ADC_SMPR1_SMP10_0)
182#define ADC_SAMPLETIME_144CYCLES (ADC_SMPR1_SMP10_2 | ADC_SMPR1_SMP10_1)
183#define ADC_SAMPLETIME_480CYCLES ADC_SMPR1_SMP10
184
185
186/*
187 * ADCアナログウォッチドックモード設定
188 */
189#define ADC_ANALOGWATCHDOG_NONE 0x00000000
190#define ADC_ANALOGWATCHDOG_SINGLE_REG (ADC_CR1_AWDSGL | ADC_CR1_AWDEN)
191#define ADC_ANALOGWATCHDOG_SINGLE_INJEC (ADC_CR1_AWDSGL | ADC_CR1_JAWDEN)
192#define ADC_ANALOGWATCHDOG_SINGLE_REGINJEC (ADC_CR1_AWDSGL | ADC_CR1_AWDEN | ADC_CR1_JAWDEN)
193#define ADC_ANALOGWATCHDOG_ALL_REG ADC_CR1_AWDEN
194#define ADC_ANALOGWATCHDOG_ALL_INJEC ADC_CR1_JAWDEN
195#define ADC_ANALOGWATCHDOG_ALL_REGINJEC (ADC_CR1_AWDEN | ADC_CR1_JAWDEN)
196
197/*
198 * ADCアナログウォッチドック割込みモード設定
199 */
200#define ADC_ANALOGWATCHDOG_ITMODE_DISABLE 0x00000000
201#define ADC_ANALOGWATCHDOG_ITMODE_ENABLE ADC_CR1_AWDIE
202
203/*
204 * ADCハードウェア設定構造体
205 */
206typedef struct _ADC_PortControlBlock{
207 uint32_t base;
208 uint32_t adcclockbase;
209 uint32_t adcclockbit;
210 uint32_t dmaclockbase;
211 uint32_t dmaclockbit;
212 uint32_t dmarxbase;
213 uint32_t dmarxchannel;
214} ADC_PortControlBlock;
215
216/*
217 * ADCの初期化構造体
218 */
219typedef struct
220{
221 uint32_t ClockPrescaler; /* ADCクロックプリスケーラ値(各ADCにて共通値) */
222 uint32_t Resolution; /* ADCのリゾリューション */
223 uint32_t DataAlign; /* ADC結果データアライン設定 */
224 uint32_t ScanConvMode; /* ADCスキャンコンバージョンモード */
225 uint32_t EOCSelection; /* ADC EOC設定 */
226 uint32_t ContinuousConvMode; /* ADC継続モード */
227 uint32_t DMAContinuousRequests; /* ADC-DMAモード */
228 uint32_t NumConversion; /* ADCコンバージョン数 */
229 uint32_t DiscontinuousConvMode; /* ADC非継続モード */
230 uint32_t NumDiscConversion; /* ADC非継続変換数 */
231 uint32_t ExternalTrigConv; /* ADC外部トリガ設定 */
232 uint32_t ExternalTrigConvEdge; /* ADC外部トリガエッジ設定 */
233}ADC_Init_t;
234
235/*
236 * ADCハンドラ構造体
237 */
238typedef struct __ADC_Handle_t ADC_Handle_t;
239struct __ADC_Handle_t
240{
241 uint32_t base; /* ADCベースアドレス */
242 ADC_Init_t Init; /* ADC初期化データ */
243 volatile uint32_t NumCurrentConversionRank; /* ADC現在のコンバージョンランク値 */
244 DMA_Handle_t *hdmarx; /* ADC用DMAハンドラへのポインタ */
245 void (*xfercallback)(ADC_Handle_t * hadc); /* ADC 転送完了コールバック */
246 void (*xferhalfcallback)(ADC_Handle_t * hadc); /* ADC 半分転送コールバック */
247 void (*outofwincallback)(ADC_Handle_t * hadc); /* ADC アナログウォッチドックコールバック */
248 void (*errorcallback)(ADC_Handle_t * hadc); /* ADC エラーコールバック */
249 volatile uint32_t status; /* ADCステータス */
250 volatile uint32_t ErrorCode; /* ADCエラー値 */
251};
252
253/*
254 * チャンネル設定構造体
255 */
256typedef struct
257{
258 uint32_t Channel; /* ADCチャンネル番号 */
259 uint32_t Rank; /* ADCランク番号(1-16) */
260 uint32_t SamplingTime; /* ADCサンプリング時間 */
261 uint32_t GpioBase; /* ADC-GPIOベースアドレス */
262 uint32_t GpioPin; /* ADC-GPIOピン番号 */
263}ADC_ChannelConf_t;
264
265/*
266 * ADCアナログウォッチドック設定構造体
267 */
268typedef struct
269{
270 uint32_t WatchdogMode; /* ADCアナログウォッチドッグモード */
271 uint32_t HighThreshold; /* ADCスレッシュホールド上限値 */
272 uint32_t LowThreshold; /* ADCスレッシュホールド下限値 */
273 uint32_t Channel; /* ADC対応チャネル番号 */
274 uint32_t ITMode; /* ADCアナログウォッチドック割込み設定 */
275}ADC_AnalogWDGConf_t;
276
277/*
278 * ADCのステータス定義
279 */
280#define ADC_STATUS_RESET 0x00 /* ADC 未使用状態 */
281#define ADC_STATUS_READY 0x01 /* ADC レディ状態 */
282#define ADC_STATUS_BUSY 0x02 /* ADC ビジィ状態 */
283#define ADC_STATUS_EOC 0x10 /* ADC 終了状態 */
284#define ADC_STATUS_BUSY_EOC 0x12 /* ADC ビジィ終了発生状態 */
285#define ADC_STATUS_AWD 0x20 /* ADC アナログウォッチドック発生状態 */
286
287/*
288 * ADCエラー定義
289 */
290#define ADC_ERROR_NONE 0x00 /* No error */
291#define ADC_ERROR_OVR 0x01 /* OVR error */
292#define ADC_ERROR_DMA 0x02 /* DMA transfer error */
293
294
295extern ADC_Handle_t *adc_init(ID portid, ADC_Init_t *pini);
296extern ER adc_deinit(ADC_Handle_t *hadc);
297extern ER adc_start_int(ADC_Handle_t* hadc);
298extern ER adc_end_int(ADC_Handle_t* hadc);
299extern ER adc_start_dma(ADC_Handle_t* hadc, uint32_t* pdata, uint32_t length);
300extern ER adc_end_dma(ADC_Handle_t* hadc);
301extern ER adc_setupchannel(ADC_Handle_t* hadc, ADC_ChannelConf_t* sConfig);
302extern ER adc_setupwatchdog(ADC_Handle_t* hadc, ADC_AnalogWDGConf_t* AnalogWDGConfig);
303extern uint32_t adc_getvalue(ADC_Handle_t* hadc);
304
305extern void adc_handler(ADC_Handle_t* hadc);
306extern void adc_int_handler(void);
307
308#ifdef __cplusplus
309}
310#endif
311
312#endif /* _ADC_H_ */
313
Note: See TracBrowser for help on using the repository browser.