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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> I2C LPC2xxx
GetSmart
сообщение Sep 26 2009, 05:11
Сообщение #16


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Спешу обрадовать (ся?) всех. Переписал это левой ногой писанный обработчик I2C и всё заработало под осью причём с кучей тредов и FIQ-ом. Теперь термометр и мост на OWI работают на 400 КГц I2C без единого глюка. Бывает же такое - кривой обработчик, но без оси работал тоже без глюков.

Вобщем получилась тема дубль 2 с моей старой темой - про глюки FIQ smile.gif
Если кому надо могу выложить обработчик прерывания I2C (только для мастера). Обработчик умеет в одном пакете передавать блок данных и сразу же принимать второй блок, не освобождая шину.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 26 2009, 09:25
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Sep 26 2009, 01:35) *
У Вас там не всё гладко.

Может да, может нет. Разборки были много лет назад. Пока все устраивает.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Sep 26 2009, 09:39
Сообщение #18


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(GetSmart @ Sep 26 2009, 08:11) *
Если кому надо могу выложить обработчик прерывания I2C (только для мастера). Обработчик умеет в одном пакете передавать блок данных и сразу же принимать второй блок, не освобождая шину.

Конечно надо, буквально на следующей неделе буду этим заниматься. Отчего же сразу не выложили?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Sep 26 2009, 17:11
Сообщение #19


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Выкладываю. Причесал его как следует. По объёму текста получился такой же как у zltigo.

Забыл там ещё вот это

typedef signed short Int16;

Ещё очепятку нашёл в строке 29. Надо исправить число 11 на 12 вот так:

SetCoupleBits(PINMODE1,12,2); // резист.подтяжка выкл для P0.28

Хотя для I2C эта подтяжка возможно вообще не используется.
Прикрепленные файлы
Прикрепленный файл  I2C_GetSmart.rar ( 2.63 килобайт ) Кол-во скачиваний: 44
 


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Sep 26 2009, 21:53
Сообщение #20


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Ещё немного отшлифовал и улучшил. Работает прекрасно на 400 КГц I2C @ 24 МГц LPC2368. 7 тредов, 1 FIQ 8 КГц (занимающее 25% времени проца). Уж не знаю чем ещё загрузить проц для тестирования.
Прикрепленные файлы
Прикрепленный файл  I2C_GetSmart_2.rar ( 2.75 килобайт ) Кол-во скачиваний: 86
 


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Sep 27 2009, 21:45
Сообщение #21


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Много думал...
До сих пор непонятно, нужно ли при приёме данных на последнем байте мастеру передавать NACK ? Судя по картинке из мануала на 2368 "Fig 113. Format and States in the Master Receiver mode" - нужно. Но если подумать, то слишком умный слэйв (проц например) может воспринять этот NACK как ошибку приёма. С обычными I2C слэйвами в виде перифирийных микросхем проблем нет в обоих вариантах (ACK/NACK). В то же время я видел чей-то официальный исходник для MCS-51 с программной реализацией I2C, в котором всегда при приёме последнего байта по I2C мастер передавал NACK.

_______________________

По поводу моих исходников. Там можно в дополнение к I2CEngine() сделать её асинхронную версию (как ReadFile()/WriteFile() в винде) и во время передачи пакета по I2C проц будет выполнять что-либо полезное, периодически проверяя статус I2CEngine.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2009, 21:57
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(GetSmart @ Sep 28 2009, 01:45) *
До сих пор непонятно, нужно ли при приёме данных на последнем байте мастеру передавать NACK ? Судя по картинке из мануала на 2368 "Fig 113. Format and States in the Master Receiver mode" - нужно. Но если подумать, то слишком умный слэйв (проц например) может воспринять этот NACK как ошибку приёма.

По стандарту нужно:
Цитата
If a master-receiver is involved in a transfer, it must signal
the end of data to the slave- transmitter by not generating
an acknowledge on the last byte that was clocked out of
the slave.

Если слейв "слишком умный" для совместимости, то это его проблемы.
Цитата(GetSmart @ Sep 28 2009, 01:45) *
С обычными I2C слэйвами в виде перифирийных микросхем проблем нет в обоих вариантах (ACK/NACK).

Не всегда. С какими-то из слейвов у меня точно были проблемы из-за забытого NAK.
Увы, не вспомню уже, с какими именно. Возможно, это было с AD.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Sep 28 2009, 15:53
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Из за отсутствия NAK имел проблемы с ds1307 при чтении ОЗУ. Вроде вполне распосраненная микросхема.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 6 2009, 07:11
Сообщение #24


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Если кто уже успел опробовать исходники - поделитесь впечатлениями и характеристиками работы/тестов.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th June 2025 - 10:01
Рейтинг@Mail.ru


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