2019. 8. 5. 14:26ㆍ개발 관련 학습정리/AVR(atmega128) Register 분석
이번에는 TWI라고도 불리우는 I2C통신에 대하여 알아보자.
클럭과 데이터로 구성된 두개의 버스 선으로 이루어져 있으며,
7비트로 128개의 서로 다른 디바이스를 제어할 수 있다.
각 버스선 마다 pull-up저항이 연결되어 있으며, 마스터와 슬레이브 동작을 동시에 지원한다.
기본원리는 간단하고, 주요 기능들은 레지스터에 있으니 바로 레지스터를 알아보도록 하자.
전체적인 모듈 구성도는 위 그림처럼 생겼으며,
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) Register 분석' 카테고리의 다른 글
[Atmega128] 11. DATA Memory - EEPROM (1) | 2019.08.06 |
---|---|
[Atmega128] 10. Reset과 Watchdog 타이머 (0) | 2019.08.06 |
[Atmega128] 8. UASRT 통신 (Universal Synchronus Receiver Transmit) (5) | 2019.08.05 |
[Atmega128] 7. SPI 통신 (Serial Peripheral Interface Bus) (0) | 2019.08.05 |
[Atmega128] 6. 아날로그 변환기 ADC (Analog to Digital Converter) (0) | 2019.08.05 |