I²C Library

Модуль I²C с полным набором I²C функуий доступен с несколькими моделями ARM MCU. MikroPascal PRO для ARM предоставляет библиотеку, которая поддерживает режим ведущего I²C.


  Important :

Процедуры библиотеки

Общие процедуры

I2Cn_Init

Прототип

procedure I2Cn_Init();

Описание

Эта функция настраивает и инициализирует желаемый модуль I²C со стандартным битрейтом 100 кбит / с.

Параметры

нет.

Возвращает

Ничего.

Требует

MCU с модулем I²C.

Пример
// Инициализировать модуль I2C1 со стандартным битрейтом 100000
I2C1_Init();
Примечания
  • В библиотечных программах I²C требуется указать модуль, который вы хотите использовать. Чтобы выбрать желаемый модуль I²C, просто измените букву n в процедуре. Значение n находится в диапахоне от 0 to 9.
  • Количество модулей I²C на каждый MCU отличается от чипа к чипу. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.
    Модули I²C устанавливаются на следующих контактах:

    Stellaris

    • I2C0 :
      • PB3/PB3 - все Cortex M3 и M4 MCUs.
    • I2C1 :
      • PG0/PG1 - TM4C129x Cortex M4 MCUs.
      • PA6/PA7 - все остальные Cortex M4 MCUs, не перечисленные ранее.
      • PA0/PA1 - все Cortex M3 MCUs.
    • I2C2 :
      • PL0/PL1 - TM4C129x Cortex M4 MCUs.
      • PE4/PB5 - все остальные Cortex M4 MCUs, не перечисленные ранее.
    • I2C3 :
      • PK4/PK5 - TM4C129x Cortex M4 MCUs.
      • PD0/PD1 - все остальные Cortex M4 MCUs, не перечисленные ранее.
    • I2C4 :
      • PK6/PK7 - TM4C129x Cortex M4 MCUs.
      • PG2/PG3 - все остальные Cortex M4 MCUs, не перечисленные ранее.
    • I2C5 :
      • PB0/PB1 - TM4C129x Cortex M4 MCUs.
      • PG6/PG7 - LM4F112x, LM4F122x, LM4F132x, LM4F212x and LM4F232x Cortex M4 MCUs.
      • PB6/PB7 - все остальные Cortex M4 MCUs, не перечисленные ранее.
    • I2C6 :
      • PA6/PA7 - TM4C129x Cortex M4 MCUs.
    • I2C7 :
      • PD0/PD1 - TM4C129x Cortex M4 MCUs.
    • I2C8 :
      • PA2/PA3 - TM4C129x Cortex M4 MCUs.
    • I2C9 :
      • PA0/PA1 - TM4C129x Cortex M4 MCUs.

      Обратитесь к приведенной ниже таблице для получения правильных значений скорости передачи битов в отношении системных часов:

      Системные часы Стандартный режим
      4 MHz 100 Kbps
      6 MHz 100 Kbps
      12.5 MHz 89 Kbps
      16.7 MHz 93 Kbps
      20 MHz 100 Kbps
      25 MHz 96.2 Kbps
      33 MHz 97.1 Kbps
      40 MHz 100 Kbps
      50MHz 100 Kbps
      80 MHz 100 Kbps

    MSP432

    • I2C0 :
      • PA6/PA7
    • I2C1 :
      • PC12/PC13
    • I2C2 :
      • PB6/PB7
    • I2C3 :
      • PE10/PE11

    STM32

    • I2C1 :
      • PB6/PB7 все Cortex M0, M3 и M4 MCUs.
    • I2C2 :
      • PB10/PB11 - все Cortex M0 и M3 MCUs.
      • PA9/PA10 - STM32F302x, STM32F303x, STM32F313x, STM32F358x, STM32F373x, STM32F378x, and STM32F383x Cortex M4 MCUs.
      • PF1/PF0 - STM32F301x Cortex M4 MCUs.
      • PB10/PB3 - STM32F401x и STM32F411x Cortex M4 MCUs.
    • I2C3 :
      • PH7/PH8 - все Cortex M3 MCUs.
      • PA8/PC9 - STM32F302x Cortex M4 MCUs.
      • PD0/PD1 - STM32F401x и STM32F411x Cortex M4 MCUs.

    Периферийная входная тактовая частота должна быть не менее:

    • 2 MHz в стандартном режиме (100 Kbps)
    • 4 MHz в режиме быстрого доступа (400 Kbps)

    CEC1302

    • I2C0 :
      • P015/P016
    • I2C1 :
      • P022/P023
    • I2C2 :
      • P020/P021
    • I2C3 :
      • P024/P025

    CEC1702

    • I2C0 :
      • P004/P003
    • I2C1 :
      • P155/P154
    • I2C2 :
      • P010/P007
    • I2C3 :
      • P013/P012

    Kinetis

    • I2C0 :
      • PE24/PE25
    • I2C1 :
      • PE1/PE0
    • I2C2 :
      • PA12/PA11

