[Atmega128] 9. I2C 통신 (Inter-Integrated Circuit)

2019. 8. 5. 14:26개발 관련 학습정리/AVR(atmega128) Register 분석

반응형

 

이번에는 TWI라고도 불리우는 I2C통신에 대하여 알아보자.

 

 

 

 

 

클럭과 데이터로 구성된 두개의 버스 선으로 이루어져 있으며,

7비트로 128개의 서로 다른 디바이스를 제어할 수 있다.

각 버스선 마다 pull-up저항이 연결되어 있으며, 마스터와 슬레이브 동작을 동시에 지원한다.

기본원리는 간단하고, 주요 기능들은 레지스터에 있으니 바로 레지스터를 알아보도록 하자.

 

 

 

 

 

 

TWI 모듈

 

전체적인 모듈 구성도는 위 그림처럼 생겼으며,

SCL,SDA 두개의 선으로 이루어지고 컨트롤 레지스터 두개,

전송속도 레지스터, 주소 레지스터, 데이터 레지스터로 이루어져 있는걸 볼 수 있다.

 

 

 

 

 

 

 

1. TWBR (TWI Bit Rate Register)

 

TWBR0...7(TWI Bit Rate Register) : TWI 전송속도를 설정하는 레지스터로, 밑의 그림과 같은 계산식으로 계산한다.

 

 

 

 

 

 

 

 

2. TWCR (TWI Control Register)

컨트롤 레지스터.

 

TWINT (TWI Interrupt Flag) : 작업을 끝마쳤을때 1로 플래그 한다. 자동으로 클리어가 되지 않기 때문에,

처음에 클리어 해야만 한다.

 

TWEA (TWI Enable Acknowledge Bit) : 수신했다는 신호를 알리는 ACK신호를 만드는 역할을 한다.

1로 세트되어있고, 수신이 완료되었을때 ACK신호를 보내게 된다.

 

TWSTA (TWI START Condition Bit) : START 조건을 만들어주는 비트로,

TWI버스가 not busy상태일때 조건을 만들고 busy상태이면 기다리는 역할을 한다.

 

TWSTO (TWI STOP Condition Bit) : TWI 버스 사용이 끝나면 다른 디바이스를 위해 STOP조건을 만들어 전송.

 

TWWC (TWI Write Collision Flag) : 충돌 플래그로 작업중일때 쓰기를 시도하면 플래그가 성립된다.

 

TWEN (TWI Enable Bit) : 말그대로 TWI를 활성화하는 비트이다.

 

TWIE (TWI Interrupt Enable Bit) : TWI 인터럽트를 활성화 하는 비트이다.

 

 

 

 

 

 

 

3. TWSR (TWI Status Register) 

 

TWS3...7 (TWI Status) : 5개의 비트로 TWI의 로직, 상태를 나타낸다.

 

TWPS0...1 (TWI Prescaler Bit) : TWI 속도를 계산할때 쓰이는 Prescaler 값을 설정하는 비트.

값은 다음과 같다.

 

 

 

 

 

 

 

 

4. TWDR (TWI Data Register)

 

TWD0...7 (TWI Data) : 다음 전송할 데이터를 저장하며, 수신일때는 이전 데이터를 갖는다.

 

 

 

 

 

 

 

 

5. TWAR (TWI Address Register)

 

TWA0...6 (TWI slave Address Register) : 7개의 비트로 보낼 slave의 주소를 나타낸다.

 

TWGCE (TWI General Call Enable) : 1일때 general call을 인식하게 한다.

마스터에서 START신호를 발생하고 TWDR에 0x00을 넣으면 general을 의미하며,

TWGCE가 1인 slave들이 응답하게 된다.

 

 

 

 

 

 

 

지금까지 3가지 통신방법을 알아보았고,

다음엔 워치독 타이머와 리셋조건에 대해 알아보자.

[복두출판사]AVR ATmega128 프로그래밍 응용실습:ED-4513 마이크로프로세서 콤보 IT를 이용한, 복두출판사
반응형