ATmega328P 2

[ATmega328P] 레지스터: I/O 주소와 데이터 주소 이해하기

MCU 프로그래밍을 할 때 데이터시트를 보면 같은 레지스터에 두 가지 주소가 붙어있는 걸 볼 수 있다. 하나는 I/O 주소, 다른 하나는 데이터 주소다. I/O 주소ATmega328P에는 64바이트짜리 작은 공간이 있다.여기에 PORTB, DDRB, PINB 같은 하드웨어 제어 레지스터가 배치돼 있다.이 공간의 주소를 I/O 주소라고 부른다.이 영역은 CPU의 특수 명령어 IN, OUT, SBI, CBI 같은 걸로 접근할 수 있다.장점은 빠르다는 것. 1클럭에 입출력을 처리할 수 있다. 데이터 주소동시에, 똑같은 레지스터들이 SRAM 공간에도 매핑돼 있다.이게 데이터 주소다.예를 들어 PORTB의 경우:I/O 주소: 0x05데이터 주소: 0x25데이터 주소로 접근할 때는 LDS, STS 같은 일반 메모리..

[ATmega328P] 레지스터 직접 제어 방식으로 프로그래밍 해보기

이번 포스팅에서는 ATmega328P 마이크로컨트롤러를 레지스터 직접 제어 방식으로 프로그래밍하는 방법에 대해서 알아본다. 레지스터 방식은 Arduino IDE에서 사용하는 digitalWrite() 같은 함수 호출 방식보다 더 효율적이고 하드웨어에 가깝게 제어할 수 있다. 💡 레지스터란?레지스터는 마이크로컨트롤러 내부에 있는 매우 빠른 임시 저장 공간이다.ATmega328P에서는 특정 기능을 제어하기 위해 여러 레지스터를 사용한다.아래 예시 프로그램에서는 포트의 입출력 방향을 설정하는 DDRB 레지스터와, 포트의 출력 상태를 제어하는 PORTB 레지스터를 사용한다. 예시: ATmega328P의 PB5 핀에 연결된 LED를 1초 간격으로 깜빡이는 프로그램#define F_CPU 16000000UL#in..