I²C Library
Модуль I²C с полным набором I²C функуий доступен с несколькими моделями ARM MCU. MikroPascal PRO для ARM предоставляет библиотеку, которая поддерживает режим ведущего I²C.
- I²C библиотечные процедуры требуют от вас указания модуля, который вы хотите использовать. Для выбора желаемого I²C модуля, просто замеите символ n в процедуре на соответственный номер. Значения могут варьироваться от 0 до 9.
- Количество I²C модулей на MCU различно от микросхемы к микросхеме. Перед использованием этой библиотеки ознакомьтесь с соответствующей таблицей данных.
- Библиотечные процедурные прототипы могут варьироваться от семейсва к семейству, поэтому, пожалуйста, обращайте внимание на желаемую процедурную секцию.
Процедуры библиотеки
- I2Cn_Init
- I2Cn_Init_Advanced
- I2Cn_Enable
- I2Cn_Disable
- I2Cn_Start
- I2Cn_Get_Status
- I2Cn_Is_Idle
- I2Cn_Master_Slave_Addr_Set
- I2Cn_Master_Bus_Busy
- I2Cn_Master_Busy
- I2Cn_Read
- I2Cn_Write
- I2Cn_SetTimeoutCallback
- I2C_Set_Active
Общие процедуры
I2Cn_Init
Прототип |
procedure I2Cn_Init(); |
||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Описание |
Эта функция настраивает и инициализирует желаемый модуль I²C со стандартным битрейтом 100 кбит / с. |
||||||||||||||||||||||
Параметры |
нет. |
||||||||||||||||||||||
Возвращает |
Ничего. |
||||||||||||||||||||||
Требует |
MCU с модулем I²C. |
||||||||||||||||||||||
Пример |
// Инициализировать модуль I2C1 со стандартным битрейтом 100000
I2C1_Init();
|
||||||||||||||||||||||
Примечания |
|
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
MSP432
STM32
CEC1x02
Kinetis
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
Возвращает |
Ничего. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
Требует |
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);
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
Примечания |
Stellaris
STM32Периферийная входная тактовая частота должна быть не менее:
|
I2Cn_Enable
Прототип |
procedure I2Cn_Enable(); |
---|---|
Описание |
Эта процедура позволяет использовать блок I²C Master. Эта процедура действительна только для устройств Stellaris. |
Параметры |
нет. |
Возвращает |
Ничего. |
Требует |
MCU с по меньшей мере одним модулем I²C. Перед использованием этой функции необходимо инициализировать модуль I²C.См. I2Cn_Init и I2Cn_Init_Advanced процедуры. |
Пример |
// Включить главный блок I2C1
I2C1_Enable();
|
Примечания |
|
I2Cn_Disable
Прототип |
procedure I2Cn_Disable(); |
---|---|
Описание |
Эта процедура отключает главный блок I²C. Эта процедура действительна только для устройств Stellaris. |
Параметры |
нет. |
Возвращает |
Ничего. |
Требует |
MCU с по меньшей мере одним модулем I²C. Перед использованием этой функции необходимо инициализировать модуль I²C.См. I2Cn_Init и I2Cn_Init_Advanced процедуры. |
Пример |
// Отключить главный блок I2C1
I2C1_Disable();
|
Примечания |
|
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();
|
Примечания |
|
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();
|
Примечания |
|
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 ... |
Примечания |
|
I2Cn_Master_Slave_Addr_Set
Прототип |
procedure I2Cn_Master_Slave_Addr_Set(slave_addr : byte; dir : byte); |
||||||
---|---|---|---|---|---|---|---|
Описание |
Устанавливает адрес, который мастер I²C будет размещать на шине, т. е. подчиненный адрес. |
||||||
Параметры |
|
||||||
Возвращает |
Ничего. |
||||||
Требует |
MCU с по меньшей мере одним модулем I²C. Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры. |
||||||
Пример |
// Указать адрес, который будет использоваться Мастером для передачи данных в
I2C1_Master_Slave_Addr_Set(0x0A, _I2C_DIR_MASTER_TRANSMIT);
|
||||||
Примечания |
|
I2Cn_Master_Bus_Busy
Прототип |
function I2Cn_Master_Bus_Busy() : byte; |
---|---|
Описание |
Указывает, занята ли шина I²C. |
Параметры |
нет. |
Возвращает |
|
Требует |
MCU с по меньшей мере одним модулем I²C. Перед использованием этой функции необходимо инициализировать модуль I²C.См. I2Cn_Init и I2Cn_Init_Advanced процедуры. |
Пример |
// Если I2C щина свободна : if (I2C1_Master_Bus_Busy = 0) then ... |
Примечания |
|
I2Cn_Master_Busy
Прототип |
function I2Cn_Master_Busy() : byte; |
---|---|
Описание |
Указывает, занят ли I²C Master. |
Параметры |
нет. |
Возвращает |
|
Требует |
MCU с по меньшей мере одним модулем I²C. Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры. |
Пример |
// Если I2C Master свободен : if (I2C1_Master__Busy = 0) then ... |
Примечания |
|
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
CEC1x02, STM32 и Kinetis
|
||||||||||||||||
Возвращает |
|
||||||||||||||||
Требует |
|
||||||||||||||||
Пример |
StellarisI2C0_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_ и выдать условие остановки.
|
||||||||||||||||
Примечания |
|
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
CEC1x02, STM32, MSP432 и Kinetis
|
||||||||||||||||
Возвращает |
|
||||||||||||||||
Требует |
MCU с по меньшей мере одним модулем I²C. Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры. |
||||||||||||||||
Пример |
StellarisI2C0_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_, и выпустите условие остановки.
|
||||||||||||||||
Примечания |
|
I2Cn_SetTimeoutCallback
Прототип |
procedure I2Cn_SetTimeoutCallback(timeout : dword; timeoutCallback_ptr : ^TI2C_Timeout_Ptr); |
---|---|
Описание |
Эта функция проверяет условие ожидания I²C в определенный пользователем период времени, после чего оно переходит к функции обратного вызова, если это условие выполнено. |
Параметры |
|
Возвращает |
Ничего. |
Требует |
Перед использованием этой функции необходимо настроить 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); |
Примечания |
|
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();
|
Примечания |
|
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(); |
Примечания |
|
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(); |
Примечания |
|
I2C_Master_Slave_Addr_Set
Прототип |
procedure I2C_Master_Slave_Addr_Set(slave_addr : byte; dir : byte); |
||||||
---|---|---|---|---|---|---|---|
Описание |
Устанавливает адрес, который мастер 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 активным ... // Укажите адрес, который будет использоваться Мастером для передачи данных в I2C_Master_Slave_Addr_Set(0x0A, _I2C_DIR_MASTER_TRANSMIT); |
||||||
Примечания |
|
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
CEC1x02, STM32, MSP432 и Kinetis
|
||||||||||||||||
Возвращает |
|
||||||||||||||||
Требует |
|
||||||||||||||||
Пример |
StellarisI2C_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 и KinetisI2C_Set_Active(@I2C1_Start, @I2C1_Read, @I2C1_Write); // Устанавливает модуль I2C1 активным ... I2C_Read(0x50, data_, num_bytes, END_MODE_STOP); // получить num_bytes, сохранить его в data_ и выдать условие остановки . |
||||||||||||||||
Примечания |
|
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
CEC1x02, STM32, MSP432 and Kinetis
|
||||||||||||||||
Возвращает |
|
||||||||||||||||
Требует |
MCU с по меньшей мере одним модулем I²C. Перед использованием этой функции необходимо инициализировать модуль I²C. См. I2Cn_Init и I2Cn_Init_Advanced процедуры. |
||||||||||||||||
Пример |
StellarisI2C_Set_Active(@I2C1_Start, @I2C1_Read, @I2C1_Write); // Устанавливает модуль I2C1 активным ... I2C_Write(rAddr, _I2C_MASTER_MODE_SINGLE_SEND); // запуск I2C и отправку байта (адрес места EEPROM) CEC1x02, STM32, MSP432 and KinetisI2C_Set_Active(@I2C1_Start, @I2C1_Read, @I2C1_Write); // Устанавливает модуль I2C1 активным ... I2C_Write(0x50, data_, num_bytes, END_MODE_STOP); // Записать num_bytes, хранящиеся в data_, и инициировать условие остановки. |
||||||||||||||||
Примечания |
|