| 181,23 → 181,23 |
| twi__error_t |
| twi__start |
| ( |
| void |
| void |
| ){ |
| // Send start condition. |
| TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN); |
| // Send start condition. |
| TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN); |
| |
| // Wait for TWINT flag set. This indicates that the START condition has |
| // been transmitted. |
| while (!(TWCR & (1 << TWINT))); |
| // Wait for TWINT flag set. This indicates that the START condition has |
| // been transmitted. |
| while (!(TWCR & (1 << TWINT))); |
| |
| // Check value of TWI Status Register. Mask prescaler bits. |
| if (TWSR & TW_NO_INFO != TW_START) |
| { |
| // If status is different from START (TW_START), return error. |
| return TWI__ERROR__ERROR; |
| } |
| |
| return TWI__ERROR__NONE; |
| // Check value of TWI Status Register. Mask prescaler bits. |
| if (TWSR & TW_NO_INFO != TW_START) |
| { |
| // If status is different from START (TW_START), return error. |
| return TWI__ERROR__ERROR; |
| } |
| |
| return TWI__ERROR__NONE; |
| } |
| |
| /**************************************************************************//** |
| 208,24 → 208,24 |
| twi__error_t |
| twi__repeat_start |
| ( |
| void |
| void |
| ){ |
| // TODO: check if TWSTO must be set. |
| // Send start condition. |
| TWCR = (1 << TWEN) | (1 << TWINT) | (1 << TWSTA) | (1 << TWSTO); |
| // TODO: check if TWSTO must be set. |
| // Send start condition. |
| TWCR = (1 << TWEN) | (1 << TWINT) | (1 << TWSTA) | (1 << TWSTO); |
| |
| // Wait for TWINT flag set. This indicates that the START condition has |
| // been transmitted. |
| while (!(TWCR & (1 << TWINT))); |
| // Wait for TWINT flag set. This indicates that the START condition has |
| // been transmitted. |
| while (!(TWCR & (1 << TWINT))); |
| |
| // Check value of TWI Status Register. Mask prescaler bits. |
| if (TWSR & TW_NO_INFO != TW_REP_START) |
| { |
| // If status different from START (TW_REP_START), return error. |
| return TWI__ERROR__ERROR; |
| } |
| |
| return TWI__ERROR__NONE; |
| // Check value of TWI Status Register. Mask prescaler bits. |
| if (TWSR & TW_NO_INFO != TW_REP_START) |
| { |
| // If status different from START (TW_REP_START), return error. |
| return TWI__ERROR__ERROR; |
| } |
| |
| return TWI__ERROR__NONE; |
| } |
| |
| /**************************************************************************//** |
| 240,24 → 240,24 |
| ( |
| uint8_t sla |
| ){ |
| // Load SLA into TWDR register. |
| TWDR = sla | TW_READ; |
| // Load SLA into TWDR register. |
| TWDR = sla | TW_READ; |
| |
| // Clear TWINT bit in TWCR to start transmission of address. |
| TWCR = (1 << TWINT) | (1 << TWEN); |
| // Clear TWINT bit in TWCR to start transmission of address. |
| TWCR = (1 << TWINT) | (1 << TWEN); |
| |
| // Wait for TWINT flag set. This indicates that the SLA+W (TW_WRITE) has |
| // been transmitted, and ACK/NACK has been received. |
| while (!(TWCR & (1 << TWINT))); |
| // Wait for TWINT flag set. This indicates that the SLA+W (TW_WRITE) has |
| // been transmitted, and ACK/NACK has been received. |
| while (!(TWCR & (1 << TWINT))); |
| |
| // Check value of TWI Status Register. Mask prescaler bits. If status |
| // different from MT_SLA_ACK (TW_MR_SLA_ACK), return error. |
| if (TWSR & TW_NO_INFO != TW_MR_SLA_ACK) |
| { |
| return TWI__ERROR__ERROR; |
| } |
| // Check value of TWI Status Register. Mask prescaler bits. If status |
| // different from MT_SLA_ACK (TW_MR_SLA_ACK), return error. |
| if (TWSR & TW_NO_INFO != TW_MR_SLA_ACK) |
| { |
| return TWI__ERROR__ERROR; |
| } |
| |
| return TWI__ERROR__NONE; |
| return TWI__ERROR__NONE; |
| } |
| |
| /**************************************************************************//** |
| 272,24 → 272,24 |
| ( |
| uint8_t sla |
| ){ |
| // Load SLA into TWDR register. |
| TWDR = sla | TW_WRITE; |
| // Load SLA into TWDR register. |
| TWDR = sla | TW_WRITE; |
| |
| // Clear TWINT bit in TWCR to start transmission of address. |
| TWCR = (1 << TWINT) | (1 << TWEN); |
| // Clear TWINT bit in TWCR to start transmission of address. |
| TWCR = (1 << TWINT) | (1 << TWEN); |
| |
| // Wait for TWINT flag set. This indicates that the SLA+W (TW_WRITE) has |
| // been transmitted, and ACK/NACK has been received. |
| while (!(TWCR & (1 << TWINT))); |
| // Wait for TWINT flag set. This indicates that the SLA+W (TW_WRITE) has |
| // been transmitted, and ACK/NACK has been received. |
| while (!(TWCR & (1 << TWINT))); |
| |
| // Check value of TWI Status Register. Mask prescaler bits. If status |
| // different from MT_SLA_ACK (TW_MT_SLA_ACK), return error. |
| if (TWSR & TW_NO_INFO != TW_MT_SLA_ACK) |
| { |
| return TWI__ERROR__ERROR; |
| } |
| // Check value of TWI Status Register. Mask prescaler bits. If status |
| // different from MT_SLA_ACK (TW_MT_SLA_ACK), return error. |
| if (TWSR & TW_NO_INFO != TW_MT_SLA_ACK) |
| { |
| return TWI__ERROR__ERROR; |
| } |
| |
| return TWI__ERROR__NONE; |
| return TWI__ERROR__NONE; |
| } |
| |
| /**************************************************************************//** |
| 302,26 → 302,26 |
| twi__error_t |
| twi__send_data |
| ( |
| uint8_t data |
| uint8_t data |
| ){ |
| // Load data into TWDR register. |
| TWDR = data; |
| |
| // Clear TWINT bit in TWCR to start transmission of data. |
| TWCR = (1 << TWINT) | (1 << TWEN); |
| // Load data into TWDR register. |
| TWDR = data; |
| |
| // Wait for TWINT flag set. This indicates that the data has been |
| // transmitted, and ACK/NACK has been receiver. |
| while (!(TWCR & (1 << TWINT))); |
| // Clear TWINT bit in TWCR to start transmission of data. |
| TWCR = (1 << TWINT) | (1 << TWEN); |
| |
| // Check value of TWI status register. Mask prescaler bits. If status |
| // different from MT_DATA_ACK (TW_MT_DATA_ACK), return error. |
| if (TWSR & TW_NO_INFO != TW_MT_DATA_ACK) |
| { |
| return TWI__ERROR__ERROR; |
| } |
| |
| return TWI__ERROR__NONE; |
| // Wait for TWINT flag set. This indicates that the data has been |
| // transmitted, and ACK/NACK has been receiver. |
| while (!(TWCR & (1 << TWINT))); |
| |
| // Check value of TWI status register. Mask prescaler bits. If status |
| // different from MT_DATA_ACK (TW_MT_DATA_ACK), return error. |
| if (TWSR & TW_NO_INFO != TW_MT_DATA_ACK) |
| { |
| return TWI__ERROR__ERROR; |
| } |
| |
| return TWI__ERROR__NONE; |
| } |
| |
| /**************************************************************************//** |
| 334,23 → 334,23 |
| twi__error_t |
| twi__receive_data_ack |
| ( |
| uint8_t* p_data |
| uint8_t* p_data |
| ){ |
| // Check the preconditions. |
| assert(NULL != p_data); |
| // Check the preconditions. |
| assert(NULL != p_data); |
| |
| TWCR = (1 << TWEN) | (1 << TWINT) | (1 << TWEA); |
| |
| while (!(TWCR & (1 << TWINT))); |
| TWCR = (1 << TWEN) | (1 << TWINT) | (1 << TWEA); |
| |
| if ((TWSR & TW_NO_INFO) != TW_MR_DATA_ACK) |
| { |
| return TWI__ERROR__ERROR; |
| } |
| |
| *p_data = TWDR; |
| while (!(TWCR & (1 << TWINT))); |
| |
| return TWI__ERROR__NONE; |
| if ((TWSR & TW_NO_INFO) != TW_MR_DATA_ACK) |
| { |
| return TWI__ERROR__ERROR; |
| } |
| |
| *p_data = TWDR; |
| |
| return TWI__ERROR__NONE; |
| } |
| |
| /**************************************************************************//** |
| 363,23 → 363,23 |
| twi__error_t |
| twi__receive_data_nack |
| ( |
| uint8_t* p_data |
| uint8_t* p_data |
| ){ |
| // Check the preconditions. |
| assert(NULL != p_data); |
| // Check the preconditions. |
| assert(NULL != p_data); |
| |
| TWCR = (1 << TWEN) | (1 << TWINT); |
| |
| while (!(TWCR & (1 << TWINT))); |
| TWCR = (1 << TWEN) | (1 << TWINT); |
| |
| if ((TWSR & TW_NO_INFO) != TW_MR_DATA_NACK) |
| { |
| return TWI__ERROR__ERROR; |
| } |
| |
| *p_data = TWDR; |
| |
| return TWI__ERROR__NONE; |
| while (!(TWCR & (1 << TWINT))); |
| |
| if ((TWSR & TW_NO_INFO) != TW_MR_DATA_NACK) |
| { |
| return TWI__ERROR__ERROR; |
| } |
| |
| *p_data = TWDR; |
| |
| return TWI__ERROR__NONE; |
| } |
| |
| /**************************************************************************//** |
| 390,13 → 390,13 |
| void |
| twi__stop |
| ( |
| void |
| void |
| ){ |
| // Transmit stop operation. |
| TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO); |
| |
| // Wait for stop. |
| while (TWCR & (1 << TWSTO)); |
| // Transmit stop operation. |
| TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO); |
| |
| // Wait for stop. |
| while (TWCR & (1 << TWSTO)); |
| } |
| |
| /****************************************************************************** |