скорости и текущую команду. А в OutBuff показания датчиков и, например, показания с
АЦП висящем на блоке аккумуляторов. И при обмене данными с головным контроллером
он сливает ему OutBuff, а от него принимает InBuff
•
i2c_Buffer– Это выходной буфер мастера. Если наш контроллер в качестве мастера
ломанется куда-нибудь, то он сюда загрузит всю необходимую инфу и пнет ее слейву.
•
i2c_ByteCount — важный параметр. Число передаваемых байт мастером. Можно сделать
константой (проще, но не гибче) я сделал переменной, чтобы гонять данные туды сюды.
•
i2c_SlaveAddress — Адрес подчиненного. То куда мы будем обращаться в режиме мастера.
•
i2c_PageAddress — Буфер адреса страниц. Если вы помните режим обмена со всякими
ЕЕПРОМ, то для чтения произвольного байта мы должны сначала записать в ЕЕПРОМ
адрес этого байта, потом, вызвав ReStart считать данные. Вот тут у нас буфер где хранится
адрес страницы для чтения ЕЕПРОМ. Сделан он буфером для универсальности. Т.к. у
некоторых ЕЕПРОМ адрес страницы двухбайтный, а у некоторых однобайтный. Более того,
есть куча устройств которые выглядят с точки зрения мастера как EEPROM, но не являются
ими. Например часы RTC или цифровые акселерометры. У них, обычно, адрес страницы
однобайтный.
•
i2c_PageAddrCount — Число байт в адресе страницы для текущего Slave
Указатели выхода из автомата. У меня выход из автомата сделан на функцию, адрес
которой передается при вызове Master обмена или при включении Slave ожидания. Их три
вида.
•
IIC_F MasterOutFunc — выход из автомата для мастера
•
IIC_F ErrorOutFunc — выход из автомата в резултате ошибки в режиме Master
•
IIC_F SlaveOutFunc — выход из автомата в режиме Slave
Обычно я первые два обьединяю под одну функцию, а там уже проверяю на ошибки. Но,
для оптимальности, можно и разделить их. Причем сам выход записан в исходнике в
форме макроса. Что позволяет, не лазая в дебрях автомата подправить в хидере этот
макрос на что угодно. Например, на выставление флажка, если у вас не диспетчер, а
флаговый автомат.
Режимы
•
i2c_sarp (Start-Addr_R-Read-Stop) Это режим простого чтения. Например из слейва или из
епрома с текущего адреса
•
i2c_sawp (Start-Addr_W-Write-Stop) Это режим простой записи. В том числе и запись с
адресом страницы.
•
i2c_sawsarp ( Start-Addr_W-WrPageAdr-rStart-Addr_R-Read-Stop) Это режим с
предварительной записью текущего адреса страницы. Например, через нее из EEPROM
читают данные.
Коды ошибок
•
i2c_Err_NO All Right! — Все окей, передача успешна.
•
i2c_ERR_NA — Device No Answer Слейв не отвечает. Т.к. либо занят, либо его нет на линии.
•
i2c_ERR_LP — Low Priority нас перехватили собственным адресом, либо мы проиграли
арбитраж
•
i2c_ERR_NK — Received NACK. End Transmittion. Был получен NACK. Бывает и так.
•
i2c_ERR_BF — BUS FAIL Автобус сломался. И этим все сказано. Можно попробовать сделать
переинициализацию шины
Также есть флаги состояний