реклама на сайте
подробности

 
 
> STM32 Вопрос про I2C, непонимаю даташит или что-то не то
Vladimir Prokofi...
сообщение Aug 25 2011, 10:22
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 9-03-11
Пользователь №: 63 481



Пытаюсь послать два байта слейву по I2C:
1. Выставляем СТАРТ
2. Получаем в прерывании что старт прошел (Событие 5 ) I2C_EVENT_MASTER_MODE_SELECT:
Шлем 7битный адрес слейва по этому прерыванию
3. Получаем прерывание что отослан адрес. Игнорируем, так как должно сразу придти прерывание TxE
4. По прерыванию о пустоте буфера ( События 8 и 8_2 )
case I2C_EVENT_MASTER_BYTE_TRANSMITTING:
case I2C_EVENT_MASTER_BYTE_TRANSMITTED:
Если первый раз пришло, то шлем БАЙТ1.
Если второй раз пришло, то шлем БАЙТ2.
Если третий раз пришло то:


Вот тут хочется послать стоп. Но это прерывание пришло так как TxE = 1. Реально байт еще не ушел. Когда он уйдет, то, судя по эрате, должен выставиться битик BTF. Поэтому я считаю что его надо ждать. Я бы написал так:
Если третий раз пришло то:
Если BTF == 1 то шлем СТОП
Но этот бит не устанавливается. Прерывания приходят и приходят, БТФ = 0. Почему?


В принципе в эрате написано что СТОП следует выставлять когдв либо TxE = 1 либо BTF = 1;
Если я пошлю СТОП когда TxE = 1 а BTF = 0 то не получится ли так, что СТОП оборвет последний байт?

PS

И непонятно еще такая штука, у меня сложилось понимание, что:
когда срабатывает прерывание TxE, байт начинает слаться. Если ничего не кинуть в буфер, то прерывание не сбросится, и будет постоянно вызываться, пока не установится бит BTF?
Т.е. контроллер будет ждать пока уйдет последний байт в любом случае...


Сообщение отредактировал Vladimir Prokofiev - Aug 25 2011, 10:31
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dfyz.s
сообщение Feb 8 2013, 17:10
Сообщение #2





Группа: Участник
Сообщений: 13
Регистрация: 10-01-11
Пользователь №: 62 132



Да, какая то фигня с личными сообщениями, хотя в настройках стоит, что разрешены, тоже ничего не могу отправлять. А помощь на сайте вообще не работает)
(( Попытался на почту вопрос задать, но не пойму дошел ли он или нет.

При использовании библиотеки возникают проблемы с чтением 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. Получается здесь как раз обращение к адресу устройства и к его внутренему регистру. Может он и не должен приходить?

Был бы благодарен за помощь!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Vladimir Prokofiev   STM32 Вопрос про I2C   Aug 25 2011, 10:22
- - DmitryDI   Ну и как получилось завести I2C? Может есть вариан...   Aug 25 2011, 14:14
|- - Vladimir Prokofiev   Цитата(DmitryDI @ Aug 25 2011, 18:14) Ну ...   Aug 25 2011, 15:22
|- - KnightIgor   Цитата(Vladimir Prokofiev @ Aug 25 2011, 17...   Aug 29 2011, 08:59
|- - Vladimir Prokofiev   Цитата(KnightIgor @ Aug 29 2011, 12:59) I...   Aug 29 2011, 11:19
|- - KnightIgor   Цитата(Vladimir Prokofiev @ Aug 29 2011, 13...   Aug 29 2011, 12:15
|- - Vladimir Prokofiev   Большое спасибо! Скачал, пошел смотреть!   Aug 30 2011, 08:31
|- - Vladimir Prokofiev   Вроде заработало, но, кажется, основная ошибка был...   Aug 30 2011, 15:25
|- - KnightIgor   Цитата(Vladimir Prokofiev @ Aug 30 2011, 17...   Aug 30 2011, 16:49
|- - Vladimir Prokofiev   Уже считал что все получилось, но тут опять столкн...   Sep 15 2011, 10:47
- - dfyz.s   Здравствуйте! Сейчас разбираюсь с похожей проб...   Feb 5 2013, 18:28
|- - KnightIgor   Цитата(dfyz.s @ Feb 5 2013, 19:28) Сейчас...   Feb 5 2013, 21:41
- - dfyz.s   Большое спасибо за подробное описание! Не могл...   Feb 6 2013, 05:40
|- - KnightIgor   Цитата(dfyz.s @ Feb 6 2013, 06:40) Не мог...   Feb 6 2013, 12:05
|- - KnightIgor   Цитата(dfyz.s @ Feb 6 2013, 06:40) Большо...   Feb 6 2013, 20:20
- - polyname   Непонятно что они курили когда разрабатывали I2C ?...   Feb 8 2013, 17:47
- - dfyz.s   )))) Согласен. Но это не решает проблемы. Сейчас ...   Feb 8 2013, 18:04
|- - KnightIgor   Цитата(dfyz.s @ Feb 8 2013, 19:04) Сейчас...   Feb 8 2013, 20:25
- - dfyz.s   Игорь, большое спасибо за ваши обяснения! Мне...   Feb 10 2013, 19:31
|- - _Артём_   Цитата(dfyz.s @ Feb 10 2013, 21:31) отлад...   Feb 10 2013, 20:07
|- - KnightIgor   Цитата(dfyz.s @ Feb 10 2013, 20:31) Мне с...   Feb 11 2013, 11:02
- - dfyz.s   Да, скорее всего я где-то напортачил. Надо протест...   Feb 11 2013, 12:46
|- - KnightIgor   Цитата(dfyz.s @ Feb 11 2013, 13:46) Пробе...   Feb 12 2013, 08:39
- - dfyz.s   Да, с схемотехнической точки зрения похоже все хор...   Feb 13 2013, 06:34


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 03:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016