I2Cn_Init_Advanced

Прототип // для MCU Stellaris :

procedure I2Cn_Init_Advanced(bitrate : dword);

// для MCU Stellaris с альтернативными функциями PORT на контактах GPIO:

procedure I2Cn_Init_Advanced(bitrate : dword; module : ^const Module_Struct);

// для CEC1x02, ST и Kinetis MCUs :

procedure I2Cn_Init_Advanced(I2C_ClockSpeed : dword; module : ^const Module_Struct);

// для MSP432 :

procedure I2Cn_Init_Advanced(I2C_ClockSpeed : dword; clockSource : dword; module : ^const Module_Struct);

Описание

Эта функция настраивает и инициализирует желаемый модуль I²C, используя пользовательскую настройку битрейта.

Параметры

Stellaris

  • bitrate:запрошенная серийная тактовая частота:
    Значение Описание
    _I2C_BITRATE_STANDARD_MODE 100 кбит / с.
    _I2C_BITRATE_FAST_MODE 400 кбит / с.
    _I2C_BITRATE_FAST_MODE_PLUS Fast-mode plus, 1 Мбит / с (доступен только для устройств Stellaris Cortex M4).
    _I2C_BITRATE_HIGH_SPEED_MODE Высокоскоростной режим, 3,33 Мбит / с (доступен только для устройств Stellaris Cortex M4).
  • module: соответствующая разводка модуля. Используйте Code Assistant для перечисения доступных распиновок модулей, набрав_GPIO_MODULE_I2C и нажав Ctrl + Space.

MSP432

  • I2C_ClockSpeed: запрошенная частота последовательного такта.
  • clockSource: источник синхронизации для модуля I²C. Допустимые значения:
    Описание Predefined library const
    Внешние часы _I2C_CLOCK_SOURCE_UCLK
    Вспомогательные часы _I2C_CLOCK_SOURCE_ACLK
    Малоскоростные основные тактовые генераторы _I2C_CLOCK_SOURCE_SMCLK
  • module: соответствующая разводка модуля. Используйте Code Assistant для перечисения доступных распиновок модулей, набрав_GPIO_MODULE_I2C и нажав Ctrl + Space.

STM32

  • I2C_ClockSpeed: запрошенная частота последовательного такта.
  • module: соответствующая разводка модуля. Используйте Code Assistant для перечисения доступных распиновок модулей, набрав_GPIO_MODULE_I2C и нажав Ctrl + Space.

CEC1x02

  • I2C_ClockSpeed: запрошенная частота последовательного такта. Допустимые значения

    Значение Описание
    _I2C_100KHZ Стандартный режим, скорость передачи 100 кбит / с.
    _I2C_400KHZ Полная скорость, скорость передачи данных 400 кбит / с.
    _I2C_1MHZ Быстрый режим, скорость передачи 1 Мбит / с.
  • module: соответствующая разводка модуля. Используйте Code Assistant для перечисения доступных распиновок модулей, набрав_GPIO_MODULE_I2C и нажав Ctrl + Space.

Kinetis

  • I2C_ClockSpeed: запрошенная частота последовательного такта.
  • module: соответствующая разводка модуля. Используйте Code Assistant для перечисения доступных распиновок модулей, набрав_GPIO_MODULE_I2C и нажав Ctrl + Space.
Возвращает

Ничего.

Требует

MCU с модулем I²C.

Пример

Stellaris

// Инициализировать модуль I2C1 в режиме «Быстрый»
I2C1_Init_Advanced(_I2C_BITRATE_FAST_MODE);

// Инициализировать модуль I2C1 в режиме быстрого режима на GPIO_PORTJ
I2C1_Init_Advanced(_I2C_BITRATE_FAST_MODE, @_GPIO_MODULE_I2C1_J01);

MSP432

// Инициализировать модуль I2C1 со скоростью 100 Кбит / с на PA6 / PA7
I2C1_Init_Advanced(100000, _I2C_CLOCK_SOURCE_SMCLK, @_GPIO_MODULE_I2CB0_A67);

