Files
motor/Drivers/DRV/drv_i2c.c
T
2024-09-26 22:32:20 +08:00

174 lines
2.7 KiB
C

/*
* drv_i2c.c
*
* Created on: Mar 31, 2023
* Author: gxms0
*/
#include "drv_i2c.h"
#include "stdbool.h"
static I2C_t *root = NULL;
I2C_t i2c1;
void i2c_init()
{
i2c_config(&i2c1, "I2C1",&hi2c1, i2c_Address_8bit);
}
void i2c_config(I2C_ptr e,char *name, I2C_HandleTypeDef *hi2c, uint8_t addr_len)
{
e->hi2c = hi2c;
e->addr_len = addr_len;
e->next_ptr = NULL;
e->name = name;
if (root)
{
I2C_t *last = root;
while (last->next_ptr)
{
last = last->next_ptr;
}
e->channel = last->channel + 1;
last->next_ptr = e;
}
else
{
e->channel = 0;
root = e;
}
}
uint16_t i2c_read(I2C_ptr ptr, uint16_t address, uint16_t reg,uint8_t *data, uint16_t len)
{
/*
if (len < 4)
{
if (!HAL_I2C_Mem_Read(ptr->hi2c, address, reg, len,data,len,100))
{
return len;
}
}
else if (i2c_dev->bus->mode == I2C_BUS_DMA)
{
if (!HAL_I2C_Mem_Read_DMA(i2c_dev->bus->hi2c, i2c_dev->addr, MemAddress, MemAddSize, buff_out, len_out))
{
if (ulTaskNotifyTake( pdTRUE, 100))
{
if (i2c_dev->bus->task_waitfor_ret)
{
return true;
}
}
else
{
i2c_dev->bus->task_waitfor_cmpl = NULL;
}
}
}
else
{
if (!HAL_I2C_Mem_Read_IT(i2c_dev->bus->hi2c, i2c_dev->addr, MemAddress, MemAddSize, buff_out, len_out))
{
if (ulTaskNotifyTake( pdTRUE, -1))
{
if (i2c_dev->bus->task_waitfor_ret)
{
return true;
}
}
else
{
i2c_dev->bus->task_waitfor_cmpl = NULL;
}
}
}
return false;
return i;
*/
}
uint16_t i2c_write(I2C_ptr ptr, uint16_t address, uint16_t reg,uint8_t *data, uint16_t len)
{
uint8_t buff2send[128];
uint8_t buff_size = len;
// while( I2C_GetFlagStatus( ptr->I2C, I2C_FLAG_BUSY ) != RESET );
// I2C_GenerateSTART( ptr->I2C, ENABLE );
// while( !I2C_CheckEvent( ptr->I2C, I2C_EVENT_MASTER_MODE_SELECT ));
// I2C_Send7bitAddress( ptr->I2C, address, I2C_Direction_Transmitter);
// while( !I2C_CheckEvent( ptr->I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ));
// if(ptr->addr_len == i2c_Address_8bit)
// {
// buff2send[0] = reg&0x00FF;
// memcpy(buff2send + 1,data,len);
// buff_size += 1;
// }
// else
// {
// buff2send[0] = (reg&0xFF00) >> 8;
// buff2send[1] = reg&0x00FF;
// memcpy(buff2send + 2,data,len);
// buff_size += 2;
// }
uint16_t i = 0;
// for(; i < buff_size;i++)
// {
// I2C_SendData( ptr->I2C, buff2send[i]);
// while( !I2C_CheckEvent( ptr->I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED ) );
// }
// I2C_GenerateSTOP( ptr->I2C, ENABLE );
return i;
}