CQエレクトロニクス・セミナ「実習・マイコンを動かしながら学ぶディジタル・フィルタ」で使うプログラムを,入力として STM32F746 の内蔵 ADC を使うように変更したもの. http://seminar.cqpub.co.jp/ccm/ES18-0020
Dependencies: mbed Array_Matrix BSP_DISCO_F746NG LCD_DISCO_F746NG TS_DISCO_F746NG
F764_Adc/MyFunctions.cpp@2:dd48e1e59daa, 2018-03-12 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Mon Mar 12 05:10:31 2018 +0000
- Revision:
- 2:dd48e1e59daa
- Parent:
- 0:ab7a35d87173
3
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:ab7a35d87173 | 1 | //----------------------------------------------------- |
MikamiUitOpen | 0:ab7a35d87173 | 2 | // 内蔵 ADC を使うための関数等 |
MikamiUitOpen | 0:ab7a35d87173 | 3 | // |
MikamiUitOpen | 0:ab7a35d87173 | 4 | // 2017/10/07, Copyright (c) 2017 MIKAMI, Naoki |
MikamiUitOpen | 0:ab7a35d87173 | 5 | //----------------------------------------------------- |
MikamiUitOpen | 0:ab7a35d87173 | 6 | |
MikamiUitOpen | 0:ab7a35d87173 | 7 | #include "MyFunctions.hpp" |
MikamiUitOpen | 0:ab7a35d87173 | 8 | using namespace Mikami; |
MikamiUitOpen | 0:ab7a35d87173 | 9 | |
MikamiUitOpen | 0:ab7a35d87173 | 10 | extern AdcDual_Intr adc_; // 内蔵 ADC 用(割り込みを使用) |
MikamiUitOpen | 0:ab7a35d87173 | 11 | |
MikamiUitOpen | 0:ab7a35d87173 | 12 | Array<int16_t> buffer1L_, buffer1R_, buffer2L_, buffer2R_; |
MikamiUitOpen | 0:ab7a35d87173 | 13 | |
MikamiUitOpen | 0:ab7a35d87173 | 14 | int32_t nData_; // バッファサイズ |
MikamiUitOpen | 0:ab7a35d87173 | 15 | int16_t *inBufL_, *inBufR_; // 現在使用中の入力バッファに対応 |
MikamiUitOpen | 0:ab7a35d87173 | 16 | int16_t *outBufL_, *outBufR_; // 現在使用中の出力バッファに対応 |
MikamiUitOpen | 0:ab7a35d87173 | 17 | int countIn_, countOut_; // 入力データ数のカウント用 |
MikamiUitOpen | 0:ab7a35d87173 | 18 | int indexIn_, indexOut_; // バッファの切り替え用 |
MikamiUitOpen | 0:ab7a35d87173 | 19 | int16_t *pingPongL_[2], *pingPongR_[2]; // 2組のバッファに対応するポインタを格納 |
MikamiUitOpen | 0:ab7a35d87173 | 20 | |
MikamiUitOpen | 0:ab7a35d87173 | 21 | __IO bool fullIn_; // 入力バッファが満杯のとき true |
MikamiUitOpen | 0:ab7a35d87173 | 22 | |
MikamiUitOpen | 0:ab7a35d87173 | 23 | // バッファの切り替えで使うインデックスの変更 |
MikamiUitOpen | 0:ab7a35d87173 | 24 | void SwitchBuf(int &index) { index = ++index & 0x01; } |
MikamiUitOpen | 0:ab7a35d87173 | 25 | |
MikamiUitOpen | 0:ab7a35d87173 | 26 | // ADC のデータをブロック単位で扱うための初期化 |
MikamiUitOpen | 0:ab7a35d87173 | 27 | void AdcInitialize(int32_t size) |
MikamiUitOpen | 0:ab7a35d87173 | 28 | { |
MikamiUitOpen | 0:ab7a35d87173 | 29 | nData_ = size; |
MikamiUitOpen | 0:ab7a35d87173 | 30 | |
MikamiUitOpen | 0:ab7a35d87173 | 31 | buffer1L_.SetSize(nData_); |
MikamiUitOpen | 0:ab7a35d87173 | 32 | buffer1R_.SetSize(nData_); |
MikamiUitOpen | 0:ab7a35d87173 | 33 | buffer2L_.SetSize(nData_); |
MikamiUitOpen | 0:ab7a35d87173 | 34 | buffer2R_.SetSize(nData_); |
MikamiUitOpen | 0:ab7a35d87173 | 35 | |
MikamiUitOpen | 0:ab7a35d87173 | 36 | countIn_ = countOut_ = 0; |
MikamiUitOpen | 0:ab7a35d87173 | 37 | indexIn_ = indexOut_ = 0; // バッファの切り替え用 |
MikamiUitOpen | 0:ab7a35d87173 | 38 | |
MikamiUitOpen | 0:ab7a35d87173 | 39 | pingPongL_[0] = buffer1L_; |
MikamiUitOpen | 0:ab7a35d87173 | 40 | pingPongL_[1] = buffer2L_; |
MikamiUitOpen | 0:ab7a35d87173 | 41 | pingPongR_[0] = buffer1R_; |
MikamiUitOpen | 0:ab7a35d87173 | 42 | pingPongR_[1] = buffer2R_; |
MikamiUitOpen | 0:ab7a35d87173 | 43 | |
MikamiUitOpen | 0:ab7a35d87173 | 44 | inBufL_ = pingPongL_[indexIn_]; |
MikamiUitOpen | 0:ab7a35d87173 | 45 | inBufR_ = pingPongR_[indexIn_]; |
MikamiUitOpen | 0:ab7a35d87173 | 46 | outBufL_ = pingPongL_[indexOut_]; |
MikamiUitOpen | 0:ab7a35d87173 | 47 | outBufR_ = pingPongR_[indexOut_]; |
MikamiUitOpen | 0:ab7a35d87173 | 48 | |
MikamiUitOpen | 0:ab7a35d87173 | 49 | fullIn_ = false; |
MikamiUitOpen | 0:ab7a35d87173 | 50 | adc_.SetIntrVec(&AdcIsr); // ADC の割り込みベクタに ISR を割り当て |
MikamiUitOpen | 0:ab7a35d87173 | 51 | adc_.EnableAdcIntr(); // ADC 終了割込みを有効にする |
MikamiUitOpen | 0:ab7a35d87173 | 52 | } |
MikamiUitOpen | 0:ab7a35d87173 | 53 | |
MikamiUitOpen | 0:ab7a35d87173 | 54 | // ADC 終了割り込みに対する ISR (割り込みサービスルーチン) |
MikamiUitOpen | 0:ab7a35d87173 | 55 | void AdcIsr() |
MikamiUitOpen | 0:ab7a35d87173 | 56 | { |
MikamiUitOpen | 0:ab7a35d87173 | 57 | uint16_t sn1, sn2; |
MikamiUitOpen | 0:ab7a35d87173 | 58 | |
MikamiUitOpen | 0:ab7a35d87173 | 59 | adc_.Read(sn1, sn2); |
MikamiUitOpen | 0:ab7a35d87173 | 60 | inBufL_[countIn_] = sn1 - 2048; |
MikamiUitOpen | 0:ab7a35d87173 | 61 | inBufR_[countIn_++] = sn2 - 2048; |
MikamiUitOpen | 0:ab7a35d87173 | 62 | |
MikamiUitOpen | 0:ab7a35d87173 | 63 | if (countIn_ == nData_) |
MikamiUitOpen | 0:ab7a35d87173 | 64 | { |
MikamiUitOpen | 0:ab7a35d87173 | 65 | fullIn_ = true; |
MikamiUitOpen | 0:ab7a35d87173 | 66 | countIn_ = 0; // 入力バッファの先頭を指す |
MikamiUitOpen | 0:ab7a35d87173 | 67 | SwitchBuf(indexIn_); // 入力バッファのインデックスを切り替える |
MikamiUitOpen | 0:ab7a35d87173 | 68 | inBufL_ = pingPongL_[indexIn_]; |
MikamiUitOpen | 0:ab7a35d87173 | 69 | inBufR_ = pingPongR_[indexIn_]; |
MikamiUitOpen | 0:ab7a35d87173 | 70 | } |
MikamiUitOpen | 0:ab7a35d87173 | 71 | } |
MikamiUitOpen | 0:ab7a35d87173 | 72 | |
MikamiUitOpen | 0:ab7a35d87173 | 73 | // 入力バッファが満杯かどうか調べる,満杯であれば true を返す |
MikamiUitOpen | 0:ab7a35d87173 | 74 | bool IsAdcBufferFull() |
MikamiUitOpen | 0:ab7a35d87173 | 75 | { |
MikamiUitOpen | 0:ab7a35d87173 | 76 | if (!fullIn_) return false; |
MikamiUitOpen | 0:ab7a35d87173 | 77 | |
MikamiUitOpen | 0:ab7a35d87173 | 78 | fullIn_ = false; |
MikamiUitOpen | 0:ab7a35d87173 | 79 | return true; |
MikamiUitOpen | 0:ab7a35d87173 | 80 | } |
MikamiUitOpen | 0:ab7a35d87173 | 81 | |
MikamiUitOpen | 0:ab7a35d87173 | 82 | // AD 変換されたデータを取り出す |
MikamiUitOpen | 0:ab7a35d87173 | 83 | void GetSignal(int16_t &sn1, int16_t &sn2) |
MikamiUitOpen | 0:ab7a35d87173 | 84 | { |
MikamiUitOpen | 0:ab7a35d87173 | 85 | sn1 = outBufL_[countOut_]; |
MikamiUitOpen | 0:ab7a35d87173 | 86 | sn2 = outBufR_[countOut_++]; |
MikamiUitOpen | 0:ab7a35d87173 | 87 | |
MikamiUitOpen | 0:ab7a35d87173 | 88 | if (countOut_ == nData_) |
MikamiUitOpen | 0:ab7a35d87173 | 89 | { |
MikamiUitOpen | 0:ab7a35d87173 | 90 | countOut_ = 0; |
MikamiUitOpen | 0:ab7a35d87173 | 91 | SwitchBuf(indexOut_); |
MikamiUitOpen | 0:ab7a35d87173 | 92 | outBufL_ = pingPongL_[indexOut_]; |
MikamiUitOpen | 0:ab7a35d87173 | 93 | outBufR_ = pingPongR_[indexOut_]; |
MikamiUitOpen | 0:ab7a35d87173 | 94 | } |
MikamiUitOpen | 0:ab7a35d87173 | 95 | } |