// PB0,PB1 に接続したLEDを0.5秒ごとに反転する（ROM内蔵ドライバ使用）


//ROM内蔵のペリフェラルドライバを使うための各種ヘッダファイルをインクルード
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/rom.h"
#include "driverlib/pin_map.h"


//割り込み関数のプロトタイプ宣言
void SysTick_Handler(void);


//メイン関数
int main(void)
{
  //クロックの設定 外部水晶発振子16MHz入力で80MHz
  ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
  
  //ポートBへのクロック供給
  //この設定がないとポートレジスタにアクセスできません（例外処理が発生する）
  ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

 //方向レジスタの設定（1=出力）
  //第1引数=アドレス 第2引数=出力にしたい端子
  //デジタル端子イネーブルレジスタの設定もしています
  ROM_GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_1|GPIO_PIN_0);
  

 //データレジスタの1ビット目のみを1に設定（LEDはHアクティブ）
  //第1引数=アドレス 第2引数=操作したいビット（複数の場合はOR）、第3引数=書き込む値
  //関数内ではリードライトモディファイしてます
  ROM_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1|GPIO_PIN_0, 0x02);
 
    
  //SysTicの設定
  //1秒÷80000000=0.0000000125秒 0.0000000125×1000000=0.0125秒
  ROM_SysTickPeriodSet(1000000);

  //SysTicカウント開始
  ROM_SysTickEnable();
  
  //SysTicの割り込み許可
  ROM_SysTickIntEnable();

  //マイコンの割り込み許可
  ROM_IntMasterEnable();        // CPSIE Instruction

  


 while(1)
    {
      ;
    }
}

void SysTick_Handler(void) 
{
  static unsigned char ledData =0x02;
  
      //LEDデータを反転
      ledData = ~ledData;
    
      //ポートFの0ビットのみ反転データを書き込み
      ROM_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0, ledData);
}