Arduinoで遊ぶページ

Arduinoで遊んだ結果を残すページです。
garretlab
PIO_SetPeripheral()

PIO_SetPeripheral()

概要

PIO(Parallel Input/Output Controller)がペリフェラルによって制御されるように設定を行います。

以下のレジスタを設定します。

レジスタ シンボル 意味(1を書き込んだときの動作)
Interrupt Disable レジスタ PIO_IDR 入力変化による割り込みを無効にする。
Peripheral AB Select レジスタ PIO_ABSR 0を書き込む:ペリフェラルAの機能を有効にする。
1を書き込む:ペリフェラルBの機能を有効にする。
PIO Disable レジスタ PIO_PDR PIOを無効にする。

ソースコード

PIO_SetPeripheral()は、hardware/arduino/sam/system/libsam/source/pio.c に定義されています。以下に全ソースコードを示します。ソースコードのライセンスはこちら

extern void PIO_SetPeripheral( Pio* pPio, EPioType dwType, uint32_t dwMask )
{
    uint32_t dwSR ;

    /* Disable interrupts on the pin(s) */
    pPio->PIO_IDR = dwMask ;

    switch ( dwType )
    {
        case PIO_PERIPH_A :
            dwSR = pPio->PIO_ABSR ;
            pPio->PIO_ABSR &= (~dwMask & dwSR) ;
        break ;

        case PIO_PERIPH_B :
            dwSR = pPio->PIO_ABSR ;
            pPio->PIO_ABSR = (dwMask | dwSR) ;
        break ;

        // other types are invalid in this function
        case PIO_INPUT :
        case PIO_OUTPUT_0 :
        case PIO_OUTPUT_1 :
        case PIO_NOT_A_PIN :
        return ;
    }
extern void PIO_SetPeripheral( Pio* pPio, EPioType dwType, uint32_t dwMask )
{

引数は、ピンに対応したPIO(Parallel IO Controller)を示すPioへのポインタ型のpPio、ピンに対応するタイプを示すconst EPioType型のdwType、ピンに対応するマスク(コントローラのどのビットでそのピンが制御されるかを示します)を示すconst uint32_t型のdwMaskの3つです。

    uint32_t dwSR ;

    /* Disable interrupts on the pin(s) */
    pPio->PIO_IDR = dwMask ;

pPio->PIO_IDRは32ビットのレジスタで、ビットを1に設定すると設定したビットに対応するピンの入力変化による割り込みが禁止されます。

    switch ( dwType )
    {

dwTypeの値によって分岐します。

        case PIO_PERIPH_A :
            dwSR = pPio->PIO_ABSR ;
            pPio->PIO_ABSR &= (~dwMask & dwSR) ;
        break ;

dwTypeがPIO_PERIPH_Aのときは、対応するピンにペリフェラルAを割り当てます。pPio->PIO_ABSRを読み取ると、pPioがペリフェラルA・Bのどちらを選択しているかを取得することができます。0のときはペリフェラルAに、1のときはペリフェラルBを選択した状態です。dwMaskを反転させてdwSRと論理積をとると、PIO_ABSRの対応するビットが0になり、ペリフェラルAに設定することができます。

        case PIO_PERIPH_B :
            dwSR = pPio->PIO_ABSR ;
            pPio->PIO_ABSR = (dwMask | dwSR) ;
        break ;

dwTypeがPIO_PERIPH_Bのときは、対応するピンにペリフェラルBを割り当てます。pPio->PIO_ABSRを読み取ると、pPioがペリフェラルA・Bのどちらを選択しているかを取得することができます。0のときはペリフェラルAに、1のときはペリフェラルBを選択した状態です。dwMaskとdwSRとの論理和をとると、PIO_ABSRの対応するビットが1になり、ペリフェラルBに設定することができます。

        case PIO_INPUT :
        case PIO_OUTPUT_0 :
        case PIO_OUTPUT_1 :
        case PIO_NOT_A_PIN :
        return ;
    }

dwTypeがPIO_INPUT、PIO_OUTPUT_0、PIO_OUTPUT_1(を含む他の値)の場合は何もせずに関数を終了します。

バージョン

Arduino 1.5



メニューを表示するためにJavaScriptを有効にしてください。

Arduinoで遊ぶページ
Copyright © 2013 garretlab all rights reserved.
inserted by FC2 system