STM32

// Инициализировать модуль I2C1 со скоростью 100 Кбит / с на PORTB
I2C1_Init_Advanced(100000, @_GPIO_MODULE_I2C1_PB67);

CEC1x02

// Инициализировать модуль I2C0 со скоростью 100 Кбит / с
I2C0_Init_Advanced(_I2C_100KHZ, @_GPIO_MODULE_I2C0_P015_P016);

Kinetis

// Инициализировать модуль I2C0 со скоростью 100 Кбит / с
I2C0_Init_Advanced(100000, &_GPIO_MODULE_I2C0_PE24_25);
Примечания
  • В библиотечных программах I²C требуется указать модуль, который вы хотите использовать. Чтобы выбрать желаемый модуль I²C, просто измените букву n в прототипе подпрограммы на число от 0 до 9.
  • Количество модулей I²C на каждый MCU отличается от чипа до чипа. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.
  • For available working modes for a specific MCU please read the appropriate datasheet.

Stellaris

  • Обратитесь к приведенной ниже таблице для получения правильных значений скорости передачи битов в отношении системных часов:
    Системные часы Стандартный режим Быстрый режим Быстрый режим Plus Высокоскоростной режим
    4 MHz 100 Kbps - - -
    6 MHz 100 Kbps - - -
    12.5 MHz 89 Kbps 312 Kbps - -
    16.7 MHz 93 Kbps 278 Kbps - -
    20 MHz 100 Kbps 333 Kbps - -
    25 MHz 96.2 Kbps 312 Kbps - -
    33 MHz 97.1 Kbps 330 Kbps - -
    40 MHz 100 Kbps 400 Kbps 1000 Kbps 3.33 Mbps
    50 MHz 100 Kbps 357 Kbps 833 Kbps 2.77 Mbps
    80 MHz 100 Kbps 400 Kbps 1000 Kbps 3.33 Mbps

STM32


Периферийная входная тактовая частота должна быть не менее:

  • 2 MHz в стандартном режиме (100 Kbps)
  • 4 MHz в быстром режиме (400 Kbps)

I2Cn_Enable

Прототип

procedure I2Cn_Enable();

Описание

Эта процедура позволяет использовать блок I²C Master.

Эта процедура действительна только для устройств Stellaris.

Параметры

нет.

Возвращает

Ничего.

Требует

MCU с по меньшей мере одним модулем I²C.

Перед использованием этой функции необходимо инициализировать модуль I²C.См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример
// Включить главный блок I2C1
I2C1_Enable();
Примечания
  • В библиотечных программах I²C требуется указать модуль, который вы хотите использовать. Чтобы выбрать желаемый модуль I²C, просто измените букву n в прототипе подпрограммы на число от 0 до 9.
  • Количество модулей I²C на каждый MCU отличается от чипа до чипа. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.
  • Эта процедура действительна только для устройств Stellaris.

I2Cn_Disable

Прототип

procedure I2Cn_Disable();

Описание

Эта процедура отключает главный блок I²C.

Эта процедура действительна только для устройств Stellaris.

Параметры

нет.

Возвращает

Ничего.

Требует

MCU с по меньшей мере одним модулем I²C.

Перед использованием этой функции необходимо инициализировать модуль I²C.См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример
// Отключить главный блок I2C1
I2C1_Disable();
Примечания
  • В библиотечных программах I²C требуется указать модуль, который вы хотите использовать. Чтобы выбрать желаемый модуль I²C, просто измените букву n в прототипе подпрограммы на число от 0 до 9.
  • Количество модулей I²C на каждый MCU отличается от чипа до чипа. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.
  • Эта процедура действительна только для устройств Stellaris.

I2Cn_Start

Прототип

function I2Cn_Start() : word;

Описание

Определяет, свободен ли I²C-шина и выдает сигнал START.

Параметры

нет.

Возвращает

If there is no error, routine Возвращает 0.

Требует

MCU с по меньшей мере одним модулем I²C.

Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример
// Запустить модуль I2C1
I2C1_Start();
Примечания
  • В библиотечных программах I²C требуется указать модуль, который вы хотите использовать. Чтобы выбрать желаемый модуль I²C, просто измените букву n в прототипе подпрограммы на число от 0 до 9.
  • Количество модулей I²C на каждый MCU отличается от чипа до чипа. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.
  • Эта процедура действительна для устройств CEC1x02, ST и Kinetis.

I2Cn_Get_Status

Прототип

function I2Cn_Get_Status() : dword;

Описание

