/      English

mwf_periph_common - ペリフェラル共通

mwf_periph_common - ペリフェラル共通
ペリフェラル共通定義やピン操作の定義。

mwf_periph_common - ペリフェラル共通

include

#include "mwf_periph_common.hpp"

GPIO操作関数

struct pin 内に定義する static 関数(インライン関数)を呼び出します。

set_pin_as_input()

static void set_pin_as_input(uint8_t pin, uint32_t param = 0)

pinを入力状態に設定します。

  • paramは未使用です。

set_pin_as_output()

static void set_pin_as_output(uint8_t pin, uint32_t param = PORTOUT_INITSTATE_HIGH)

pinを出力状態に設定します。

  • paramPORTOUT_INITSTATE_HIGHを指定すると、本関数の呼び出し時にHIGH側に設定されます。

set_output()

 void set_output(uint8_t pin, uint8_t value)

pinの出力状態を変更します。valuePORT_HIGH(1)にするとHIGH、PORT_LOW(0)にするとLOWにします。

get_input()

 static uint8_t get_input(uint8_t pin)

入力状態にあるpinの状態を読み出します。戻り値はHIGHの場合はPORT_HIGH(1)、LOWの場合はPORT_LOW(0)です。

get_input_bm()

static uint32_t get_input_bm(uint32_t u32mask = 0x3FFFFF)

// 例
  uint32_t bm = get_input_bm((1ul << 0) | (1ul << 3));
  if (bm & (1ul << 3)) { ... } // PIO3 が HIGH の場合
  else { ... }                 // PIO3 が LOW の場合

全ピンの入力状態をビットマップで読み出します。

  • PIOnの値は (1UL « n) のビットに対応します。
  • 入力状態にないピンの値は未定義です。

例ではピンのビットマップ(u32mask)を指定し、入力ピンの状態をまとめて取得します。ビットマップは、例えば PIO0 と PIO3 の値が必要な場合は (1ul << 0) | (1ul << 3)と指定します。

戻り値も同様に入力状態のビットマップです。HIGHレベルが1、LOWレベルが0で表現します。例えば PIO3 が HIGH の場合は LSB から数えて4番目のビットが 1 になります。

set_output_bm()

static void set_output_bm(uint32_t u32mask, uint8_t value)

// 例
  set_output_bm((1ul << 0) | (1ul << 3), 0); // PIO0, 3 を LOW レベルに設定する

u32maskで指定したビットマップに対応するピンについて出力状態を変更する。

  • PIOnの値は (1UL « n) のビットに対応します。
  • valuePORT_HIGH(1)にするとHIGH、PORT_LOW(0)にするとLOWにします。

例ではピンのビットマップ(u32mask)を指定し、出力の状態をまとめて設定します。ビットマップは、例えば PIO0 と PIO3 を設定する場合は (1ul << 0) | (1ul << 3)と指定します。また出力状態value1がHIGHレベル、0がLOWレベルです。

PIN操作関数

struct pin 内に定義する static 関数(インライン関数)を呼び出します。

static void __conf_digital()

static void __conf_digital(uint8_t pin, uint8_t func)

指定したピンpinのPIOレジスタに対してIOCON_PIO_FUNC(func)を設定します。

			IOCON->PIO[0][pin] =
							( 0
							| IOCON_PIO_FUNC(func) // SETFUNC (e.g. PWM is 0x04)
							| IOCON_PIO_MODE(0x00u) // 0x00:pullup
							| IOCON_PIO_DIGIMODE(0x01u)
							| IOCON_PIO_INPFILT_OFF
							);

static void conf_default()

static void conf_default(uint8_t pin)

ピンをデフォルト定義に戻します。TWENETmcu ライブラリ中の board/pin_mux.c で設定した値にします。

static void __conf_gpio_input()

static void __conf_gpio_input(uint8_t pin)

内部的に使用します。ピンpinを GPIO の入力とします。

※ ユーザプログラムでは set_pin_as_input() を使用します。

static void __conf_gpio_output()

static void __conf_gpio_output(uint8_t pin, bool b_init_high = true)

内部的に使用します。ピンpinをGPIOの出力とします。b_init_hightrueにすると規定出力がHIGH(Vcc)レベル、falseならLOW(GND)レベルです。

※ ユーザプログラムでは set_pin_as_output()を使用します。

static void set_pullup()

static void set_pullup(uint8_t pin, uint8_t mode)

指定したピンpinのPIOレジスタに対してIOCON_PIO_MODE(mode)を設定します。プルアップの制御のビットです。

static void conf_pwmout()

static void conf_pwmout(uint8_t pin, bool b_enable)

__conf_digital() を用い、指定したピンpinのPIOレジスタに対してIOCON_PIO_FUNC(0x04)を設定します。通常はPWM出力に設定されます。

static void conf_adc_input()

static void conf_adc_input(uint8_t pin)

PIO14..19に対してADCに設定するため以下の指定を行います。

IOCON->PIO[0][pin] =
( 0
| IOCON_PIO_FUNC(0x00u) // FUNC_ALT0
| IOCON_PIO_MODE(0x00u) // 0x00:pullup
| IOCON_PIO_DIGIMODE(0x00u) // ANALOGUE
| IOCON_PIO_INPFILT_OFF
);

static void conf_sclN_pioM()

		static void conf_scl0_pio10() {
		    __conf_digital(10, 0x05);
		}

		static void conf_sda0_pio11() {
		    __conf_digital(11, 0x05);
		}

		static void conf_scl0_pio15() {
		    __conf_digital(15, 0x05);
		}

		static void conf_sda0_pio16() {
		    __conf_digital(11, 0x05);
		}

		static void conf_scl1_pio06() {
		    __conf_digital(06, 0x05);
		}

		static void conf_sda1_pio07() {
		    __conf_digital(07, 0x05);
		}

		static void conf_scl1_pio12() {
		    __conf_digital(12, 0x05);
		}

		static void conf_sda1_pio13() {
		    __conf_digital(13, 0x05);
		}

ピンをI2Cで利用するための設定関数です。

static void conf_uart1(uint8_t tx, uint8_t rx)

static void conf_uart1(uint8_t tx, uint8_t rx)

UART1のTXDピンをtxに、RXDピンをrxに指定します。

  • 本関数では、TXD または RDX の一方のみを設定することはできません。

その他

struct ts_retention_context

struct ts_retention_context {
    uint32_t u32_bm_io;
    uint32_t u32_bm_set;
    void save();
    void restore();
};
static ts_retention_context s_retention_context;

static void retention_on_sleep()
static void retention_on_wake()

内部的に利用します。GPIO出力状態のスリープ時の保持に関する処理と必要なデータを管理します。

static bool __b_check_swdbg_port(uint8_t pin)

static bool __b_check_swdbg_port(uint8_t pin)

内部的に利用します。pinがデバッグ時に、デバッガで使用されるかどうかを判定します。

スリープ時のふるまい

  • GPIO の出力状態を set_pin_as_output() による手続きを行ったピンについて、スリープ時にも出力状態が維持されます。ただし retention_on_sleep() 並びに retention_on_wake()が適切に呼び出される必要があります。TWENETでは、TWENETmcu,TWENETcmptライブラリ内で処理されるスリープ前処理、スリープ復帰処理でこれらが呼び出されています。