|
STM32 Вопрос про I2C, непонимаю даташит или что-то не то |
|
|
|
Aug 25 2011, 10:22
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Feb 10 2013, 19:31
|
Группа: Участник
Сообщений: 13
Регистрация: 10-01-11
Пользователь №: 62 132

|
Игорь, большое спасибо за ваши обяснения!
Мне сейчас необходимо записать адресс устройства на шине, а потом послать адресс регистра, изкоторого считать информацию. (ST -> SAD+W -> ................. -> SubAddres.......... ST -> SAD+R -> ........................ NMAK -> STOP-> ......................... <- answ SAK .................. <-SAK...........................<-SAK <-DATA.......................... )
Поделитесь опытом, ка вы отлаживали программу, т.к. отладчиком нормально не получается посмотеть (и вправду сбрасывает биты как BTF, так и ADDR). Только при помощи осцилографа?
Сообщение отредактировал dfyz.s - Feb 10 2013, 19:46
|
|
|
|
|
Feb 10 2013, 20:07
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(dfyz.s @ Feb 10 2013, 21:31)  отладчиком нормально не получается посмотеть (и вправду сбрасывает биты как BTF, так и ADDR). Отладчик сбрасывает нужные биты всегда или только когда открыто окно просмотра регистров i2c? Цитата(dfyz.s @ Feb 10 2013, 21:31)  Только при помощи осцилографа? Вариантов множество: вывод в comport (или любой другой интерфейс, который можно выделить для отладки); запись лога обмена в ОЗУ, с последующим просмотром лога после завершения обмена; и тд и тп.
|
|
|
|
Сообщений в этой теме
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 dfyz.s Да, какая то фигня с личными сообщениями, хотя в н... Feb 8 2013, 17:10 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 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|