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

 
 
> Slave HAL FreeRTOS, Эмуляция ds1307
simark1979
сообщение Feb 6 2018, 21:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 14-03-09
Из: Краснодарский край
Пользователь №: 46 094



Доброе время суток)

Извините за наглость rolleyes.gif но вопрос общего характера.

Мне нужно написать эмуляцию часов ds1307.
Понятно, что это будет slave, с командами чтения и записи по i2c
Никак в голове никак не складывается концепция реализации на FreeRTOS (имеется ввиду взаимодействие коллбэков и потоков, как распознать команды чтения/записи)

На картинке, пример работы с ds1307:
packet#27 - так происходит запись (первый байт куда писать, остальные что писать)
packet#28 - установка указателя для чтения
packet#29 - чтение данных

Вообщем протокол стандартный.
Прикрепленное изображение


Может у кого-то есть опыт или идеи по написанию слэйва под операционкой?
Буду рад любой помощи)

Сообщение отредактировал simark1979 - Feb 7 2018, 11:41
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
juvf
сообщение Feb 8 2018, 11:32
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



с халом HALом косяк. См исходники
В блокирующем чтении да, не выйдем из приема, пока не получим нужное кол-во байт, либо по таймауту.
в неблокирующем режиме по прерываниям, тут ворде можно можно получить переменное кол-во байт.
Вызывайте HAL_I2C_Slave_Receive_IT(hi2c, pData, 255);
на сколько я понял, в обработчике прерывания не контролируется размер принятых байт.
хал в прерывании автоматом будет ловить принятые байты и стоп.
После появления STOP-условия прием завершиться и будет вызвана функция void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c).
Определите у себя в коде void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c). Кол-во принятых байт 255 - hi2c->XferSize. Из неё отправляйте в таск эвент/флаг/сигнал/мессадж...


ps на сколько я понял, если вызвать HAL_I2C_Slave_Receive_IT(hi2c, pData, 2);, а мастер передаст больше 2-х байт, стрельните себе HAL выстрелит вам в ногу.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 7th August 2025 - 17:26
Рейтинг@Mail.ru


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