ファンクション・ジェネレータ.出力信号:正弦波,矩形波,矩形波 (5倍波まで).ノイズの付加が可能.

Dependencies:   mbed SerialTxRxIntr Random

MyTicker7.hpp

Committer:
MikamiUitOpen
Date:
2019-01-07
Revision:
7:5d1c170065d8
Parent:
0:d11ff22a164f

File content as of revision 7:5d1c170065d8:

//----------------------------------------------------------------------
//  TIM7 の Update event (UEV) 割込みを使って,Ticker と同じような機能の
//  ほかに,割込みの時間間隔を設定するメンバ関数を追加した行うクラス
//
//  動作を確認したボード: NUCLEO-F446RE, DISCO-F746
//
//    mbed 公式ライブラリの Ticker クラスは,割込みの時間間隔を変更する場合は,
//  メンバ関数 attach() を呼び出す必要がある.しかし,attach() を呼び出すと,
//  割込みの時間間隔設定以外の処理も行われるため,アプリケーションによっては
//  割込み時間間隔が変更される際に,動作が不自然になる場合がある.
//    この MyTicker7 クラスは,TIM7 の ARR 設定の際に,ARR バッファを使う
//  ように設定し,UEV 発生までは ARR の値を書き換えないようにした.
//
//  2018/06/24, Copyright (c) 2018 MIKAMI, Naoki
//----------------------------------------------------------------------

#ifndef MYTICKER14_F446_746_HPP
#define MYTICKER14_F446_746_HPP

#include "mbed.h"

#ifndef TIM7
#error "This MCU has No TIM7."
#endif

namespace Mikami
{
    class MyTicker7
    {
    public:
        MyTicker7();
        // 割込みサービスルーチンの割り当てと割り込み周期(μs 単位)の設定
        void Attach_us(void (*Func)(), uint16_t time);
        // 割込みサービスルーチンの割り当てと割り込み周期(ms 単位)の設定
        void Attach_ms(void (*Func)(), uint16_t time);
        // 割込み停止
        void Disable() { tim_->DIER &= ~TIM_DIER_UIE; }
        // 割込み開始
        void Enable() { tim_->DIER |= TIM_DIER_UIE; }
        // 割り込み周期(μs 単位)の設定
        void SetPeriod_us(uint16_t time);
        // 割り込み周期(ms 単位)の設定
        void SetPeriod_ms(uint16_t time);

    private:
        // 割り込みサービス・ルーチンの中で実行される関数のポインタ
        static void (*fp)();
        // タイマに対応する構造体のポインタ
        static TIM_TypeDef* const tim_;
        // 割り込みサービス・ルーチン
        static void Isr();
        // タイマ設定の共通の処理
        void SetCommon(void (*Func)(), uint16_t time);
        
        uint32_t maxClock_;     // TIM7 を駆動するクロック周波数
        
        // 割り込みサービス・ルーチンの準備と割り込み許可
        void SetIsr(void (*Func)(), uint16_t time);
    };
}
#endif  // MYTICKER14_F446_746_HPP