Exercise 03_두 LED 동시에 깜빡이기
< Exercise 03 >
> Exercise objective
P1.0 LED 는 빨간색 LED 가 켜졌다가 꺼지면서 깜빡이도록 설계한다. P2.0 LED 는 빨간색 , 초록색, 파란색 LED 가 차례대로 켜졌다가 꺼지면서 깜빡이도록 설계한다. 즉, P1.0 에서는 빨간색 , P2.0 에서는 빨간색 , 초록색, 파란색의 차례로 두 LED가 동시에 깜빡이도록 설계하는 것이 이 프로젝트의 목표이다.
> 코드
#include "msp.h"
void main(void)
{ // 4개의 포인터 변수로 GPIO 포트 p1, p2의 dir, out 레지스터 주소를 선언
volatile unsigned char *gpio_p1dir, *gpio_p1out, *gpio_p2dir, *gpio_p2out;
int i;
// GPIO 포트 p1의 dir, out 레지스터 주소를 설정
*gpio_p1dir = (unsigned char *)(0x40004C04);
*gpio_p1out = (unsigned char *)(0x40004C02);
*gpio_p1dir = 0x01; // Red LED dir 설정
// GPIO 포트 p2의 dir, out 레지스터 주소를 설정
*gpio_p2dir = (unsigned char *)(0x40004C05)
*gpio_p2out = (unsigned char *)(0x40004C03)
while(1){
*gpio_p2dir = 0x01; // Red LED dir 설정
*gpio_p1out = 0x01; // Red LED on
*gpio_p2out = 0x01; // Red LED on
for(i=0; i<100000; i++);
*gpio_p1out = 0x00; // LED off
*gpio_p2out = 0x00; // LED off
for(i=0; i<100000; i++);
*gpio_p2dir = 0x02; // Green LED dir 설정
*gpio_p1out = 0x01; // Red LED on
*gpio_p2out = 0x02; // Green LED on
for(i=0; i<100000; i++);
*gpio_p1out = 0x00; // LED off
*gpio_p2out = 0x00; // LED off
for(i=0; i<100000; i++);
*gpio_p2dir = 0x04; // Blue LED dir 설정
*gpio_p1out = 0x01; // Red LED on
*gpio_p2out = 0x04; // Blue LED on
for(i=0; i<100000; i++);
*gpio_p1out = 0x00; // LED off
*gpio_p2out = 0x00; // LED off
for(i=0; i<100000; i++);
}
}
*volatile 키워드
: 컴파일러에게 해당 변수의 값을 최적화하지 않도록 지시한다.
GPIO 핀은 하드웨어와 직접 상호 작용하므로 값이 언제든지 변경될 수 있으므로 volatile 키워드가 필요하다.
자료는 이화여자대학교 윤명국 교수님의 임베디드시스템및실험 강의에서 가져온 것입니다.
'Study > 임베디드시스템및실험' 카테고리의 다른 글
[Exercise 04] 색깔 순서대로 LED 켜기 (1) | 2023.10.17 |
---|---|
[Lecture 05] Data Type (1) | 2023.10.17 |
[Lecture 04] LED (1) | 2023.10.16 |
[Exercise 02] Red LED 점차 빠르게 깜빡이기 (1) | 2023.10.15 |
[Lecture 03] Cortex-m, ARM (0) | 2023.10.15 |