Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программная реализация интерфейса
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2, 3
stalknr
Полностью согласен с вами уважаемый =GM= на чтение 3 такта меньше еще не кто не придумал
stells
Цитата(stalknr @ Apr 14 2011, 19:10) *
Есть идея для слайва. Поставить внешний 22 разрядный сдвигающий регистр

у Вас же есть в контроллере регистр сдвига wacko.gif
ну тогда и контроллер на россыпи соберите
stalknr
Вы какой регистр сдвига имеете ввиду
zombi
Цитата(=GM= @ Apr 14 2011, 20:25) *
Ну как, по рабоче-крестьянски. Если synpin=0, то sbis выполняется за 1 такт, потом выполняется rjmp за 2 такта, опять читается, и опять, и опять. Т.о., чтение ноги осуществляется через каждые три такта, согласны?

В своём Сообщении #40 я говорил о минимальной и максимальной задержке (относительно фронта синхро) чтения процессором линии данных! И правильнее будет не 3-5 а 2-5
Цитата(=GM= @ Apr 14 2011, 20:25) *
Можете сделать чтение через два такта?

Наверное можно если цикл развернуть
=GM=
Цитата(stalknr @ Apr 14 2011, 15:33) *
Полностью согласен с вами уважаемый =GM= на чтение 3 такта меньше еще не кто не придумал

Вообще-то, чтение за два такта я придумал, как бы за один ухитриться...
Цитата(zombi @ Apr 14 2011, 17:31) *
В своём Сообщении #40 я говорил о минимальной и максимальной задержке (относительно фронта синхро) чтения процессором линии данных! Наверное можно если цикл развернуть

Ну так, разверните.
zombi
Цитата(=GM= @ Apr 14 2011, 22:37) *
Ну так, разверните.

прям экзамен
Код
       sbic port,synch
       rjmp read
       sbic port,synch
       rjmp read
...
       sbic port,synch
       rjmp read
       jmp  error

read:
=GM=
Правильно, я также сделал, если 8 раз повторить, будет бесплатный выход по пропаже нужного транзишн. Последнюю проверку лучше взять инверсную sbis.

Теперь, давайте разместим бит данных в регистре за два такта. В итоге, мы должны программно читать на частоте 4 Мбода.
zombi
Цитата(=GM= @ Apr 14 2011, 22:54) *
Теперь, давайте разместим бит данных в регистре за два такта.

Ну так, разместите.
=GM=
Ну так
Код
       sbic     portb,datpin
       or       data,count
       rlc      count
       brcc     getsyn


А самому что, слабо что ли :-)?
zombi
Цитата(=GM= @ Apr 14 2011, 23:09) *
А самому что, слабо что ли :-)?

Даа... КРУТО, сам я бы не додумался. biggrin.gif


Цитата(=GM= @ Apr 14 2011, 23:09) *
Ну так
Код
       sbic      portb,datpin
       or         data,count
       rlc        count
       brcc     getsyn

А старший бит ненужен чтоли?
=GM=
Цитата(zombi @ Apr 14 2011, 18:40) *
А старший бит ненужен, что ли?

Не совсем понял, почему не нужен? Нужен. Перед началом цикла надо сделать
ldi count,0x80
zombi
Цитата(=GM= @ Apr 14 2011, 23:57) *
Не совсем понял, почему не нужен? Нужен. Перед началом цикла надо сделать
ldi count,0x80

Нее все нормуль. ну и про ldi data,0 не забыть.
И сколько всего тактов получится (включая начальную инициализацию)?
=GM=
А самому посчитать :-)? Думаю, что можно уложиться в 5 тактов, скорость чтения - 4 Мбита/с. Аппаратный слейв, между прочим, работает не выше Fclk/4=5 МГц, так что неплохой результат для программной реализации. Начальные установки считать не надо, поскольку есть зазор временной между 22-битными словами, можно туда вставить.
zombi
Цитата(=GM= @ Apr 15 2011, 00:50) *
Думаю, что можно уложиться в 5 тактов, скорость чтения - 4 Мбита/с.

Т.е. Вы предлагаете синхронизироваться только по первому фронту синхро а дальше читать линию данных каждые 5 тактов (22 раза без синхронизации)?
=GM=
Для данного случая можно синхронизироваться на каждом бите, так и надо делать, 16-ти тактов на бит должно хватить. Принять 8, 8 и 6 бит, в паузе сохранить данные, по-новой инициализировать и т.д. Всё компактно и просто, какие сплд? Кто их видел? И где? Весь приём и передача спокойно реализуется на голой копеечной тиньке. (Надо будет, можно и на 10 МГц принять...)
zombi
Цитата(stalknr @ Apr 13 2011, 20:36) *
так ведет себя МАСТЕР. СЛАЙВ в этот момент принимает ПОСТОЕ СЛОВО и на его основе формирует ответ.

Код
//----------------------------------------------------------------------------
//                  Процедура     _peredacha_slova_PRD
//----------------------------------------------------------------------------
// передаем слово данных ведомому
_peredacha_slova_PRD:
    
//-------------------------------------------------
// выдаем на PORTB.0 6 младших разрядов байта ADRES_OUT
//-------------------------------------------------
_out_ADRES_OUT:
    OUT  PORTB, temp            //50ns   в регистр ввода-вывада (РВВ) передаем R16 PORTB
    ROR  ADRES_OUT                      //100ns  сдвигаем ADRES_OUT вправо причем SREG.C=ADRES_OUT.0
    BRCS C_1                    //150ns  Выдаем
    SBR  temp, (1<<PB1)            // если бит SREG.С=0 то выдаем в выдаем в порт только синхросигнал
    RJMP C_0
C_1:SBR  temp, (1<<PB1)+(1<<PB0)// если бит SREG.С=1 то выдаем в выдаем в порт  синхросигнал и сам бит
    NOP
C_0:NOP
    INC  Nraz                    //400нс  увеличиваем счетчик разрядов на +1
//_________________________________________
    OUT  PORTB, temp            //450нс  в регистр ввода-вывада (РВВ) передаем R16 PORTB
    CLR  temp                   //500ns  чистим темп
    NOP                              //550ns
    NOP                             //600ns
    NOP                             //650ns
    CPI  Nraz, 0x06               //700ns и 750ns  считаем 6 умпульсов
    BRLO _out_ADRES_OUT               //800ns  Nrz < 6  переход по "меньше"
//-------------------------------------------------

Вы выдаёте в PORTB положительный фронт синхро одновременно с новым значением данных. А так ли формирует сигналы реальный МАСТЕР?
stalknr
Да реально мастер выдает синхро и данные в один момент
zombi
Цитата(stalknr @ Apr 15 2011, 19:12) *
Да реально мастер выдает синхро и данные в один момент

Как-то странно для SPI.
stalknr
Кто вам сказал что SPI
zombi
Цитата(stalknr @ Apr 15 2011, 19:56) *
Кто вам сказал что SPI

Просто были советы юзать аппаратный SPI мк, вот и подумал.
stalknr
вообщем с внешним сдвиговым регистром все очень хорошо получается.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.