==================================Outline====================================
저수준 C 프로그래밍
- GPIO를 제어하는 레지스터
- GPIO를 활용한 LED 제어
----------------------------------------------------------------------------
저수준 C 프로그래밍
p/459
ATmega 시리즈에서는 PORTx로 각 핀을 제어하면 값을 넣을 때마다 모든 값이 갱신된다. ARM 시리즈에서는 SET레지스터와 CLEAR레지스터가 따로 있어서 값이 갱신되는 것을 방지한다. 또한 해당 비트를 갱신해주지 않는 한 해당 핀의 값은 유지된다.
라즈베리파이의 하드웨어를 제어하려면 하드웨어에 대한 정보가 있어야 한다. 라즈베리파이는 브로드컴의 BCM2835 칩셋을 사용하고 있다. 데이터시트는 URL을 통해 내려 받을 수 있다.
(http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf)
AP(Application Process)는 CPU제조에서 도면을 구입하여 제작한 CPU제품을 말한다.
GPIO를 제어하는 레지스터
GPFSELn(GPIO Alternate function select register, n: 0 ~ 5): 핀의 기능 설정
GPSETn(GPIO Pin Output Set Register): 입/출력 모드 시, high설정
GPCLRn(GPIO Output Clear Register): 입/출력 모드 시, low설정
GPLEVn(GPIO Pin Level Registers, n: 0 ~ 1): 입/출력 모드 시, 해당 핀의 값 확인
GPEDSn(GPIO Event Detect Status Register): 입/출력 모드 시, 특정 핀의 상태 변화를 감지
GPRENn(GPIO Pin Rising Edge Detect Enable): 입/출력 모드 시, 상승 에지 감지
GPFENn(GPIO Pin Falling Edge Detect Enable): 입/출력 모드 시, 하강 에지 감지
GPPUD(GPIO Pull-up/down Registers): 입/출력 모드 시, 풀업 풀다운 기능 설정
실제 메모리의 주소로는 접근할 수 없고 가상 주소를 사용해야 한다.
'c'는 캐릭터 디바이스
GPIO를 활용한 LED 제어
p/472
운영체제에서는 메모리 사용의 효율성을 위해서 가상 메모리를 사용하게 되고 메모리 보호를 위해서 물리적 메모리의 직접적인 접근을 허용하지 않는다. 때문에 메모리에 접근하려면 가상 메모리의 주소를 알아야 한다. 물리 메모리의 주소를 입력하면 가상화 메모리 주소로 변환시켜주는 함수 'mmap'을 사용해야 한다.
RaspberryPi2의 물리메모리 주소는 ‘3F’로 시작한다.
교재의 예제를 코딩해보자.
/*** 소스 ***/
#include <stdio.h> |
'Busan IT > 로봇제어' 카테고리의 다른 글
라즈베리 파이 커널 빌드와 디바이스 드라이버 (0) | 2015.11.04 |
---|---|
저수준 C프로그래밍, 디바이스 드라이버 프로그래밍 (0) | 2015.11.03 |
BCM 라이브러리 PWM LED Dimming (0) | 2015.10.30 |
푸쉬 버튼을 이용한 LED on/off 제어 (0) | 2015.10.28 |
플라스크 기반의 GPIO 포트 제어, 스마트홈 (0) | 2015.10.26 |