* AVR 마이크로컨트롤러 입출력 포트 특징
– 6개의 8비트 I/O 포트와 1개의 5비트 I/O 포트로 구성되어 있다.
– 출력포트의 버퍼는 많은 유입전류와 유출전류를 사용(최대 40mA)할 수 있다.
– 모든 포트 핀은 개별적으로 내부 풀업 저항을 사용할 수 있다.
– 모든 I/O핀은 VCC와 GND 사이에 다이오드를 접속하여 포트를 보호한다.
– Read-Modify-Write기능을 가지고 있어, 비트 단위의 포트 설정이 자유롭다.
– 각 포트에 대한 데이터 출력용 레지스터(PORTx)와 데이터 입출력 방향 지정용 레지스터(Data Direction Register : DDRx), 그리고 입력용 레지스터 (PINx)를 가지고 있다.
* AVR 마이크로컨트롤러는 입출력 포트를 제어하기 위해서, DDxn, PORTxn, PINxn의 3개의 레지스터를 사용한다.
* DDRx 레지스터
– 입출력의 방향설정을 하기 위한 레지스터이다. DDRA ~ DDRG 레지스터의 입출력포트에 대응하는 해당 비트에 1을 쓰면 그 해당 핀이 출력으로, 0을 쓰면 입력으로 설정된다. 초기값을 0으로 설정되어 있다. 비트별로 만약 포트 A의 비트3를 출력으로 설정하려면 DDRA = 0x08로 하면 되고, 포트 A를 전부 출력으로 설정하려면 DDRA = 0xff로 하면 된다.
* PORTx 레지스터
– 데이터를 출력하기 위한 레지스터이다. DDRx의 값을 세팅하여 출력으로 설정된 경우 출력을 원하는 데이터값을 PORTx 레지스터에 넣어주면 된다. PORTx 레지스터는 읽기와 쓰기가 모두 가능하다. 비트별로 설정하려면 PORTx = 1의 형태로 하면 된다( x는 A ~ G). 만약 포트 B의 비트3에 1을 출력하려면 PORTB = 0x08로 하면 된다.
* PINx 레지스터
– 데이터 입력용 레지스터이다. 입출력 핀이 입력으로 설정된 경우 PINx 레지스터에 해당하는 값을 읽으면 된다. 해당 핀의 값을 읽어 들인다. 읽기만 가능하며 쓰기는 금지되어 있다. 비트별로 읽어 들이려면 PINx를 사용하면 된다. 비트별로 만약 포트C의 비트3값을 읽어 들여 led3라는 비트값에 할당하려면 led3 = (PINC & 0x08)로 하면 된다.
* ATMega128 마이크로콘트롤러는 6개의 8비트 입출력 포트와 1개의 5비트 입출력 포트로 구성되어 있다. 출력 포트들은 임베디드 시스템을 설계할 때 그 용도에 맞게 적절히 기능을 부여하게 된다. 시스템에서 요구되는 기능에 따라 내장할 주변 소자들과 외부 인터페이스를 결정하고, 그 주변 소자와 외부 인터페이스들을 마이크로컨트롤러의 각 입출력 포트에 적절히 배분하여 연결해 주어야 한다. 예를 들어 UART 인터페이스를 필요로 하는 외부 인터페이스는 포트 D나 포트 E의 UART 포트에 연결하면 되고, PWM 제어가 필요한 모터는 포트 B의 PWM 포트에, AD변환이 필요한 센서등은 포트 F의 ADC 포트에 연결하면 된다. 만약 외부에 대용량의 메모리를 붙여야 한다면 포트 A, 포트 C, 포트 G에 있는 외부 메모리 연결 포트를 사용해야 한다.
* 포트 A(PA7 ~ PA0 : 핀 44 ~ 51)
– 내부 풀업 저항이 있는 8비트 양방향 입출력 단자로서, 외부 메모리를 둘 경우에는 주소버스(A7-A0)와 데이터버스(D7-D0)로 사용된다. 이때 어드레스 버스와 데이터 버스를 구분하기 위해서는 ALE 신호를 사용한다. 다음은 외부 메모리를 둘 경우 각 핀 역할을 정리한 것이다.
* 포트 A의 부가기능
PA7 : AD7(외부 메모리 인터페이스 주소와 데이터 비트 7)
PA6 : AD6(외부 메모리 인터페이스 주소와 데이터 비트 6)
PA5 : AD5(외부 메모리 인터페이스 주소와 데이터 비트 5)
PA4 : AD4(외부 메모리 인터페이스 주소와 데이터 비트 4)
PA3 : AD3(외부 메모리 인터페이스 주소와 데이터 비트 3)
PA2 : AD2(외부 메모리 인터페이스 주소와 데이터 비트 2)
PA1 : AD1(외부 메모리 인터페이스 주소와 데이터 비트 1)
PA0 : AD0(외부 메모리 인터페이스 주소와 데이터 비트 0)
* 포트 B(PB7 ~ PB0 : 핀 10 ~ 17)
– 내부 풀업 저항이 있는 8비트 양방향 입출력 단자로서, GPIO로 사용되지 않을 경우에는 타이머/카운터나 SPI용 단자 혹은 PWM 단자로도 사용된다. 다음은 특수용도로 사용될 경우 포트 B의 각 핀의 기능을 정리한 것이다.
* 포트 B의 부가기능
PB7 : OC2/OC1C(출력비교 또는 타이머/카운터2의 PWM 출력, 또는 출력비교와 타이머/카운터2의 PWM출력 C)
PB6 : OC1B(출력비교 또는 타이머/카운터1의 PWM출력 B)
PB5 : OC1A(출력비교 또는 타이머/카운터1의 PWM 출력 A)
PB4 : OC0(출력비교 뚀는 타이머/카운터0의 PWM 출력)
PB3 : MISO(SPI 버스 마스터 입력/종속 출력)
PB2 : MOSI(SPI 버스 마스터 출력/종속 입력)
PB1 : SCK(SPI 버스 직렬 클럭)
PB0 : /SS(SPI 종속 선택 입력)
* 포트 C(PC7 ~ PC0 : 핀 35 ~ 42)
– 내부 풀업 저항이 있는 8비트 양방향 입출력 단자로서, 외부메모리를 둘 경우에는 주소버스(A15 ~ A8)로 사용된다. 다음은 외부 메모리를 둘 경우 각 핀 역할을 정리한 것이다.
* 포트 C의 부가기능
PC7 : AD7(외부 메모리 인터페이스 주소 비트 15)
PC6 : AD6(외부 메모리 인터페이스 주소 비트 14)
PC5 : AD5(외부 메모리 인터페이스 주소 비트 13)
PC4 : AD4(외부 메모리 인터페이스 주소 비트 12)
PC3 : AD3(외부 메모리 인터페이스 주소 비트 11)
PC2 : AD2(외부 메모리 인터페이스 주소 비트 10)
PC1 : AD1(외부 메모리 인터페이스 주소 비트 9)
PC0 : AD0(외부 메모리 인터페이스 주소 비트 8)
* 포트 D(PD7 ~ PD0 : 핀 25 ~32)
– 내부 풀업 저항이 있는 8비트 양방향 입출력 단자로서, 타이머용 단자 혹은 외부인터럽트 단자로도 사용된다. 다음은 특수용도로 사용될 경우 각 핀의 기능을 정리한 것이다.
* 포트 D의 부가기능
PD7 : T2(타이머/카운터2 클럭 입력)
PD6 : T1(타이머/카운터1 클럭 입력)
PD5 : XCK1(USART1 외부 클럭 입/출력)
PD4 : IC1(타이머/카운터1 입력 캡쳐 트리거)
PD3 : INT3/TXD1(외부 인터럽트3 입력 또는 USART1 전송 핀)
PD2 : INT2/RXD1(외부 인터럽트2 입력 또는 USART1 수신 핀)
PD1 : INT1/SDA(외부 인터럽트1 입력 또는 TWI 직렬 데이터)
PD0 : INT0/SCL(외부 인터럽트0 입력 또는 TWI 직렬 클럭)
* 포트 E(PE7 ~ PE0 : 핀 2 ~ 9)
– 내부 풀업 저항이 있는 8비트 양방향 입출력 단자로서, 타이머용 단자, 외부인터럽트, 아날로그 비교기, USART용 단자로도 사용된다. 다음은 특수용도로 사용될 경우 각 핀의 기능을 정리한 것이다.
* 포트 E의 부가기능
PE7 : INT7/IC3(외부 인터럽트 7입력 또는 타이머/카운터3 입력 캡쳐 트리거)
PE6 : INT6/T3(외부 인터럽트 6입력 또는 타이머/카운터3 클럭 입력)
PE5 : INT5/OC3C(외부 인터럽트 5 입력 또는 타이머/카운터3의 출력 챕쳐와 PWM 출력 C)
PE4 : INT4/OC3B(외부 인터럽트 4 입력 또는 타이머 카운터 3의 출력 챕쳐와 PWM 출력 B)
PE3 : AIN1/OC3A(아날로그 비교 반대입력 또는 타이머/카운터3의 출력 비교와 PWM 출력 A)
PE2 : AIN0/XCK0(아날로그 비교 입력 또는 USART0 외부 클럭 입/출력)
PE1 : PD)/TXD0(프로그램 데이터 출력 또는 UART0 전송 핀)
PE2 : PDI/RXD0(프로그램 데이터 입력 또는 UART0 수신 핀)
* 포트 F(PF7 ~ PF0 : 핀 54 ~ 61)
– 내부 풀업 저항이 있는 8비트 양방향 입출력 단자로서, AD변환기 혹은 JTAG 인터페이스용 단자로도 사용된다. 다음은 AD 변환이나, JTAG용도로 사용될 경우의 각 핀 역할을 정의한 것이다.
* 포트 F의 부가기능
PF7 : ADC7/TDI(ADC 입력 채널 7 또는 JTAG Test Data Input)
PF6 : ADC6/TDO(ADC 입력 채널 6 또는 JTAG Test Data Output)
PF5 : ADC5/TMS(ADC 입력 채널 5 또는 JTAG Test Mode Select)
PF4 : ADC4/TCK(ADC 입력 채널 4 또는 JTAG Test Clock)
PF3 : ADC3(ADC 입력 채널 3)
PF2 : ADC2(ADC 입력 채널 2)
PF1 : ADC1(ADC 입력 채널 1)
PF0 : ADC0(ADC 입력 채널 0)
* 포트 G(PG4 ~ PG0, 핀 19, 18, 43, 34, 33)
– 내부 풀업 저항이 있는 8비트 양방향 입출력 단자로서, 외부 메모리 접속을 위한 스트로브 신호용, RTC(Real Time Counter) 타이머용 발진기 단자로도 사용된다.
* 포트 G의 부가기능
PG4 : TOSC1(RTC 오실레이터 타이머/카운터 0)
PG3 : TOSC2(RTC 오실레이터 타이머/카운터 0)
PG2 : ALE(외부메모리에 주소 래치 인에이블)
PG1 : RD(외부메모리에 스트로브 읽기)
PG0 : WR(외부메모리에 스트로브 쓰기)