Эта процедура возвращает значения обоих регистров статуса I²C, SR1 и SR2, объединенных в одно 32-битное значение.

Параметры

нет.

Возвращает

Значения обоих регистров статуса I²C.

Требует

MCU с по меньшей мере одним модулем I²C.

Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример
// Получить статус для модуля I2C1
var stat : dword;

stat := I2C1_Get_Status();
Примечания
  • В библиотечных программах I²C требуется указать модуль, который вы хотите использовать. Чтобы выбрать желаемый модуль I²C, просто измените букву n в прототипе подпрограммы на число от 0 до 9.
  • Количество модулей I²C на каждый MCU отличается от чипа до чипа. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.
  • Эта процедура действительна для устройств ST, Kinetis и MSP432.

I2Cn_Is_Idle

Прототип

function I2Cn_Is_Idle() : word;

Описание

Тесты, если I²C-шина свободна.

Параметры

нет.

Возвращает

Возвращает 1 если I²C шина свободна, в противном случае возвращает 0.

Требует

MCU с по меньшей мере одним модулем I²C.

Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример
if (I2C1_Is_Idle() then
...
Примечания
  • В библиотечных программах I²C требуется указать модуль, который вы хотите использовать. Чтобы выбрать желаемый модуль I²C, просто измените букву n в прототипе подпрограммы на число от 0 до 9.
  • Количество модулей I²C на каждый MCU отличается от чипа до чипа. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.
  • This routine is valid only for ST, Kinetis and MSP432 devices.

I2Cn_Master_Slave_Addr_Set

Прототип

procedure I2Cn_Master_Slave_Addr_Set(slave_addr : byte; dir : byte);

Описание

Устанавливает адрес, который мастер I²C будет размещать на шине, т. е. подчиненный адрес.

Параметры
  • slave_addr: I²C подчиненный адрес.
  • dir: I²C Ведущее приемопередающее направление:
    Значение Описание
    _I2C_DIR_MASTER_RECEIVE Мастер принимает
    _I2C_DIR_MASTER_TRANSMIT Мастер передает
Возвращает

Ничего.

Требует

MCU с по меньшей мере одним модулем I²C.

Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример
// Указать адрес, который будет использоваться Мастером для передачи данных в
I2C1_Master_Slave_Addr_Set(0x0A, _I2C_DIR_MASTER_TRANSMIT);
Примечания
  • В библиотечных программах I²C требуется указать модуль, который вы хотите использовать. Чтобы выбрать желаемый модуль I²C, просто измените букву n в прототипе подпрограммы на число от 0 до 9.
  • Количество модулей I²C на каждый MCU отличается от чипа до чипа. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.
  • Эта процедура действительна только для устройств Stellaris.
  • Адрес устройства сдвигается влево на одно место в библиотеке, а бит R / W добавляется автоматически.

I2Cn_Master_Bus_Busy

Прототип

function I2Cn_Master_Bus_Busy() : byte;

Описание

Указывает, занята ли шина I²C.

Параметры

нет.

Возвращает
  • 1 - Если I2C щина занята,
  • 0 - в противном случае.
Требует

MCU с по меньшей мере одним модулем I²C.

Перед использованием этой функции необходимо инициализировать модуль I²C.См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример
// Если I2C щина свободна :
if (I2C1_Master_Bus_Busy = 0) then
...
Примечания
  • В библиотечных программах I²C требуется указать модуль, который вы хотите использовать. Чтобы выбрать желаемый модуль I²C, просто измените букву n в прототипе подпрограммы на число от 0 до 9.
  • Количество модулей I²C на каждый MCU отличается от чипа до чипа. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.
  • Эта процедура действительна только для устройств Stellaris.

I2Cn_Master_Busy

Прототип

function I2Cn_Master_Busy() : byte;

Описание

Указывает, занят ли I²C Master.

Параметры

нет.

Возвращает
  • 1 - если I²C Master занят,
  • 0 - в противном случае.
Требует

MCU с по меньшей мере одним модулем I²C.

Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример
// Если I2C Master свободен :
if (I2C1_Master__Busy = 0) then
...
Примечания
  • В библиотечных программах I²C требуется указать модуль, который вы хотите использовать. Чтобы выбрать желаемый модуль I²C, просто измените букву n в прототипе подпрограммы на число от 0 до 9.
  • Количество модулей I²C на каждый MCU отличается от чипа до чипа. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.
  • Эта процедура действительна только для устройств Stellaris.

I2Cn_Read

Прототип // для MCU Stellaris :

function I2Cn_Read(var dat : byte; mode : byte) : byte;

// для CEC1x02, ST, Kinetis и MSP432 MCUs :

procedure I2Cn_Read(slave_address : byte; ptrdata : ^byte; count : dword; END_mode: dword);

Описание

Получает байт с шины I²C.

Параметры

Stellaris

  • dat: полученные данные.
  • mode: режим. Доступные режимы :
    Значение Описание
    _I2C_MASTER_MODE_SINGLE_RECEIVE Получение одного байта
    _I2C_MASTER_MODE_BURST_RECEIVE_START Начните получать пакет данных (используется при получении первого байта пакета данных).
    _I2C_MASTER_MODE_BURST_RECEIVE_CONT Продолжить получение пакета данных (используется при получении байтов данных, отличных от первого и последнего).
    _I2C_MASTER_MODE_BURST_RECEIVE_FINISH Конец приема пакета данных (используется при получении последнего байта пакета данных).

CEC1x02, STM32 и Kinetis

  • slave_address: подчиненный адрес.
  • ptrdata: указатель на полученные данные.
  • count: количество принимаемых байтов.
  • END_mode: режим, в котором модуль I²C будет установлен после считывания. Доступные режимы:
    Значение Описание
    END_MODE_RESTART Шина I²C выдает перезапуск.
    END_MODE_STOP Шина I²C выдает остановку.
Возвращает
  • 0 если нет ошибок
  • 1 если обнаружена коллизия на шине I²C.
Требует
  • MCU с по меньшей мере одним модулем I²C.
  • Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры.
Пример

Stellaris

I2C0_Master_Slave_Addr_Set(0x50, _I2C_DIR_MASTER_RECEIVE); // установить подчиненный адрес и операцию чтения
I2C0_Read(res, _I2C_MASTER_MODE_SINGLE_RECEIVE);       // выпуск I2C и чтение байта.

CEC1x02, STM32, MSP432 and Kinetis

I2C1_Read(0x50, data_, num_bytes, END_MODE_STOP);          // получить num_bytes, сохранить его в data_ и выдать условие остановки.
Примечания
  • В библиотечных программах I²C требуется указать модуль, который вы хотите использовать. Чтобы выбрать желаемый модуль I²C, просто измените букву n в прототипе подпрограммы на число от 0 до 9.
  • Количество модулей I²C на каждый MCU отличается от чипа до чипа. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.

I2Cn_Write

Прототип // для MCU Stellaris :

function I2Cn_Write(dat : byte; mode : byte) : byte;

// для CEC1x02, ST, MSP432 и Kinetis MCUs :

function I2Cn_Write(slave_address : byte; ptrdata : ^byte; count : dword; END_mode: dword) : word;

Описание

Отправляет байт данных через шину I²C.

Параметры

Stellaris

  • dat: передаваемые данные.
  • mode: режим. Доступные режимы :
    Значение Описание
    _I2C_MASTER_MODE_SINGLE_SEND Передача по одному байту.
    _I2C_MASTER_MODE_BURST_SEND_START Начать передачу пакета данных (используется при передаче первого байта пакета данных).
    _I2C_MASTER_MODE_BURST_SEND_CONT Продолжить передачу пакета данных (используется при передаче байтов данных, отличных от первого и последнего).
    _I2C_MASTER_MODE_BURST_SEND_FINISH Конец передачи пакета данных (используется при передаче последнего байта пакета данных).

CEC1x02, STM32, MSP432 и Kinetis

  • slave_address: подчиненный адрес.
  • buf: указатель на передаваемые данные.
  • count: количество передаваемых байтов.
  • END_mode:режим, в котором модуль I²C будет установлен после записи. Доступные режимы:
    Значение Описание
    END_MODE_RESTART Шина I²C выдает перезапуск.
    END_MODE_STOP Шина I²C выдает остановку.
Возвращает
  • 0 если нет ошибок
  • 1 если обнаружена коллизия на шине I²C.
Требует

MCU с по меньшей мере одним модулем I²C.

Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример

Stellaris

I2C0_Master_Slave_Addr_Set(0x50, _I2C_DIR_MASTER_TRANSMIT); // установить подчиненный адрес и операцию записи
I2C0_Write(rAddr, _I2C_MASTER_MODE_SINGLE_SEND);    // запуск I2C и отправку байта (адрес места EEPROM)

CEC1x02, STM32, MSP432 and Kinetis

I2C1_Write(0x50, data_, num_bytes, END_MODE_STOP);          // записываем num_bytes, хранящиеся в data_, и выпустите условие остановки.
Примечания
  • В библиотечных программах I²C требуется указать модуль, который вы хотите использовать. Чтобы выбрать желаемый модуль I²C, просто измените букву n в прототипе подпрограммы на число от 0 до 9.
  • Количество модулей I²C на каждый MCU отличается от чипа до чипа. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.
  • CEC1x02 and ST Specific: Адрес устройства сдвигается влево на одно место в библиотеке, а бит R / W добавляется автоматически.

I2Cn_SetTimeoutCallback

Прототип

procedure I2Cn_SetTimeoutCallback(timeout : dword; timeoutCallback_ptr : ^TI2C_Timeout_Ptr);

Описание

Эта функция проверяет условие ожидания I²C в определенный пользователем период времени, после чего оно переходит к функции обратного вызова, если это условие выполнено.
Различные операции I²C могут вызвать таймаут (чтение, запись и т. Д.), Чтобы пользователь мог проверить, какой из них вызвал его, как в приведенном ниже примере.

Параметры
  • timeout:Представляет несколько циклов while, в которых проверяется время ожидания I²C.
  • I2C_timeout:указатель на функцию обратного вызова. Функция обратного вызова должна быть записана в соответствии с этим прототипом функции:
    procedure I2C1_TimeoutCallback(errorCode : byte)
    begin
    ...
    end;	
    
Возвращает

Ничего.

Требует

Перед использованием этой функции необходимо настроить I²C. См. I2Cn_Init или I2Cn_Init_Advanced.

Пример
// определить функцию обратного вызова
procedure I2C1_TimeoutCallback(errorCode : byte)
begin
   if (errorCode = _I2C_TIMEOUT_RD) then
   begin
     // делать что-то, если во время чтения
   end
   
   if (errorCode = _I2C_TIMEOUT_WR) then
   begin   
     // делать что-то, если во время записи
   end

   if (errorCode = _I2C_TIMEOUT_WAIT_FOR_IDLE) then
   begin   
     // делать что-то, если тайм-аут вызван во время ожидания простоя
   end

   if (errorCode = _I2C_TIMEOUT_IDLE) then
   begin   
     // делать что-то, если тайм-аут вызван во время простоя
   end
   
   if (errorCode = _I2C_TIMEOUT_STOP) then
   begin   
     // делать что-то, если во время остановки
   end
   
   if (errorCode = _I2C_TIMEOUT_START) then
   begin
     // делать что-то, если во время запуска            
   end

   if (errorCode = _I2C_TIMEOUT_INIT) then
   begin
     // делать что-то, если во время инициализации            
   end
end;

// инициализировать модуль I2C
I2C1_Init(100000);

// установить период ожидания и функцию обратного вызова
I2C1_SetTimeoutCallback(1000, @I2C1_TimeoutCallback);
Примечания
  • В библиотечных программах I²C требуется указать модуль, который вы хотите использовать. Чтобы выбрать желаемый модуль I²C, просто измените букву n в прототипе подпрограммы на число от 0 до 3.
  • Количество модулей I²C на каждый MCU отличается от чипа до чипа. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.

I2C_Set_Active

Прототип // для MCU Stellaris :

procedure I2C_Set_Active(enable_ptr: ^TI2C_Enable_Ptr; master_slave_addr_set_ptr: ^TI2C_Master_Slave_Addr_Set_Ptr; write_ptr: ^TI2C_Write_Ptr; read_ptr: ^TI2C_Read_Ptr; disable_ptr: ^TI2C_Disable_Ptr);

// для MSP432 MCUs :

procedure I2C_Set_Active(read_ptr : ^TI2C_Read_Ptr; write_ptr : ^TI2C_Write_Ptr);

// для CEC1x02, ST и Kinetis MCUs :

procedure I2C_Set_Active(start_ptr : ^TI2C_Start_Ptr; read_ptr : ^TI2C_Read_Ptr; write_ptr : ^TI2C_Write_Ptr);

Описание

Устанавливает активный модуль I²C, который будет использоваться подпрограммами I²C.

Параметры

Stellaris

MSP432

STM32, CEC1x02 and Kinetis

Возвращает

Ничего.

Требует

Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример

Stellaris

I2C_Set_Active(@I2C1_Enable, @I2C1_Master_Slave_Addr_Set, @I2C1_Write, @I2C1_Read, @I2C1_Disable); // Устанавливает модуль I2C1 активным

MSP432

I2C_Set_Active(@I2C1_Read, @I2C1_Write); // Устанавливает модуль I2C1 активным

STM32, CEC1x02 and Kinetis

I2C_Set_Active(@I2C1_Start, @I2C1_Read, @I2C1_Write); // Устанавливает модуль I2C1 активным
Примечания

Количество модулей I²C на каждый MCU отличается от чипа до чипа. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.

I2C_Enable

Прототип

procedure I2C_Enable();

Описание

Эта процедура позволяет использовать блок I²C Master.

Это общая процедура, которая использует активный модуль I²C, ранее активированный подпрограммой I2C_Set_Active.

Параметры

нет.

Возвращает

Ничего.

Требует

MCU с по меньшей мере одним модулем I²C.

Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример
I2C_Set_Active(@I2C1_Enable, @I2C1_Master_Slave_Addr_Set, @I2C1_Read, @I2C1_Write, @I2C1_Disable); // Sets the I2C1 module active
...
// Включить главный блок I2C1
I2C_Enable();
Примечания
  • Эта процедура действительна только для устройств Stellaris.

I2C_Disable

Прототип

procedure I2C_Disable();

Описание

Эта процедура отключает главный блок I²C.

Это общая процедура, которая использует активный модуль I²C, ранее активированный подпрограммой I2C_Set_Active.

Параметры

нет.

Возвращает

Ничего.

Требует

MCU с по меньшей мере одним модулем I²C.

Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример
I2C_Set_Active(@I2C1_Enable, @I2C1_Master_Slave_Addr_Set, @I2C1_Read, @I2C1_Write, @I2C1_Disable); // Устанавливает модуль I2C1 активным
...
// Отключить главный блок I2C1
I2C_Disable();
Примечания
  • Эта процедура действительна только для устройств Stellaris.

I2C_Start

Прототип

function I2C_Start() : word;

Описание

Определяет, свободна ли I²C-шина и выдает сигнал START.

Это общая процедура, которая использует активный модуль I²C, ранее активированный подпрограммой I2C_Set_Active.

Параметры

нет.

Возвращает

Если ошибок нет, процедура возвращает 0.

Требует

MCU с по меньшей мере одним модулем I²C.

Перед использованием этой функции необходимо инициализировать модуль I²C.См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример
I2C_Set_Active(@I2C1_Start, @I2C1_Read, @I2C1_Write); // Sets the I2C1 module active
...
// Start I2C1 module
error := I2C_Start();
Примечания
  • Эта процедура действительна для устройств CEC1x02, ST и Kinetis.

I2C_Master_Slave_Addr_Set

Прототип

procedure I2C_Master_Slave_Addr_Set(slave_addr : byte; dir : byte);

Описание

Устанавливает адрес, который мастер I²C будет размещать на шине, т. е. подчиненный адрес.

Это общая процедура, которая использует активный модуль I²C, ранее активированный подпрограммой I2C_Set_Active.

Параметры
  • slave_addr: I²C подчиненный адрес.
  • dir: I²C приемопередающее направление Мастера:
    Значение Описание
    _I2C_DIR_MASTER_RECEIVE Мастер принимает
    _I2C_DIR_MASTER_TRANSMIT Мастер передает
Возвращает

Ничего.

Требует

MCU с по меньшей мере одним модулем I²C.

Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример
I2C_Set_Active(@I2C1_Enable, @I2C1_Master_Slave_Addr_Set, @I2C1_Read, @I2C1_Write, @I2C1_Disable); // Устанавливает модуль I2C1 активным
...
// Укажите адрес, который будет использоваться Мастером для передачи данных в
I2C_Master_Slave_Addr_Set(0x0A, _I2C_DIR_MASTER_TRANSMIT);
Примечания
  • Эта процедура действительна только для устройств Stellaris.
  • Адрес устройства сдвигается влево на одно место в библиотеке, а бит R / W добавляется автоматически.

I2C_Read

Прототип // для MCU Stellaris :

function I2C_Read(var dat : byte; mode : byte) : byte;

// для CEC1x02, ST, MSP432 и Kinetis MCUs :

procedure I2C_Read(slave_address : byte; ptrdata : ^byte; count : dword; END_mode: dword);

Описание

Получает байт с шины I²C.

Это общая процедура, которая использует активный модуль I²C, ранее активированный подпрограммой I2C_Set_Active.

Параметры

Stellaris

  • dat: полученные данные.
  • mode: режим. Доступные режимы :
    Значение Описание
    _I2C_MASTER_MODE_SINGLE_RECEIVE Single byte receive.
    _I2C_MASTER_MODE_BURST_RECEIVE_START Start receiving burst of data (used when receiving first byte of data burst).
    _I2C_MASTER_MODE_BURST_RECEIVE_CONT Continue receiving burst of data (used when receiving data burst bytes other than first and last).
    _I2C_MASTER_MODE_BURST_RECEIVE_FINISH End of data burst reception (used when receiving last byte of data burst).

CEC1x02, STM32, MSP432 и Kinetis

  • slave_address: подчиненный адрес.
  • ptrdata: указатель на полученные данные.
  • count: количество принимаемых байтов.
  • END_mode: режим, в котором модуль I²C будет установлен после считывания. Доступные режимы :
    Значение Описание
    END_MODE_RESTART Шина I²C выдает перезапуск.
    END_MODE_STOP Шина I²C выдает остановку.
Возвращает
  • 0 если нет ошибок
  • 1 если обнаружена коллизия на шине I²C.
Требует
  • MCU с по меньшей мере одним модулем I²C.
  • Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры.
Пример

Stellaris

I2C_Set_Active(@I2C1_Enable, @I2C1_Master_Slave_Addr_Set, @I2C1_Read, @I2C1_Write, @I2C1_Disable); // Устанавливает модуль I2C1 активным
...
I2C_Read(res, _I2C_MASTER_MODE_SINGLE_RECEIVE);       // выпуск I2C и чтение байта.

CEC1x02, STM32, MSP432 и Kinetis

I2C_Set_Active(@I2C1_Start, @I2C1_Read, @I2C1_Write); // Устанавливает модуль I2C1 активным
...
I2C_Read(0x50, data_, num_bytes, END_MODE_STOP);          // получить num_bytes, сохранить его в data_ и выдать условие остановки .
Примечания
  • CEC1x02 и ST специфика: Адрес устройства сдвигается влево на одно место в библиотеке, а бит R / W добавляется автоматически.

I2C_Write

Прототип // для MCU Stellaris :

function I2C_Write(dat : byte; mode : byte) : byte;

// для CEC1x02, ST, MSP432 и Kinetis MCUs :

function I2C_Write(slave_address : byte; ptrdata : ^byte; count : dword; END_mode: dword) : word;

Описание

Отправляет байт данных через шину I²C.

Это общая процедура, которая использует активный модуль I²C, ранее активированный подпрограммой I2C_Set_Active.

Параметры

Stellaris

  • dat: передаваемые данные.
  • mode: режим. Доступные режимы :
    Значение Описание
    _I2C_MASTER_MODE_SINGLE_SEND Передача по одному байту.
    _I2C_MASTER_MODE_BURST_SEND_START Начать передачу пакета данных (используется при передаче первого байта пакета данных).
    _I2C_MASTER_MODE_BURST_SEND_CONT Продолжить передачу пакета данных (используется при передаче байтов данных, отличных от первого и последнего).
    _I2C_MASTER_MODE_BURST_SEND_FINISH Конец передачи пакета данных (используется при передаче последнего байта пакета данных).

CEC1x02, STM32, MSP432 and Kinetis

  • slave_address: подчиненный адрес.
  • buf: указатель на передаваемые данные.
  • count: количество передаваемых байтов.
  • END_mode:режим, в котором модуль I²C будет установлен после записи. Доступные режимы:
    Значение Описание
    END_MODE_RESTART Шина I²C выдает перезапуск.
    END_MODE_STOP Шина I²C выдает остановку.
Возвращает
  • 0 если нет ошибок
  • 1 если обнаружена коллизия на шине I²C.
Требует

MCU с по меньшей мере одним модулем I²C.

Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры.

Пример

Stellaris

I2C_Set_Active(@I2C1_Start, @I2C1_Read, @I2C1_Write); // Устанавливает модуль I2C1 активным
...
I2C_Write(rAddr, _I2C_MASTER_MODE_SINGLE_SEND);    // запуск I2C и отправку байта (адрес места EEPROM)

CEC1x02, STM32, MSP432 and Kinetis

I2C_Set_Active(@I2C1_Start, @I2C1_Read, @I2C1_Write); // Устанавливает модуль I2C1 активным
...
I2C_Write(0x50, data_, num_bytes, END_MODE_STOP);          // Записать num_bytes, хранящиеся в data_, и инициировать условие остановки.
Примечания
  • Специфика CEC1x02 и ST: Адрес устройства сдвигается влево на одно место в библиотеке, а бит R / W добавляется автоматически.