ATmega8(A)의 PDIP(parallel dual in-line, 핀 배치가 평행한 두 줄 모양) 패키지의 외형은 다음 그림과 같이 14 핀씩 두 줄이며, 각 핀의 번호 및 명칭은 다음과 같다.

[그림 1] ATmega8(A) PDIP 패지키의 핀 배열


[표 1] 핀의 이름과 기능

핀이름

기능

비고

Vcc/GND

uC를 구동시킬 전원 연결

동작 필수 기능

/RESET

리셋핀

XTAL1/XTAL2

클럭신호 입력 핀

PB0,PB1,…,PB7

8bit 범용 입출력 포트

포트

PD0,PD1,…PD7

8bit 범용 입출력 포트

PC0,PC1,…PC6

7bit 범용 입출력 포트

RXD, TXD, XCK

시리얼 통신을 위한 핀

통신

SCK,MISO,MOSI, /SS

SPI통신을 위한 핀 (ISP에 사용)

SCL, SDA

Two-Wire Interface (TWI)

INT0, INT1

외부 인터럽트 핀

T0, T1

TOSC0, TOSC1

타이머 클럭 입력 핀

타이머/카운터

OC1A, OC1B, OC2

타이머/카운터 출력핀

ICP1

타이머/카운터 1의 입력캡춰 핀

AVCC

ADC의 전원 인가 핀

ADC

AREF

ADC의 기준전압 인가 핀

ADC0,…,ADC5

ADC를 수행할 노드 연결 핀

AIN0, AIN1

아날로그 비교를 위한 핀


 ATmega8(A)는 AVR계열 중에서 28개의 핀을 가진 uC이다. (AVR중 tiny계열에는 8핀만을 가지는 uC도 있다). 핀의 명칭을 보면 P로 시작하는 핀들이 가장 많이 눈에 띄는데 이들은 포트(port)를 뜻한다. ATmega8(A)는 8bit로 입출력을 제어할 수 있는 2개의 양방향 포트(port)를 가지며 포트B(PB0~PB7), 포트D(PD0~PD6)라고 칭한다. 포트라는 것은 μC가 입력 신호를 받거나 출력 신호를 내보내는 통로라고 이해하면 된다. 하나의 핀은 2가지 전압(0V와 5/3.3V)만을 가질 수 있으므로 하나의 bit를 표현할 수 있다. 8개의 핀을 조합해서 8bits 즉 1byte를 구성한다. 즉 사용자 프로그램에 의해서 포트 핀은 0V 전위를 가질 수도 5V전위를 가질 수도 있으며 (출력일 경우) 외부의 0V 혹은 5V의 전압값을 읽어 들일 수도 있다(입력일 경우). 양방향이라는 것은 동일한 포트가 입력과 출력으로 모두 사용할 수 있다는 의미이다.


 총 28개의 핀들 중에 전원을 인가하는 8/20/21번(VCC, AVCC, AREF)과 8/22번(GND)을 제외한 나머지 23개의 핀이 모두 포트의 기능을 가지고 있다. 또한 핀 수가 28개로 제한이 되어있기 때문에 하나의 핀이 두 개의 기능을 가지는 경우도 있다. 이 경우 내부 I/O레지스터를 조작하여 어떤 기능으로 사용할 것인가를 지정할 수 있다.


[그림 2] ATmega8(A)의 내부 구조도


 [그림 2]에 ATmega8A의 전체 기능별 블럭도가 도시되어 있다. 이 그림을 보면 8bit 데이터버스가 모든 구성요소에 연결되어 있다. 하지만 레지스터와 ALU간에는 전용선로가 깔려있어서 ALU가 레지스터에서 데이터를 읽고 쓰는 것이 가장 빠르다. ALU는 연산에 필요한 데이터를 레지스터에서 읽어오며 또한 연산 결과를 레지스터에 바로 반영한다.


 PC(program counter)는 현재 실행되는 프로그램의 번지를 저장하는 메모리이다. 오류가 없는 프로그램이 어셈블되어서 ISP기능 등을 이용하여 프로그램이 플래쉬롬에, 그리고 데이터가 EEPROM에 저장이 되어 있을 것이다. uC는 전원과 적합한 클럭이 인가되고 리셋핀에 high(5/3.3V) 신호가 인가되면 PC(program counter)는 $000으로 초기화되고 프로그램 메모리의 $000번지부터 명령어를 하나씩 명령레지스터(instruction register)로 읽어 들인다. 이때 현재 실행해야 할 프로그램의 번지가 저장되어 있는 곳이 바로 PC이고 16bit 로 구성되어 있다. 따라서 초기에는 PC에 $0000값이 입력되고 명령어를 하나(대부분 1word 이지만 어떤 명령어는 2word) 읽어 들이고 1(혹은 2)가 증가한다. 읽어 들인 명령어는 명령레지스터에 저장된 후 명령 해독기(instruction decoder)에서 어떤 일을 수행하라는 명령어인지를 해독한다. 해독이 끝나면 해당되는 작업을 수행하기 위해 적절한 제어신호가 제어선(cotnrol lines)에 의해서 전달된다. 현재의 명령어를 해독하고 수행하는 동시에 다음 명령어(즉 PC가 가리키는 번지에 저장된 명령어)를 명령레지스터로 읽어 들인다. 그렇기 때문에 거의 모든 명령어가 1클럭 싸이클에 수행되는 것이고, 만약 시스템이 4MHz 클럭으로 동작한다면 최대 4MIPS의 수행속도를 낼 수 있는 것이다.


 AVR은 하버드 구조(Harvard structure)를 채택하여 프로그램과 데이터를 위한 메모리와 버스가 서로 분리되어 있다. 즉 프로그램메모리와 데이터메모리가 따로 존재하고, 각각의 메모리를 접근하기 위한 주소 및 데이터 버스선도 따로 존재한다. 프로그램 메모리는 2단계 파이프라인(2-stage pipeline) 방식으로 동작하여 프로그램이 수행되는 동안에 다음 명령어를 읽어 들인다. 데이터 버스를 통해서 SRAM이나 EEPROM에서 데이터를 레지스터로 읽어오거나 반대로 쓸 수도 있다. 그리고 모든 주변장치들이 데이터버스를 통해서 레지스터와 연결되어 있다.




Posted by 살레시오
,