TM 4 C 123 GLaunchPadチュートリアル2_GPIO入出力

13268 ワード

TM 4 C 123 GLaunchPadチュートリアル2_GPIO入出力
前言
まず、TM 4 C 123 Gのデータマニュアルとライブラリ関数マニュアルの2つのドキュメントをお勧めします.次のリンクをクリックしてダウンロードできます.
​ Tiva™ TM4C123GH6PM Microcontroller DATA SHEET .pdf
​ TivaWare™ Peripheral Driver Library USER’S GUIDE .pdf
データマニュアルには各外付けの紹介とレジスタの紹介が含まれており,各外付けの構成と機能を理解することができ,ライブラリ関数マニュアルには各ライブラリ関数の紹介,入出力パラメータが含まれており,文中で述べた関数はマニュアルをめくって理解を深めることができる.
紹介する
TM 4 C 123 GのIOポートは、PA 0−PA 7、PB 0−PB 7など、8つのグループである.GPIO配置の場合はその方向(入力、出力、ハードウェア制御)、出力能力(2 MA、4 MA、6 MAなど)、IO口の種類(漏れ、プッシュプル、プルアップ、プルダウンなど)を配置できます.
コードと詳細
/**
 * main.c
 *    PF4,    ,LED PF1,     。
 */
/*     uint8_t    */
#include 
/*        */
#include 

/*           */
#include "inc/hw_memmap.h"
/*GPIO    */
#include "driverlib/gpio.h"
/*             */
#include "driverlib/sysctl.h"

int main(void)
{
    uint8_t uc_Flag = 1;
    /*   GPIOF */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

    /*   GPIOF     */
    while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF))
    {
    }

    /* PF1 IO         */
    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1);

    /* PF4 IO         */
    GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_4);
    /*        */
    GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);

    /* PF1   */
    GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);

    while(1)
    {
        /*   IO   ,   0,       */
        if(GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4) == 0)
        {
            /*       ,     */
            if(uc_Flag == 1)
            {
                GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);
                uc_Flag = 0;
            }
            else if(uc_Flag == 0)
            {
                GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0);
                uc_Flag = 1;
            }
        }
    }

    return 0;
}


以下、一部ずつ説明します.
/*     uint8_t    */
#include 
/*        */
#include 
/*           */
#include "inc/hw_memmap.h"

/*GPIO    */
#include "driverlib/gpio.h"
/*             */
#include "driverlib/sysctl.h"

この部分は含まなければならないヘッダファイルで、空行で2つの部分に分かれています.ここでツッコミを入れると、ライブラリ関数の全体の作成に上の3つのヘッダファイルが使われています.私はなぜこれらのファイルをライブラリ関数に直接含まないのかと思っています.ライブラリ関数をめくってみると、この3つのファイルはライブラリ関数に含まれていることがわかりました.cの中のはではありません.hには、ライブラリ関数を含む場合が含まれる.c,そのため,上位3つのヘッダファイルを書く必要があり,なぜこのように書くのか理解できない.
/*   GPIOF */
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

/*   GPIOF     */
while(!SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF))
{
}

ここでGPIOFのイネーブルであり、TM 4 C 123 Gの各周辺機器を使用する際には、まずイネーブルを行い、stdint.h関数を利用してイネーブルを行い、その後stdbool.hをゼロ以外の値に戻るまで繰り返し呼び出し、周辺機器の準備が完了する.
/* PF1 IO         */
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1);

/* PF4 IO         */
GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_4);
/*        */
GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);

ここでIOポートの構成部分ですが、IOポートのモード構成ライブラリ関数には入力、出力、漏れ出力の3つの関数が与えられています.
void GPIOPinTypeGPIOInput(uint32_t ui32Port, uint8_t ui8Pins);
void GPIOPinTypeGPIOOutput(uint32_t ui32Port, uint8_t ui8Pins);
void GPIOPinTypeGPIOOutputOD(uint32_t ui32Port, uint8_t ui8Pins);

この3つの関数の内部は実は同じ2つの関数を呼び出しています.
void GPIODirModeSet(uint32_t ui32Port, uint8_t ui8Pins, uint32_t ui32PinIO);
void GPIOPadConfigSet(uint32_t ui32Port, uint8_t ui8Pins, uint32_t ui32Strength, uint32_t ui32PadType);
inc/hw_memmap.hはIOポートを構成するための方向であり、3つのオプションパラメータ、入力、出力、ハードウェア制御があり、ハードウェア制御はTM 4 Cの各種周辺機器を使用する場合にこのように構成する必要があり、SysCtlPeripheralEnable()はIOポートの駆動能力とモードを構成するために使用される.
GPIOの配置を行うには2つの方式があり、1つ目はその3つの既成の関数で配置することであり、2つ目は以下の2つの関数を呼び出して配置することであり、1つ目は比較的簡単であるが、私たちがPF 4を配置するときは上引き入力モードに配置し、SysCtlPeripheralReady(SYSCTL_PERIPH_GPIOF)配置するときは浮空であるため、GPIODirModeSetを上引きモードに配置する必要がある.この場合は、GPIOPadConfigSetGPIOPinTypeGPIOInputを直接使用して構成することができます.
次に、入出力関数について説明します.
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_PIN_1);
GPIOPinRead(GPIO_PORTF_BASE, GPIO_PIN_4);

この2つの関数には、IOポート状態の部分について、IOポートがローレベルを書くときに入力パラメータが0であるのに対し、ローレベルを書くときに入力パラメータが現在のポートに依存し、現在はGPIOPadConfigSetであり、入力パラメータがGPIODirModeSetであり、GPIOPadConfigSetであり、入力パラメータがGPIO_PIN_1であり、使用するときは間違えず、IOポートから読み取るときと同様に、戻り値が0または現在のポートであることに注意すべき点がある.具体的な理由は、上記のデータマニュアルの10.2.1.2 Data Register Operationの項を参照してください.