arm 실습 (5) 썸네일형 리스트형 6. 임베디드 실습 : 버튼 동작(Polling, Interrupt) 버튼을 동작시켜 보자. 두 가지 방식이 있다. 첫 번째 방식은 폴링(Polling)이고, 나머지 하나는 인터럽트(Interrupt)이다. 폴링 방식은 장치, 프로그램 등에 대해 충돌 회피, 동기화 처리 등을 목적으로 다른 장치 또는 프로그램의 상태를 주기적으로 검사하여 일정 조건이 만족하는 지를 판단하는 것이다. 실습할 것을 예로 들면, 버튼이 눌렸는 지를 판단하기 위해, main loop에 상에 주기적으로 버튼이 눌렸는 지 판단하는 함수를 추가하는 것이다. 인터럽트 방식은 폴링 방식과는 다르다. 인터럽트 방식은 프로그램이 실행되고 있는 중에, 하드웨어적인 오류, 사용자 정의한 상황 등 예외상황이 발생하여 처리가 필요할 때, MCU가 이를 먼저 치리하도록 하는 것이다. 실습의 예로 들면 버튼이 눌릴 경우.. 5. 임베디드 실습 : GPIO + Systick 이제 드디어 LED를 켜볼 것이다. 간단한 동작을 위해 참 돌아돌아 온 것 같다. 이번 글에서는 보드에 장착되어 있는 LED를 주기적으로 키고 끌 예정이다. GPIO(General Purpose Input Output)는 입력이나 출력을 포함한 동작이 런타임 시에 사용자에 의해 제어될 수 있는, 집적 회로나 전기회로 기판의 디지털 신호 핀이다. GPIO를 조작하기 위해서는 다음과 같으 과정을 거쳐야 한다. 조작할 pin을 포함한 포트에 클럭소스를 배분한다. 해당 pin 입출력을 설정한다. 레지스터를 조작하여 디지털 출력을 조정한다. 사용하는 레지스터는 다음과 같다. 각각의 레지스터에 대해서 간단하게 설명해 보겠다. APB2ENR 레지스터는 입출력 장치에 클럭 소스를 배분할 지 안할 지를 결정한다. CPI.. 4. 임베디드 실습 : Main System Clock Source 클럭(Clock)을 설정해야 한다. 기기가 제대로 동작하기 위해서는 시간의 기준이 되는 신호가 필요하다. 이 신호가 바로 클럭이다. 클럭의 속도가 빨라지면 내부에서 명령어를 처리하는 속도가 빨라진다. 게임에 관심이 있는 사람이라면 오버클럭(Over clock)이라는 용어를 들어본 적이 있을 것이다. 기존의 안정성을 고려하여 설정된 클럭 수보다 더 높게 클럭을 설정하여 성능을 끌어올리는 것인데, 여기서의 클럭이 우리가 다룰 클럭과 같은 의미이다. 클럭을 높이면 왜 동작이 빨라지는 것인가? 앞서서 언급했던 것처럼 클럭은 MCU 동작의 기준이 된다. 예를 들어 0과 1의 값을 반복하는 클럭이 있다면, 특정 레지스터에서 다른 레지스터로 값을 넘길 때는 0에서 1로 클럭 값이 전환되어야 한다는 등 하드웨어적으로 .. 3. 임베디드 실습 : NVIC ~ 빈 main() 드디어 코드를 작성할 수 있게 되었다. 그러면 바로 main()에다가 원하는 프로그램을 넣으면 되는가? 그렇지 않다. 우선적으로 .data와 .bss 영역을 초기화 해주어야 한다. .data 섹션의 초기화는 FLASH 영역에 저장된 .data를 RAM으로 복사해주어야하고, .bss 영역은 C 규약에 따라서 정적 심보의 초깃값을 0으로 해주어야 한다. 앞서서 target.ld에서 entry point를 isr_reset()으로 설정했음으로 초기화 작업을 해당 함수에서 해준다. extern unsigned int _stored_data; extern unsigned int _start_data; extern unsigned int _end_data; extern unsigned int _start_bss; .. 2. 임베디드 실습 : ldscript 작성 컴파일한 오브젝트 파일들은 대부분 바로 실행할 수 있는 형태가 아니다. 오브젝트 파일들을 그룹 짓고, 심볼 간 의존성을 해결해야 하는데, 이러한 작업을 링킹(Linking)이라고 한다. 링커 스크립트는 타깃에서의 메모리 섹션의 서술을 담은 파일이다. 링커가 플래시의 올바른 위치에 심볼을 위치시키고, 코드가 참조할 수 있는 메모리 매핑 영역의 특수위치에 대해 소프트웨어 구성요소에 지시하기 위해 사전에 알고 있어야하는 정보이다. 스크립트는 C 코드와 상호작용할 수 있고, 스크립트에 의해 정의된 심볼을 내보낼 수 있다. 다음은 실습에 사용할 스크립트 파일의 내용이다. MEMORY { FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 128K RAM (rwx) : ORIGIN = 0x2.. 이전 1 다음