ATTiny USI -> SPI

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

ATTiny USI -> SPI

Сообщение hybroid »

Сразу дико извиняюсь =) М.б. вопрос поражает тупостью, но я честно больше суток пытался решать проблему мозгом. Потом решал "гуглом". Итог - этот топик ):
Суть проблемы: есть диспей от Motorola C450 (SSD1770). Работать с ним можно в режиме SPI (кстати, среди аппаратного функционала в дисплее есть интересные вещи, вроде скола и прорисовки простейший фигур). Штука, конечно, древнее дерьма мамонта, но жизнь заставляет юзать её совместно с ATTiny2313. В нём мы не располагаем SPI, имеем только USI.
Честно читал даташит, честно понял, что SPI можно реализовать через 3-wired USI. Честно НЕ ПОНЯЛ, что происходит в примере на асме. Каюсь, я программист на высокоуровневых языках. Если не затруднит, киньте в меня перелопаченным примером на C :?

UPD: сам ASM-код из даташита:

Код: Выделить всё

SPITransfer:
    out USIDR,r16
    ldi r16,(1<<USIOIF)
    out USISR,r16
    ldi r16,(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)
SPITransfer_loop:
    out USICR,r16
    sbis USISR,USIOIF
    rjmp SPITransfer_loop
    in r16,USIDR
    ret
Последний раз редактировалось hybroid Ср мар 09, 2011 15:58:36, всего редактировалось 1 раз.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18657
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: ATTiny USI -> SPI

Сообщение ARV »

может, вам проще написать программный SPI, раз вы высокоуровневый программист, и не парить моск?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: ATTiny USI -> SPI

Сообщение hybroid »

как я понял, через USI - получается _почти_ программный SPI. как кричит даташит:
The USI provides the basic
hardware resources needed for synchronous serial communication. Combined with
a minimum of control software, the USI allows higher transfer rates, less CPU load
and in general uses less code space than solutions based on software only
Не могу не согласиться с даташитом. Особенно, в случае с ATTiny2313, где и так каждый байт на счету. Да и всё-таки хочется раз и на всегда разобраться в данном вопросе.
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: ATTiny USI -> SPI

Сообщение Satyr »

ARV писал(а):может, вам проще написать программный SPI, раз вы высокоуровневый программист, и не парить моск?
Очень дурной тон программно имитировать то, что и так есть аппаратно.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
TracerrecarT
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Вс июл 13, 2008 21:38:56
Откуда: Харьков

Re: ATTiny USI -> SPI

Сообщение TracerrecarT »

hybroid писал(а):Каюсь, я программист на высокоуровневых языках. Если не затруднит, киньте в меня перелопаченным примером на C
Есть Атмеловский аппликейшин AVR319 к нему идет код на IAR С (куда уже высокоуровневей...)

Смотреть здесь:
http://www.atmel.com/dyn/products/produ ... rt_id=3229

Учись работать с первоисточниками.

PS Если захочешь на USI - TWI(i2C)организовать - обращайся, есть исходник на С++ (класс, методы, конструктор, деструктор)
В общем для крутых, высокоуровневых пацанов :0)
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: ATTiny USI -> SPI

Сообщение Engineer_Keen »

hybroid писал(а):Честно НЕ ПОНЯЛ, что происходит в примере на асме.

Код: Выделить всё

SPITransfer:
    out USIDR,r16 ;пишем байт в регистр данных USI
    ldi r16,(1<<USIOIF) ;сбрасываем бит переполнения
    out USISR,r16 ;счетчика USI
    ldi r16,(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC) ;конфигурация USI: 
;-режим SPI (бит USIWM0)
;-программное тактирование (бит USICS1)
;-сдвиг регистра данных (1 в USICLK)
;-переключение линии CLK (1 в USITC)
SPITransfer_loop:
    out USICR,r16 ;запись в регистр управления USI, сдвиг регистра данных, переключение CLK
    sbis USISR,USIOIF ;проверка переполнения счетчика USI
    rjmp SPITransfer_loop ;переход если нет
    in r16,USIDR ;если да, читаем что пришло по SPI
    ret ;возврат из подпрограммы
Хотя я предпочитаю вариант SPITransfer_Fast, он хотя и длиннее более чем в 2 раза, зато быстрее (и кстати проще).
Реклама
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: ATTiny USI -> SPI

Сообщение hybroid »

TracerrecarT писал(а):C код на IAR С (куда уже высокоуровневей...)
Себе же противоречите:
TracerrecarT писал(а):обращайся, есть исходник на С++ (класс, методы, конструктор, деструктор)
За апноут благодарю.
PS: Откуда столько яда? С каких пор знание чего-то удобнее ассемблера стало "пацанской" биркой? Или вы считаете, что работать с МК со знанием C - это "не по-пацански"? :))) Или, м.б., я зря несу в голове понятия
С++ (класс, методы, конструктор, деструктор)
?

