株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

Tiva C 使ってみた

Tiva C EK-TM4C123GXL(その7) ボード上のスイッチを使う

投稿日:2014年3月23日 更新日:

Tiva C EK-TM4C123GXLを使ってみるの7回目です。

前回の続きでGPIOの利用ですが、ボード上のスイッチを使ってみます。

以下のメーカのサイトを見ながらプログラムを作っていきます。
Getting Started with the TIVA™ C Series TM4C123G LaunchPad

更に、このサイトで下の方の、Workshop MaterialのThe workbookを見ながら作ります。
直接のPDFファイルへのリンクは、The workbook PDF です。

このPDFファイルのLab3のプログラムの改造版です。
プロジェクト一式はこちらからダウンロード出来ます。

スイッチの使い方での注意点は以下です。

ボード上のスイッチは、SW1がPF4ピン、SW2がPF0ピンに接続されているので、これらを入力に設定してON/OFFを判定すればいいのですが、ピンの中には、安全のためロックがかかっているピンがあります。PF0ピンもその一つで、28行目からそのロックを解除している処理があります。詳細は、上の文書の3-8ページあたりを参照して下さい。またスイッチは、プルアップに設定しないとON/OFFが判定出来ないようなので、その処理が、36行目にあります。スイッチの使い方は、上の文書の15-15ページにあります。詳細は、こちらを参照して下さい。

ソース全体は、以下です。
一応、毎回書こうと思いますが、TivaWare付属のサンプルプログラム等を見ていると、ROM_ で始まっている関数をよく見かけますが、ROM_ の方は、ROM内蔵版です。こちらを使うとプログラム全体の大きさが小さくなりますが、ここでは特にサイズを気にする程でもないので、普通にリンクして使う、ROM_ が付いていない通常版の関数を使います。

//C99 standardの型を使うため
#include <stdint.h>
#include <stdbool.h>

//ペリフェラルドライバを使うための include ファイル
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "inc/hw_gpio.h"

//pinデータ
uint8_t ui8PinData=0;

int main(void)
{
    //システムクロックの設定(これで結果的に40MHz)
    SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
  
    //ポートへのクロック供給(必須)
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    
    //LEDの出力への方向設定
    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
    
    //スイッチのロックの解除
    HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
    HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0x01;
    HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0;
    
    //スイッチの入力への設定
    GPIOPinTypeGPIOInput(GPIO_PORTF_BASE, GPIO_PIN_4|GPIO_PIN_0);
    
    //(weak)プルアップの設定
    GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_4|GPIO_PIN_0, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);

    //メインループ
    while(1)
    {
        //両方のSWが押されている場合
        if( GPIOPinRead(GPIO_PORTF_BASE,GPIO_PIN_0)==0x00 && GPIOPinRead(GPIO_PORTF_BASE,GPIO_PIN_4)==0x00)
        {
            ui8PinData=2; //赤点灯
        }
        //SW1が押されている場合
        else if(GPIOPinRead(GPIO_PORTF_BASE,GPIO_PIN_4)==0x00)
        {
            ui8PinData=4; //青点灯
        }
        //SW2が押されている場合
        else if(GPIOPinRead(GPIO_PORTF_BASE,GPIO_PIN_0)==0x00)
        {
            ui8PinData=8; //緑点灯
        }
        //どちらのSWも押されていない場合
        else
        {
            ui8PinData=0; //消灯
        }
        
        //LEDへ出力
        GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1| GPIO_PIN_2| GPIO_PIN_3, ui8PinData);
        SysCtlDelay(2000000);
    }    
}

tivac

上のソースのコメントにありますが、SW1(画像左下のスイッチ)が押されている間は、青が点灯して、SW2(画像右下のスイッチ)が押されている間は、緑が点灯します。両方押されている間は、赤が点灯します。

今回は、ここまでです。次回は、タイマと割り込みについてです。

AdSense

AdSense

-Tiva C, 使ってみた

執筆者:

関連記事

Tiva C EK-TM4C123GXL(その1)起動確認まで

Tiva C EK-TM4C123GXLというマイコン評価ボードを使ってみました。 この評価ボードは、テキサス・インスツルメンツ製の、ARM Cortex-m4 プロセッサの低コスト評価ボードです。 …

3Dプリンターを使ってみた(その1)今までやったこと

3Dプリンターとは3Dデータを元にして樹脂類や石膏等の材質から3Dの形状を出力する機械です。代表的な造形方法に熱溶解積層法というのがあり、熱に溶ける樹脂を層にして重ねていく方法で立体を作り上げていきま …

3Dプリンターを使ってみた(その3)Autodesk 123D Creatureで骨格作り

3Dプリンターを使ってみたの3回目です。前回は、Autodesk 123D Creature(ここからは、123D Creatureと書きます。)でモデルを作る際の大きな流れを書きました。今回は骨格と …

Raspberry Piをモニターとキーボードなしで導入する(その3)コンソールを使う

(※2021/05/02追記 現時点で最新版のRaspberry PI OSでモニターとキーボードなしで導入する手順を書きました。ぜひこちらを見て下さい。) Raspberry Piをモニターとキーボ …

Raspberry Piをモニターとキーボードなしで導入する(その2)初期設定とリモートデスクトップ

(※2021/05/02追記 現時点で最新版のRaspberry PI OSでモニターとキーボードなしで導入する手順を書きました。ぜひこちらを見て下さい。) Raspberry Piをモニターとキーボ …