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

 
 
> Помогите по i2c, вопрос по asm, Подскажите начинающему, не ясны некоторые моменты
V000va
сообщение Jun 23 2008, 17:02
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 87
Регистрация: 23-06-08
Пользователь №: 38 503



Разбираюсь с протоколом i2c, нашел доку (апноут) AVR 300: Software I2C™ Master Interface и файлик на асме к нему. Пытаюсь сделать програмно эмуляцию i2c под tiny2313. Так вот файлик на асме обзывается:

Title : I2C (Single) Master Implementation
;* Version : 1.0 (BETA)
;* Last updated : 97.08.27
;* Target : AT90Sxxxx (any AVR device)

Есть 2 вопроса по тексту программы:
1. Дока пишет, что частоты i2c могут быть 100 и 400кгц.
И в программе-примере соответсвенно используются специальне циклы задержки:
;* FUNCTION
;* i2c_hp_delay 100khz
;* i2c_qp_delay 100khz
;*
;* DESCRIPTION
;* hp - half i2c clock period delay (normal: 5.0us / fast: 1.3us)
;* qp - quarter i2c clock period delay (normal: 2.5us / fast: 0.6us)

В каких случаях применятся задержка на полпериода, а в каких случаях на четверть периода?

2. В первом же куске кода реализуется повторный старт, например.

_________________________________
Кусочек кода из программы для пояснения 2-го вопроса.
....
.equ SCLP = 1 ; SCL Pin number (port D)
.equ SDAP = 0 ; SDA Pin number (port D)
....

i2c_rep_start:
sbi DDRD,SCLP ; force SCL low
cbi DDRD,SDAP ; release SDA
rcall i2c_hp_delay ; half period delay
cbi DDRD,SCLP ; release SCL
rcall i2c_qp_delay ; quarter period delay

_________________________________

Берем первую команду sbi - установить бит. Регистр DDRD ведь управляет направлением работы порта ввода-вывода, каким образом реаизуется установка SCL в ноль? В тексте проги пишут :

sbi DDRD,SCLP ; force SCL low

Ну и далее по тексту идет cbi и т.д. Не понятно каким образом управляя только DDRD на выводах контроллера реализуются логические уровни? Поясните плз. Ведь чтоб на выводах что-то появилось нужно вывести порт с помощью out, например. Даже если в PORTD что-то есть, и мы конфигурируем порт на ввод, в PORTD нужно что-то положить, чтоб там было что-то и на выводе порта появилась 0 или 1. Поясните плз или подскажите плз, как по другому можно реализовать работу порта для управления только одним выводом.

PS Буду очень признателен, если кто-то поделится кусочком кода на asm, релизующего програмно i2c

---------------------------------------------------------------------
Прикрепленные файлы
Прикрепленный файл  avr300_asm.txt ( 11.49 килобайт ) Кол-во скачиваний: 67
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Pasha
сообщение Jun 23 2008, 17:29
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(V000va @ Jun 23 2008, 20:02) *
В каких случаях применятся задержка на полпериода, а в каких случаях на четверть периода?

В первом же куске кода реализуется повторный старт, например.

Берем первую команду sbi - установить бит. Регистр DDRD ведь управляет направлением работы порта ввода-вывода, каким образом реаизуется установка SCL в ноль? В тексте проги пишут :

sbi DDRD,SCLP ; force SCL low
Ну и далее по тексту идет cbi и т.д. Не понятно каким образом управляя только DDRD на выводах контроллера реализуются логические уровни?


По пунктам.
1. В данном случае длительность задержки i2c_hp_delay совпала с минимальным временем паузы после старта (в доках оно называется Tsu_sta - для старта, Tsu_sto - для стопа) оно должно быть не менее 4,7мкс.
2. Поскольку i2c подразумевает выходы с открытым коллектором, во избежание неприятностей на пинах под i2c не должна появляться комбинация например DDRD.SCLP=1 и PORTD.SCLP=1. То же и SDA касается. Таким образом, весь изврат с DDRx предназначен для эмуляции выхода с открытым коллектором
Go to the top of the page
 
+Quote Post
V000va
сообщение Jun 23 2008, 17:48
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 87
Регистрация: 23-06-08
Пользователь №: 38 503