Кстати, C++ не ограничен классами и деструкторами.

И, между прочим, мир высокоуровневых языков не ограничен C++ :))
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: ATTiny USI -> SPI

Сообщение hybroid »

Engineer_Keen писал(а):
hybroid писал(а):Честно НЕ ПОНЯЛ, что происходит в примере на асме.

Код: Выделить всё

SPITransfer:
    out USIDR,r16 ;пишем байт в регистр данных USI
    ldi r16,(1<<USIOIF) ;сбрасываем бит переполнения
    out USISR,r16 ;счетчика USI
    ldi r16,(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC) ;конфигурация USI: 
;-режим SPI (бит USIWM0)
;-программное тактирование (бит USICS1)
;-сдвиг регистра данных (1 в USICLK)
;-переключение линии CLK (1 в USITC)
SPITransfer_loop:
    out USICR,r16 ;запись в регистр управления USI, сдвиг регистра данных, переключение CLK
    sbis USISR,USIOIF ;проверка переполнения счетчика USI
    rjmp SPITransfer_loop ;переход если нет
    in r16,USIDR ;если да, читаем что пришло по SPI
    ret ;возврат из подпрограммы
Хотя я предпочитаю вариант SPITransfer_Fast, он хотя и длиннее более чем в 2 раза, зато быстрее (и кстати проще).
Спасибо за ответ по теме. Можно подробнее про SPITransfer_Fast?
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: ATTiny USI -> SPI

Сообщение ChipKiller »

Satyr писал(а):Очень дурной тон программно имитировать то, что и так есть аппаратно.
... не обязательно - случаи бывают разные .. :)
hybroid писал(а):Каюсь, я программист на высокоуровневых языках.
... SPI легко реализуется программно (на С в том числе) - просто есть 4 варианта ... хотя разница несущественна
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: ATTiny USI -> SPI

Сообщение Engineer_Keen »

hybroid писал(а):Можно подробнее про SPITransfer_Fast?
Это пример, который идет в даташите после первого варианта.
Там первой строкой также пишется байт в порт данных, потом в два регистра (R16 и R17) записывается конфигурация USI, с отличием в один бит (этот бит - тактовый). Потом тупо 8 раз повторяется вывод сначала R16 потом R17 в конфигурационный регистр USI, при этом регистр данных сдвигается автоматом при каждом изменении в тактовом бите. После 8 циклов читается то, что пришло по SPI.
Кстати, не забываем что в SPI еще может быть линия CS...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18657
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: ATTiny USI -> SPI

Сообщение ARV »

Satyr писал(а):Очень дурной тон программно имитировать то, что и так есть аппаратно.
да что вы говорите?! :))) ну-ну...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: ATTiny USI -> SPI

Сообщение hybroid »

Engineer_Keen писал(а):Кстати, не забываем что в SPI еще может быть линия CS...
Хм. Можно про камни с CS? Мною используемый LCD как раз "активно жаждит" CS..
ARV писал(а):да что вы говорите?! ну-ну...
Что же вы предлагаете программно реализовать лучше, чем имеющееся аппаратно? На примере AVR, пожалуйста. 8-ми битных, к слову.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: ATTiny USI -> SPI

Сообщение Engineer_Keen »

hybroid писал(а):Хм. Можно про камни с CS? Мною используемый LCD как раз "активно жаждит" CS..
Выделяете любую свободную ногу МК под CS, и перед тем как передавать какие-либо данные с помощью вышерассмотренных подпрограмм ставите ее в 0, после передачи ставите в 1. Если 2 устройства - 2 линии CS, при общении с конкретным устройством ставите в 0 его CS, и т.д.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18657
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: ATTiny USI -> SPI

Сообщение ARV »

hybroid писал(а):Что же вы предлагаете программно реализовать лучше, чем имеющееся аппаратно? На примере AVR, пожалуйста. 8-ми битных, к слову.
да упаси меня бог чего-то предлагать! я сижу тихохонько в уголке и наблюдаю... :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
TracerrecarT
Первый раз сказал Мяу!
Сообщения: 26
Зарегистрирован: Вс июл 13, 2008 21:38:56
Откуда: Харьков

Re: ATTiny USI -> SPI

Сообщение TracerrecarT »

hybroid писал(а): За апноут благодарю.
Всегда пожалуйста, обращайся.
PS: Откуда столько яда? С каких пор знание чего-то удобнее ассемблера стало "пацанской" биркой? Или вы считаете, что работать с МК со знанием C - это "не по-пацански"? :))) Или, м.б., я зря несу в голове понятия
И, между прочим, мир высокоуровневых языков не ограничен C++ :))
Я специально поставил в конце предложения смайлик - это была дружеская шутка, подначка .
Если обидел - прошу прощения.

