Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
/*
===============================================================================
Name : LPCOpenSample_LPC11u68.c
Author : Takeshi Ogawa (GSMCustomEffects)
Version :
Copyright : $(copyright)
Description : GPIOのテストとdelay関数の定義例を示したサンプルプログラムです。
===============================================================================
*/
//プロジェクトでNO_BOARD_LIB定義済みなのでクロックは内部クロックを採用する設定になっている。
#if defined (__USE_LPCOPEN)
#if defined(NO_BOARD_LIB)
#include "chip.h"
#include <stdio.h>
#else
#include "board.h"
#endif
#endif
#include <cr_section_macros.h>
/*DEBUGOUTでシリアル使用をする定義
DEBUGOUT(”sample”)こういう感じに使う
LPC_USART0を使用
baudrate:115200*/
#define DEBUG_ENABLE
#define DEBUG_UART LPC_USART0
volatile static uint32_t TimeTick = 0;
void delayms(uint32_t tick);
// TODO: insert other include files here
// TODO: insert other definitions and declarations here
/*Systickハンドラ記述エリア
ARM標準のシステムタイマー割り込み一定期間ごとに割り込みが入る
NVICより上の層で動作しているのでEnable記述が要らない特殊な割り込み*/
void SysTick_Handler(void){
TimeTick++;
//変数のクリア
}
int main(void) {
#if defined (__USE_LPCOPEN)
// Read clock settings and update SystemCoreClock variable
SystemCoreClockUpdate();
#if !defined(NO_BOARD_LIB)
// Set up and initialize all required blocks and
// functions related to the board hardware
Board_Init();
// Set the LED to the state of "On"
Board_LED_Set(0, true);
#endif
#endif
// TODO: insert code here
//独自シンボル定義エリア(defineとか)
#define TICKRATE_HZ1 (1000) /* 1000 ticks per second 1秒間に何回Sistick割り込み発生させるか決める部分*/
#define SWITCHPORT 0
#define SwitchPIN_1 16
#define LEDPORT 2
#define LEDPIN_1 16
#define LEDPIN_2 17
#define LEDPIN_3 18
//初期設定コード記述エリア(ピン定義とか)
SysTick_Config(SystemCoreClock / TICKRATE_HZ1);//Sistickの設定
Chip_GPIO_SetPinDIRInput(LPC_GPIO,0,SwitchPIN_1);//スイッチ設定
Chip_GPIO_SetPinDIROutput(LPC_GPIO,LEDPORT,LEDPIN_1);//LED設定
Chip_GPIO_SetPinDIROutput(LPC_GPIO,LEDPORT,LEDPIN_2);//LED設定
Chip_GPIO_SetPinDIROutput(LPC_GPIO,LEDPORT,LEDPIN_3);//LED設定
int LEDcount=0;
Chip_GPIO_SetPinState(LPC_GPIO,LEDPORT,LEDPIN_1,1);
Chip_GPIO_SetPinState(LPC_GPIO,LEDPORT,LEDPIN_2,1);
Chip_GPIO_SetPinState(LPC_GPIO,LEDPORT,LEDPIN_3,1);
//mainループ
while(1) {
delayms(70);//delayを入れることでチャタリングを簡易的に回避(非推奨)
if (Chip_GPIO_GetPinState(LPC_GPIO,0,SwitchPIN_1)== 0) {
LEDcount++;
if(LEDcount >=3){
LEDcount = 0;
}
}
if(LEDcount == 0){
Chip_GPIO_SetPinState(LPC_GPIO,LEDPORT,LEDPIN_1,0);
Chip_GPIO_SetPinState(LPC_GPIO,LEDPORT,LEDPIN_2,1);
Chip_GPIO_SetPinState(LPC_GPIO,LEDPORT,LEDPIN_3,1);
while(Chip_GPIO_GetPinState(LPC_GPIO,0,SwitchPIN_1)== 0){}
}
else if(LEDcount == 1){
Chip_GPIO_SetPinState(LPC_GPIO,LEDPORT,LEDPIN_1,1);
Chip_GPIO_SetPinState(LPC_GPIO,LEDPORT,LEDPIN_2,0);
Chip_GPIO_SetPinState(LPC_GPIO,LEDPORT,LEDPIN_3,1);
while(Chip_GPIO_GetPinState(LPC_GPIO,0,SwitchPIN_1)== 0){}
}
else if(LEDcount == 2){
Chip_GPIO_SetPinState(LPC_GPIO,LEDPORT,LEDPIN_1,1);
Chip_GPIO_SetPinState(LPC_GPIO,LEDPORT,LEDPIN_2,1);
Chip_GPIO_SetPinState(LPC_GPIO,LEDPORT,LEDPIN_3,0);
while(Chip_GPIO_GetPinState(LPC_GPIO,0,SwitchPIN_1)== 0){}
}
}
return 0 ;
}
void delayms(uint32_t tick)
{
uint32_t timetick=0;
timetick = TimeTick;
while ((TimeTick - timetick) < tick);
if(TimeTick>6000){TimeTick = 0;}
//TimeTick =0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.