BASIC4MCU | 질문게시판 | atmega128 twi통신 통신상태 점검 소스 질문
페이지 정보
작성자 wiopf1 작성일2019-04-17 19:43 조회4,911회 댓글1건본문
인터넷에 많은 atmega128 twi통신 소스를 찾아봤습니다.
그런데 통신상태를 점검할 때 대부분
TWINT 비트와 TWSR 비트를 점검을 합니다
예를들어
1. while (((TWCR & (1 << TWINT)) == 0x00) || (TWSR & 0xf8) != 0x08) ; // START 상태 검사, 이후 모두 상태 검사
2. while (((TWCR & (1 << TWINT)) == 0x00) || (TWSR & 0xf8) != 0x18) ; // SLA+W has been transmitted
3. while (((TWCR & (1 << TWINT)) == 0x00) || (TWSR & 0xf8) != 0x28) ; //data byte has been transmitted
그런데 제가 실험(?)을 해본 결과 twcr의 twint 비트는 마스터가 그냥 보냈으면 slave가 받았든지 말든지 (즉 ack 신호가 왔든지 말든지) set 되어버립니다...
1, twint 비트가 slave의 수신여부와 상관없이 set되는게 사실일까요? 어떻게 생각하세요?
2. 만일 1번이 사실이라면 제 생각에는 위의 예시 소스에서 || 연산을 &&로 바꾸든지, 아니면 TWSR로만 상태검사를 하는게 맞다고 생각합니다.
선생님 생각 궁금합니다.
댓글 1
조회수 4,911master님의 댓글
master 작성일
The TWINT flag is set in the following situations:
• After the TWI has transmitted a START/REPEATED START condition
• After the TWI has transmitted SLA+R/W
• After the TWI has transmitted an address byte
• After the TWI has lost arbitration
• After the TWI has been addressed by own slave address or general call
• After the TWI has received a data byte
• After a STOP or REPEATED START has been received while still addressed as a slave
• When a bus error has occurred due to an illegal START or STOP condition
데이터시트에 위와 같이 나와있습니다.
구글번역한 것도 아래에 첨부해드리죠
TWINT 플래그는 다음 상황에서 설정됩니다.
• TWI가 START / REPEATED START 조건을 전송 한 후
• TWI가 SLA + R / W를 전송 한 후
• TWI가 주소 바이트를 전송 한 후
• TWI가 중재를 잃은 후에
• TWI가 자신의 슬레이브 주소 또는 일반 호출로 처리 된 후
• TWI가 데이터 바이트를받은 후
• 여전히 슬레이브로 주소가 지정된 상태에서 STOP 또는 REPEATED START가 수신 된 후
• 불법적 인 START 또는 STOP 조건으로 인해 버스 오류가 발생했을 때