Совет:
Вообще, если есть желание программировать микроконтроллеры то знание ассемблера ОЧЕНЬ НЕ ПОМЕШАЕТ.
kotoandroid
Открыл глаза
Сообщения: 54
Зарегистрирован: Вт апр 19, 2011 12:24:56

Re: ATTiny USI -> SPI

Сообщение kotoandroid »

Так же как автор топика решил освоить USI в качестве SPI, пишу в алгоритм билдере (ассемблер). помоему в USI нехватает настроек от SPI, таких как:
1) выбор из 4 типов тактирования (два по спаду и два по подъёму, каждая из двоек либо с нуля, либо с единицы стартует)
2) деление частоты от тактирования процессора (SPI самый быстрый протокол был, а это... я даж без понятия какую скорость получится выжать)
3) какой бит передаётся первым, старший или младший? такой настройки вообще не нашол... может плохо искал хз, гугл не смог помочь.
си не изучал, т.к. обычно мне нужна ассемблерная точность и быстрота работы процессора (прошу не холиварить по данному поводу)

п.с. на меге 32 по SPI подключил экран и он вполне сносно и быстро работает, хочу перевести проект на attyni2313. подскажите в какой регистр что записать чтоб получить:
1) старт передачи с 0 (хотя не критично, можно и с 1), тактирование по подъёму(по классификации SPI это 1 или 3 тип был)
2) частоту нужно как можно большую, в меге было дабл спид, т.е. кварц/2
3) MSB передаётся первым, это вроде младший бит...
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: ATTiny USI -> SPI

Сообщение Engineer_Keen »

kotoandroid писал(а):1) старт передачи с 0 (хотя не критично, можно и с 1), тактирование по подъёму(по классификации SPI это 1 или 3 тип был)
Вроде в качестве мастера тинька может только по подьему тактировать, в качестве слейва и по спаду и по подьему (даташит, таблица 61)
kotoandroid писал(а):2) частоту нужно как можно большую, в меге было дабл спид, т.е. кварц/2
Кварц/2 получается в варианте SPITransfer_Fast (ДШ, пример на странице 143)
kotoandroid писал(а):3) MSB передаётся первым, это вроде младший бит...
Most significant bit - т.е. старший байт.
Любые другие варианты (другие режимы SPI, младший бит первым) - только с помощью программного SPI (но при этом не получить скорости кварц/2)
kotoandroid
Открыл глаза
Сообщения: 54
Зарегистрирован: Вт апр 19, 2011 12:24:56

Re: ATTiny USI -> SPI

Сообщение kotoandroid »

таким образом мне повезло и самая быстрая конфигурация как раз мне подойдёт, я правильно понял? таблица 61 для меня пока загадка, не понимаю я что там написано, причем тут внешние сигналы тактирования( возможно речь идет о слейв устройстве по отношению к мастеру?) как выставить USICR и USISR, чтоб было тактирование по подъёму( мастер устройство), старший бит первым шол и скорость СК/2?

п.с. надеюсь я не кажусь очень наглым, просто никак не доходит до меня этот USI. SPI и TWI и то проще... помоему.. кучу даташитов перелопатил, пока без результата.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: ATTiny USI -> SPI

Сообщение Engineer_Keen »

kotoandroid писал(а): как выставить USICR и USISR, чтоб было тактирование по подъёму( мастер устройство), старший бит первым шол и скорость СК/2?
Почти все выставляется в примере SPITransfer_Fast. Нужно только еще DDR этого порта сконфигурировать (CS, DO, CLK на выход, DI на вход. Не путать DI/DO USI с MOSI/MISO ISP, они там наоборот стоят!).
kotoandroid писал(а): п.с. надеюсь я не кажусь очень наглым, просто никак не доходит до меня этот USI. SPI и TWI и то проще... помоему.. кучу даташитов перелопатил, пока без результата.
Зачем кучу, нужно всего пару - на МК и на ведомое устройство :)))
kotoandroid
Открыл глаза
Сообщения: 54
Зарегистрирован: Вт апр 19, 2011 12:24:56

Re: ATTiny USI -> SPI

Сообщение kotoandroid »

Engineer_Keen писал(а): Зачем кучу, нужно всего пару - на МК и на ведомое устройство :)))
я имел ввиду кучу разных даташитов и описаний USI, SPI, attiny и прочего. что касается даташитов на ведомое устройство, то повторюсь, оно уже работало, но на меге, с нормальным SPI, где всё явно и понятно, без заморочек.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»