Цитата(_Pasha @ Jun 23 2008, 20:29) *
По пунктам.
1. В данном случае длительность задержки i2c_hp_delay совпала с минимальным временем паузы после старта (в доках оно называется Tsu_sta - для старта, Tsu_sto - для стопа) оно должно быть не менее 4,7мкс.
2. Поскольку i2c подразумевает выходы с открытым коллектором, во избежание неприятностей на пинах под i2c не должна появляться комбинация например DDRD.SCLP=1 и PORTD.SCLP=1. То же и SDA касается. Таким образом, весь изврат с DDRx предназначен для эмуляции выхода с открытым коллектором


Со вторым пунктом вроде разобрался, а по задержкам можете пояснить подробнее?

Например в другой подпрограмме этого же дока так же используются задержки, но не понятно когда какая.


____________________________________
i2c_get_ack:
sbi DDRD,SCLP ; force SCL low
cbi DDRD,SDAP ; release SDA
rcall i2c_hp_delay ; half period delay
cbi DDRD,SCLP ; release SCL

i2c_get_ack_wait:
sbis PIND,SCLP ; wait SCL high
;(In case wait states are inserted)
rjmp i2c_get_ack_wait

clc ; clear carry flag
sbic PIND,SDAP ; if SDA is high
sec ; set carry flag
rcall i2c_hp_delay ; half period delay
ret

________________________________________________


подозреваю, что они берутся исходя из временных диаграмм обмена, но уверенности нет.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- V000va   Помогите по i2c, вопрос по asm   Jun 23 2008, 17:02
- - Kalina   Цитата(V000va @ Jun 23 2008, 21:02) Берем...   Jun 23 2008, 17:12
|- - V000va   Цитата(Kalina @ Jun 23 2008, 20:12) В схе...   Jun 23 2008, 17:20
|- - Kalina   Цитата(V000va @ Jun 23 2008, 21:20) в пун...   Jun 23 2008, 17:25
|- - ILYAUL   Цитата(V000va @ Jun 23 2008, 21:48) Со вт...   Jun 24 2008, 17:53
- - V000va   Дык я так понимаю для серии Mega все просто и поня...   Jun 25 2008, 11:38
|- - Dopler   Цитата(V000va @ Jun 25 2008, 15:38) Дык я...   Jun 28 2008, 13:49
- - Александр Куличок   По задержкам - смотри у автора стандарта http://ww...   Jun 25 2008, 15:20
- - V000va   Поковырял AVR 300: Software I2C™ Master Inte...   Jun 29 2008, 17:22
- - Александр Куличок   Не забывай перед вызовом каждой операцией чтения у...   Jun 29 2008, 17:39
|- - V000va   Цитата(Александр Куличок @ Jun 29 2008, 20...   Jul 1 2008, 17:30
- - Александр Куличок   ЦитатаПосле первого nack идут единицы сплошные, по...   Jul 1 2008, 19:02
- - V000va   Цитата(Александр Куличок @ Jul 1 2008, 22...   Jul 2 2008, 10:34
- - ChYM   В свое время разбирался с I2C и в атмеловском avr3...   Jul 2 2008, 13:51
- - Александр Куличок   Цитатато получится ожидаемая комбинация 08 Не полу...   Jul 2 2008, 19:34
- - V000va   Цитата(Александр Куличок @ Jul 2 2008, 22...   Jul 3 2008, 07:15
- - Александр Куличок   ЦитатаЭто ожидание ack от slave, это он тормозит в...   Jul 3 2008, 08:17
- - V000va   Спасибо за подробный ответ.   Jul 3 2008, 09:35
|- - V000va   Подскажите, пишу прогу для работы с ds1307. ПО дол...   Jul 25 2008, 12:44
|- - MTh   Цитата(V000va @ Jul 25 2008, 15:44) Подск...   Jul 25 2008, 14:16
|- - AHTOXA   Цитата(MTh @ Jul 25 2008, 20:16) Там есть...   Jul 25 2008, 14:22
|- - MTh   Цитата(AHTOXA @ Jul 25 2008, 17:22) Я уже...   Jul 27 2008, 23:34
- - V000va   Эээ, да мне бы с отладкой разобраться, софт та у м...   Jul 25 2008, 15:10
- - SasaVitebsk   Шина простая до безобразия и, фактически статическ...   Jul 25 2008, 15:33
- - V000va   Все пофиксил, работает. Всем спасибо   Jul 29 2008, 07:57


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

 


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


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