Да, какая то фигня с личными сообщениями, хотя в настройках стоит, что разрешены, тоже ничего не могу отправлять. А помощь на сайте вообще не работает)
(( Попытался на почту вопрос задать, но не пойму дошел ли он или нет.
При использовании библиотеки возникают проблемы с чтением BTF.
Может я чего то упустил при инициализации? Моя последовательность действий.
Код
...
Init_I2C(1, 100000);// Реально все инициализируется. Пробовал стандартными функциями отправлять - работает, но при работе //с прерываниями все равно виснет
DWT_Init();// счетчик ядра - крутая вещь!
...
u8_t ReadReg(u8_t deviceAddr, u8_t Reg, u8_t* Data) {
unsigned char buffer[2+1];
unsigned int result;
buffer[0] = deviceAddr;
buffer[1] = Reg;
buffer[2] = 0;
result = ReadW_I2C(1, buffer, 1, 1);
if(result != 1)
return MEMS_ERROR;
else {
Data = &buffer[2];
return MEMS_SUCCESS;
}
}
...
Заходит в обрабоку прерывания
Код
// ATTENTION! - since 03.11.11. does not work without the simple
// case I2C_EVENT_MASTER_BYTE_TRANSMITTING below as if
// I2C_EVENT_MASTER_BYTE_TRANSMITTING occures sometimes
// before I2C_EVENT_MASTER_BYTE_TRANSMITTED.
// Possible reasons (due to the following changes):
// 1). Interrupt priority of I2C has been changed to the highest one;
// 2). The I2C speed has been reduced down to 100kHz from 400kHz,
// the driver has been tested before.
//
case I2C_EVENT_MASTER_BYTE_TRANSMITTING: // Data being SENT; TRA, BSY, MSL and
{ // TxE but BTF are set.
uint8_t ex = 0;
int32_t tp = I2C_SBTimeoutInit(port, 2*BITS_ONE_BYTE); // Two I2C bytes to wait
while (!I2C_BTF(i2c) &&
!(ex = I2C_SBTimeoutExpired(&tp))); // Wait for BTF! It MUST arrive else
// it were a severe hardware error...
if (ex) // BTF still off: expired!
{
I2C_ERROR_HANDLER(port, ctrl->code = ctrl->evnt);
break;
}
Не Возвращает BTF. По таймауту переходит в I2C_ERROR_HANDLER
Никто не пробовал работать с данными функциями? Видно, что напсано все очень грамотно, учтены все косяки. Прочитал, что на адрес не приходит BTF. Получается здесь как раз обращение к адресу устройства и к его внутренему регистру. Может он и не должен приходить?
Был бы благодарен за помощь!