Описание библиотеки микросхемы 5023ВС016 процессора "Спутник"
i2c.c
См. документацию.
1 
29 #include "i2c.h"
30 
37 {
38  CTRL_T CtrlI2C = I2C_CTRL_NUM;
39  return CtrlI2C;
40 }
41 
48 void I2C_Init(I2C_T *pI2C, uint32_t clt_prsc)
49 {
50  I2C_GPIO_Init();
53  I2C->Clock_prescale = clt_prsc;
54  I2C->Control = I2C_ENABLE;
55 }
56 
63 {
66  GPIO_SetAltFunc(GPIO_E, 12, true);
67  GPIO_SetAltFunc(GPIO_E, 13, true);
68 }
69 
76 unsigned int I2C_Write_Byte(unsigned char addr, unsigned char data)
77 {
78  unsigned int timeout = 10000000;
79  I2C->Tx_Rx = TDATA(addr)|RW(0);
80  I2C->Com_Stat = STA_RxACK(1)|STO_BUSY(0)|RD_AL(0)|WR(1)|ACK(0)|IACK_IF(0);
81  while ((I2C->Com_Stat & TIP(1)) && --timeout > 0);
82  if (!timeout)
83  {
84  return 1;
85  }
86  if (I2C->Com_Stat & STA_RxACK(1))
87  {
88  return 2;
89  }
90  I2C->Tx_Rx = data;
91  I2C->Com_Stat = STA_RxACK(0)|STO_BUSY(1)|RD_AL(0)|WR(1)|ACK(0)|IACK_IF(0);
92  timeout = 10000000;
93  while ((I2C->Com_Stat & TIP(1)) && --timeout > 0);
94  if (!timeout)
95  {
96  return 3;
97  }
98  if (I2C->Com_Stat & STA_RxACK(1))
99  {
100  return 4;
101  }
102  return 0;
103 }
104 
111 unsigned int I2C_Read_Byte(unsigned char addr, unsigned char *data)
112 {
113  unsigned int timeout = 10000000;
114  I2C->Tx_Rx = TDATA(addr)|RW(1);
115  I2C->Com_Stat = STA_RxACK(1)|STO_BUSY(0)|RD_AL(0)|WR(1)|ACK(0)|IACK_IF(0);
116  while ((I2C->Com_Stat & TIP(1)) && --timeout > 0);
117  if (!timeout)
118  {
119  return 1;
120  }
121  if (I2C->Com_Stat & STA_RxACK(1))
122  {
123  return 2;
124  }
125  I2C->Com_Stat = STA_RxACK(0)|STO_BUSY(1)|RD_AL(1)|WR(0)|ACK(1)|IACK_IF(0);
126  timeout = 10000000;
127  while ((I2C->Com_Stat & TIP(1)) && --timeout > 0);
128  if (!timeout)
129  {
130  return 3;
131  }
132  *data = I2C->Tx_Rx;
133  return 0;
134 }
void GPIO_SetAltFunc(GPIO_T *pGPIO, uint16_t Pin_number, bool AltSet)
Установить режим GPIO или альтернативной функции.
Definition: gpio.c:88
#define SET_ALTFUNC(PORT, BIT, FUNC)
Definition: system.h:777
#define RD_AL(x)
Definition: i2c.h:93
void I2C_Init(I2C_T *pI2C, uint32_t clt_prsc)
Инициализация I2C.
Definition: i2c.c:48
CTRL_T
Номера модулей в регистрах PWR_CLK_CTRL и PWR_RST_CTRL Расшифровка битовых полей для регистров PWR_CT...
Definition: system.h:635
#define STO_BUSY(x)
Definition: i2c.h:98
Структура для доступа к регистрам I2C.
Definition: i2c.h:45
#define STA_RxACK(x)
Definition: i2c.h:106
#define WR(x)
Definition: i2c.h:91
#define I2C_ENABLE
Макросы и типы для работы с I2C.
Definition: i2c.h:122
#define TIP(x)
Definition: i2c.h:87
#define IACK_IF(x)
Макросы и типы для регистра Com_Stat.
Definition: i2c.h:82
void PWR_RST_Disable(CTRL_T CTRLn)
Вывод модуля из асинхронного сброса
Definition: system.c:318
void PWR_CLK_Enable(CTRL_T CTRLn)
Подача тактового сигнала на модуль
Definition: system.c:337
#define ACK(x)
Definition: i2c.h:89
unsigned int I2C_Write_Byte(unsigned char addr, unsigned char data)
Отправка байта по интерфейсу I2C.
Definition: i2c.c:76
#define I2C
Указатель на структуру I2C.
#define PORT_E_ALTFUNC
Definition: system.h:759
unsigned int I2C_Read_Byte(unsigned char addr, unsigned char *data)
Чтение байта по интерфейсу I2C.
Definition: i2c.c:111
void I2C_GPIO_Init()
Инициализация портов в режиме альтернативной функции для работы I2C.
Definition: i2c.c:62
#define GPIO_E
Указатель на структуру GPIO_E.
#define RW(x)
Макросы и типы для регистра Tx_Rx.
Definition: i2c.h:75
#define TDATA(x)
Definition: i2c.h:76
CTRL_T I2C_GetCtrlNum(I2C_T *pI2C)
Возвращает номер модуля для использования в функциях включения/выключения I2C.
Definition: i2c.c:36
Этот файл содержит структуры, макросы и функции необходимые для взаимодействия с интерфесом I2C...