Например TDA7294

Форум РадиоКот • Просмотр темы - I2C не хочет отправлять повторный старт
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 19:52:46

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: I2C не хочет отправлять повторный старт
СообщениеДобавлено: Сб фев 25, 2023 10:12:40 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вт фев 05, 2019 17:20:08
Сообщений: 229
Откуда: Днепр, Украина
Рейтинг сообщения: 0
Приветствую. Столкнулся с проблемой. Имею контролер STM32F103C8T6. Пытаюсь на нем реализовать работу I2C на прерываниях. Проблема заключается в следующем. В момент когда нужно отправить рестарт этого не происходит. Прерывания ITBUFEN выключены, пользуюсь только ITEVFEN.
Последовательность следующая: Старт - отправка адреса - отправка адреса регистра (с которого читать) - отправка повторного старта. (тире это вход в прерывание) Так вот, после отправки второго старта ничего не происходит.
НО, если я перед отправкой повторного старта считаю DR, то повторный старт отправиться.
Код:
(void)I2C2->DR;
I2C2->CR1|=I2C_CR1_START;

Есть и другой вариант, после установки старт отправить в регистр DR какой то мусор то старт произойдет. И мусор не будет отправлен.
Код:
I2C2->CR1|=I2C_CR1_START;
I2C2->DR=0x55;

Есть еще вариант, когда передаю последний байт адреса регистра, сразу записать старт, то когда зайду в прерывание для отправки старта и отправлю его еще раз то старт передается. В чем может быть проблема? Что я делаю не так?
Такое чувство буд то не сбрасывается какой то флаг, и не дает отправить старт. Хотя в этот момент смотрел отладчиком, и ничего такого не увидел.
Так же пробовал делать паузу между отправкой рестарта, это не помогло.
В само прерывание для отправки старта заходит, но он не генерируется.


Вложения:
I2C.c [17.95 KiB]
Скачиваний: 53

_________________
Одержать сто побед в ста битвах — это не вершина воинского искусства. Повергнуть врага без сражения — вот вершина.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: I2C не хочет отправлять повторный старт
СообщениеДобавлено: Сб фев 25, 2023 10:21:45 
Встал на лапы
Аватар пользователя

Зарегистрирован: Пн апр 02, 2012 15:56:23
Сообщений: 137
Рейтинг сообщения: 0
Если я верно понял, то повторный старт происходит после окончания передачи текущего байта, то есть так задумано.

In master mode, setting the START bit causes the interface to generate a ReStart condition at the end of the current byte transfer.

Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: I2C не хочет отправлять повторный старт
СообщениеДобавлено: Сб фев 25, 2023 10:36:36 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вт фев 05, 2019 17:20:08
Сообщений: 229
Откуда: Днепр, Украина
Рейтинг сообщения: 0
Но так не работает. Если я в прерывании когда записывается последний байт регистра адреса в DR устанавливаю старт, то он не формируется. Проверял. А вот если я помимо этого старта напишу еще один старт, который отправлю в прерывание которое появится после отправки последнего байта, то он отправиться...

_________________
Одержать сто побед в ста битвах — это не вершина воинского искусства. Повергнуть врага без сражения — вот вершина.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: mab72 и гости: 30


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y