728x90
반응형
User Button Initialization
GPIO 포트 1번의 pin 1번과, pin 4번을 입력 모드로 : PxDIR
- S1 버튼은 GPIO P1.1
- S2 버튼은 GPIO P1.4
- P1->DIR &= ~ ( 1<<1 | 1<<4 );
- 1번 자리와 4번 자리만 0으로, 나머지는 1로 된 이진수를 만들기
- ~ ( 1<<1 | 1<<4 ) => ~ ( 00010010 ) => 11101101
pullup resistor 켜기 : PxREN
- 1번 핀과 4번 핀만 1값을 주어 pull-up/pull-down 활성화하기
- 둘 중 하나 선택은 PxOUT에서
- P1->REN = (1<<4) | (1<<1);
- 0001 0010
OUT에서 pull-up 으로 선택하기 : PxOUT
- 주의!! out이라서 출력만 관여한다고 생각하겠지만,
- 입력 모드로 사용 시에는 out으로도 pullup 활성화를 지정
- P1OUT은 pull-up/ pull-down 둘 다 가능해서 특정 입력 모드를 꼭 선택해야 함
GPIO Input Register : PxIN
- 해당 핀에 넣을 HIGH/LOW 신호 지정
- P1.1에 HIGH 신호를 넣었는지 확인
- if ( (P1->IN & (1<<1)) == (1<<1) )
- P1.4에 HIGH 신호를 넣었는지 확인
- if ( (P1->IN & (1<<4)) == (1<<4) )
- 즉, 해당 자리에 1 값이 들어가 있는지 확인
MACRO 만들어서 편하게 사용하기
- 괄호 주의!
- S1 버튼이 눌렀는지 확인하는 매크로
- #define S1BUT (P1->IN & (1<<1)) == (0x00)
- S2 버튼이 눌렀는지 확인하는 매크로
- #define S2BUT (P1->IN & (1<<4)) == (0x00)
-
- // HIGH는 버튼을 누르지 않아 VCC가 그대로 입력으로 들어감
- // 그래서 0인 상태에 GND로 흘러가기에 누른 상태가 됨
예제 1
P1.1에 HIGH가 오면 P1.0 RED LED 끄기 P1.1에 LOW가 오면 P1.0 RED LED 켜기 <P1.1 == S1 버튼이므로, S1버튼이 눌리면 LED는 켜지고 S1버튼이 떠있으면 LED는 꺼짐 |
S1 버튼으로 P1.1 LED 조작 S2 버튼으로 P2.0 LED 조작하기 ( 코드 유출 방지 ) |
예제 2
- 초기에는 P2.{012}에 빨강만
- S2 버튼을 한 번 누르고 나면 RGB 반복
- S2 버튼을 누르고 있을 때 하얀색이 나오는 이유?
-
- 마이크로프로세서가 당신이 손보다 빠르기 때문
- 그래서 RGB 순서도 앞서나가서 가끔씩 틀림
-
State Machine for Button
계속 누르는 상태에서 하얀색이 나오는 것을 방지
polling loop에서 loop를 몇 번 돌았는지 통제할 수 없음
그래서 state 방법을 이용
- 초기 상태는 button release
- 버튼을 누르면 button down 상태로
- 이 때 다시 떼면 button up 상태로
- 이 때 button의 입력값을 넘김
- 그 상태로 release 해도 상태가 유지됨
- 그러다 버튼을 다시 누르면 button down 상태로
- 예제
- 초기 상태 : P1.0과 P2.{012}에 빨강
- Run-time state :
-
- S2 버튼을 눌렀다 떼면 P2.{012}가 RGB 순환
- S1 버튼을 눌렀다 떼면 P2.{012}가 BGR 순환
- P1.0은 계속 깜박임
( 코드 유출 방지 )
728x90
반응형
'CS > Embedded System' 카테고리의 다른 글
[실습] Interrupt & SysTick timer (0) | 2021.12.07 |
---|---|
SW Architecture - RR, Interupt, func-queue scheduling, RTOS (0) | 2021.12.07 |
I/O Devices - Polling & Pull-up resistor (0) | 2021.10.13 |
Header file에 정의된 macro와 데이터형 이용하기 (0) | 2021.10.13 |
[실습] Memory Map for P1.0 Red LED (0) | 2021.10.13 |