Hello TOR 2k24
Have fun 🚀
			
			
This commit is contained in:
		
							
								
								
									
										82
									
								
								RTE/uGFX_library/stm32f7_i2c.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								RTE/uGFX_library/stm32f7_i2c.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | ||||
| #include "gfx.h" | ||||
|  | ||||
| #include "stm32f7_i2c.h" | ||||
| #include "Driver_I2C.h" | ||||
|  | ||||
| /* I2C Driver */ | ||||
| extern ARM_DRIVER_I2C Driver_I2C3; | ||||
| static ARM_DRIVER_I2C * I2Cdrv = &Driver_I2C3; | ||||
|   | ||||
|   | ||||
| #ifndef EEPROM_I2C_PORT | ||||
| #define EEPROM_I2C_PORT       3         /* I2C Port number                    */ | ||||
| #endif | ||||
|   | ||||
|   | ||||
| #define A_WR                  0         /* Master will write to the I2C       */ | ||||
| #define A_RD                  1         /* Master will read from the I2C      */ | ||||
|  | ||||
| static uint8_t wr_buf[256]; | ||||
| uint8_t  gI2CAccess = 0; | ||||
| bool_t i2cInit(I2C_TypeDef* i2c) | ||||
| { | ||||
| 	gI2CAccess = 1; | ||||
|   I2Cdrv->Initialize   (NULL); | ||||
|   I2Cdrv->PowerControl (ARM_POWER_FULL); | ||||
|   I2Cdrv->Control      (ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_STANDARD); | ||||
|   I2Cdrv->Control      (ARM_I2C_BUS_CLEAR, 0); | ||||
| 	gI2CAccess = 0; | ||||
|   | ||||
|   | ||||
|   return 1;			// just says no error | ||||
| } | ||||
|  | ||||
|  | ||||
| void i2cWriteReg(I2C_TypeDef* i2c, uint8_t slaveAddr, uint8_t regAddr, uint8_t value) | ||||
| { | ||||
| 	wr_buf[0] = regAddr; | ||||
| 	wr_buf[1] = value; | ||||
| 	gI2CAccess = 1; | ||||
|  | ||||
|   I2Cdrv->MasterTransmit (slaveAddr/2, wr_buf, 2, false); | ||||
|   while (I2Cdrv->GetStatus().busy); | ||||
|   if (I2Cdrv->GetDataCount () != 2) return; | ||||
|   /* Acknowledge polling */	 | ||||
| 		gI2CAccess = 0; | ||||
|  | ||||
| //  do { | ||||
| //    I2Cdrv->MasterReceive (DeviceAddr, &wr_buf[0], 1, false); | ||||
| //    while (I2Cdrv->GetStatus().busy); | ||||
| //  } while (I2Cdrv->GetDataCount () < 0); | ||||
|   | ||||
| } | ||||
|  | ||||
| uint8_t i2cReadByte(I2C_TypeDef* i2c, uint8_t slaveAddr, uint8_t regAddr) | ||||
| { | ||||
| 	uint8_t ret = 0; | ||||
| 	gI2CAccess = 1; | ||||
|  | ||||
|   I2Cdrv->MasterTransmit (slaveAddr/2, ®Addr, 1, true); | ||||
|   while (I2Cdrv->GetStatus().busy); | ||||
|   I2Cdrv->MasterReceive (slaveAddr/2, &ret, 1, false); | ||||
|   while (I2Cdrv->GetStatus().busy); | ||||
|   if (I2Cdrv->GetDataCount () != 1) return 0xAA; | ||||
|  	gI2CAccess = 0; | ||||
|  | ||||
| 	return ret; | ||||
| } | ||||
|  | ||||
| uint16_t i2cReadWord(I2C_TypeDef* i2c, uint8_t slaveAddr, uint8_t regAddr) | ||||
| { | ||||
| 	uint8_t ret[2] = { 0, 0 }; | ||||
| 	gI2CAccess = 1; | ||||
|  | ||||
|   I2Cdrv->MasterTransmit (slaveAddr/2, ®Addr, 1, true); | ||||
|   while (I2Cdrv->GetStatus().busy); | ||||
|   I2Cdrv->MasterReceive (slaveAddr/2, ret, 2, false); | ||||
|   while (I2Cdrv->GetStatus().busy); | ||||
|   if (I2Cdrv->GetDataCount () != 2) return 0xAAAA; | ||||
|  	gI2CAccess = 0; | ||||
|  | ||||
| 	return (uint16_t)((ret[0] << 8) | (ret[1] & 0x00FF)); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user