adds immediate i2c return, fixes ez matrix code
This commit is contained in:
		
							parent
							
								
									6380f83190
								
							
						
					
					
						commit
						7a44ad83fc
					
				
					 5 changed files with 35 additions and 31 deletions
				
			
		| 
						 | 
				
			
			@ -28,7 +28,7 @@ i2c_status_t i2c_start(uint8_t address, uint16_t timeout)
 | 
			
		|||
 | 
			
		||||
  uint16_t timeout_timer = timer_read();
 | 
			
		||||
  while( !(TWCR & (1<<TWINT)) ) {
 | 
			
		||||
    if (timeout && ((timer_read() - timeout_timer) > timeout)) {
 | 
			
		||||
    if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
 | 
			
		||||
      return I2C_STATUS_TIMEOUT;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +43,7 @@ i2c_status_t i2c_start(uint8_t address, uint16_t timeout)
 | 
			
		|||
 | 
			
		||||
  timeout_timer = timer_read();
 | 
			
		||||
  while( !(TWCR & (1<<TWINT)) ) {
 | 
			
		||||
    if (timeout && ((timer_read() - timeout_timer) > timeout)) {
 | 
			
		||||
    if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
 | 
			
		||||
      return I2C_STATUS_TIMEOUT;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ i2c_status_t i2c_write(uint8_t data, uint16_t timeout)
 | 
			
		|||
 | 
			
		||||
  uint16_t timeout_timer = timer_read();
 | 
			
		||||
  while( !(TWCR & (1<<TWINT)) ) {
 | 
			
		||||
    if (timeout && ((timer_read() - timeout_timer) > timeout)) {
 | 
			
		||||
    if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
 | 
			
		||||
      return I2C_STATUS_TIMEOUT;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -82,7 +82,7 @@ int16_t i2c_read_ack(uint16_t timeout)
 | 
			
		|||
 | 
			
		||||
  uint16_t timeout_timer = timer_read();
 | 
			
		||||
  while( !(TWCR & (1<<TWINT)) ) {
 | 
			
		||||
    if (timeout && ((timer_read() - timeout_timer) > timeout)) {
 | 
			
		||||
    if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
 | 
			
		||||
      return I2C_STATUS_TIMEOUT;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -99,7 +99,7 @@ int16_t i2c_read_nack(uint16_t timeout)
 | 
			
		|||
 | 
			
		||||
  uint16_t timeout_timer = timer_read();
 | 
			
		||||
  while( !(TWCR & (1<<TWINT)) ) {
 | 
			
		||||
    if (timeout && ((timer_read() - timeout_timer) > timeout)) {
 | 
			
		||||
    if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
 | 
			
		||||
      return I2C_STATUS_TIMEOUT;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -210,7 +210,7 @@ i2c_status_t i2c_stop(uint16_t timeout)
 | 
			
		|||
 | 
			
		||||
  uint16_t timeout_timer = timer_read();
 | 
			
		||||
  while(TWCR & (1<<TWSTO)) {
 | 
			
		||||
    if (timeout && ((timer_read() - timeout_timer) > timeout)) {
 | 
			
		||||
    if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
 | 
			
		||||
      return I2C_STATUS_TIMEOUT;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,9 @@ typedef int16_t i2c_status_t;
 | 
			
		|||
#define I2C_STATUS_ERROR   (-1)
 | 
			
		||||
#define I2C_STATUS_TIMEOUT (-2)
 | 
			
		||||
 | 
			
		||||
#define I2C_TIMEOUT_IMMEDIATE (0)
 | 
			
		||||
#define I2C_TIMEOUT_INFINITE (0xFFFF)
 | 
			
		||||
 | 
			
		||||
void i2c_init(void);
 | 
			
		||||
i2c_status_t i2c_start(uint8_t address, uint16_t timeout);
 | 
			
		||||
i2c_status_t i2c_write(uint8_t data, uint16_t timeout);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue