Easyelectronics.ru

Электроника для всех
Текущее время: 23 янв 2021, 03:32

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 21 ] 
Автор Сообщение
 Заголовок сообщения: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 17 окт 2019, 23:30 
Заглядывает иногда

Зарегистрирован: 13 авг 2014, 19:13
Сообщения: 130
Доброго всем здравия.
Проблема следующая, второй день бьюсь с примером из Datasheet по реализации SPI master. И как об стену горох. Не заводится и всё.
Плюс к тому, при симуляции программы в 7 студии обнаружил странную штуку, регистры настройки USI по дефайну спроецированы в самом начале адресного пространства. К примеру .equ USICR = 0x0d И в симуляторе, когда доходит до загрузки в него значения, видно что оно грузится в R13. В общем мне эта темя тоже не совсем понятна. Как то до этого вычитал из литературы, что начальные адреса оперативки это РОН. А тут такая шляпа.
Код того что не взлетает прилагаю. По моему разумению он должен моросить по SPI циферки с инкрементом. А оно, судя по логическому анализатору, лежит как хер у покойника.
Show


Последний раз редактировалось Погромист 18 окт 2019, 00:19, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 18 окт 2019, 00:15 
Старожил
Аватара пользователя

Зарегистрирован: 02 фев 2012, 02:14
Сообщения: 759
Откуда: Вiльна та самостiйна Баварiя
Неправильные инструкции при записи/чтении в/из регистров USI:
Код:
STS ...
LDS ...           ; Это для обращения к ячейкам памяти и регистрам за пределами 0x3F

Правильно:
in Temp, USISR
out USIDR, Temp
Tiny 45 не имеет регистров за пределами 0x3F.
Цитата:
When using the I/O specific commands IN and OUT, the
I/O addresses 0x00 - 0x3F must be used. When addressing I/O Registers as data space using LD and ST instructions,
0x20 must be added to these addresses.

PS: убери код под спойлер


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 18 окт 2019, 00:23 
Заглядывает иногда

Зарегистрирован: 13 авг 2014, 19:13
Сообщения: 130
Fahivec писал(а):
Неправильные инструкции при записи/чтении в/из регистров USI:
Код:
STS ...
LDS ...           ; Это для обращения к ячейкам памяти и регистрам за пределами 0x3F

Правильно:
in Temp, USISR
out USIDR, Temp
Tiny 45 не имеет регистров за пределами 0x3F.

PS: убери код под спойлер

Спасибо. Буду пробовать. Просто не ожидал такой подлянки от официального документа. Передрал кусок кода из атмеловского датиша. Буквально скопировал. Обычно всегда так с новыми темами делаю, что бы изначально взлетело потому как "по заводской инструкции".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 18 окт 2019, 00:35 
Старожил
Аватара пользователя

Зарегистрирован: 02 фев 2012, 02:14
Сообщения: 759
Откуда: Вiльна та самостiйна Баварiя
Где-то в соседней ветке тоже про подлянки в ДШ писали, в новых надо читать - там многие ошибки поубирали.
Кстати, я в своем ДШ от 2013 г. примеров кода не видел примеры кода с IN/OUT:
Код:
15.3.2 SPI Master Operation Example
The following code demonstrates how to use the USI as an SPI Master:

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
    in r16, USISR
    sbrs r16, USIOIF
    rjmp SPITransfer_loop
    in r16,USIDR
    ret


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 18 окт 2019, 00:55 
Заглядывает иногда

Зарегистрирован: 13 авг 2014, 19:13
Сообщения: 130
Спасибо огромное! Зашевелилось. Правда пока только тактовая с USCK пошла. На DO тишина. Но после двух дней тупилова уже прогресс. Попробую разобраться. Начну с поиска свежего датиша-))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 18 окт 2019, 01:25 
Заглядывает иногда

Зарегистрирован: 13 авг 2014, 19:13
Сообщения: 130
Код:
15.3.2 SPI Master Operation Example
The following code demonstrates how to use the USI as an SPI Master:

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
    in r16, USISR
    sbrs r16, USIOIF
    rjmp SPITransfer_loop
    in r16,USIDR
    ret

В новом коде так же есть косяк. Я его, кстати, сразу заподозрил, но при исправлении только его, ничего не работало из за LDI и STS вместо IN и OUT
Косяк заключается в том, что перед входом в цикл, настройка ldi r16,(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC) (SPI + тактирование по USITC) загружается в USICR только единожды. Потому как потом в R16 сразу за этим затирается значением полученным из USISR. И уже на следующей итерации настройки (1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC) слетают. И в USICR попадает то, что раньше было в USISR.
Поменял код следующим образом
Код:
SPI Master Operation Example
The following code demonstrates how to use the USI as an SPI Master:

SPITransfer:
    out USIDR,r16
    ldi r16,(1<<USIOIF)
    out USISR,r16
    ldi r17,(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)
SPITransfer_loop:
    out USICR,r17
    in r16, USISR
    sbrs r16, USIOIF
    rjmp SPITransfer_loop
    in r16,USIDR
    ret

И всё заработало


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 18 окт 2019, 01:34 
Старожил

Зарегистрирован: 04 окт 2012, 00:23
Сообщения: 2745
Откуда: Москва
Код:
SPITransfer:
    out USIDR,r16
    ldi r16,(1<<USIOIF)
    out USISR,r16
SPITransfer_loop:
    ldi r16,(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)
    out USICR,r16
    in r16, USISR
    sbrs r16, USIOIF
    rjmp SPITransfer_loop
    in r16,USIDR
    ret


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 18 окт 2019, 01:41 
Заглядывает иногда

Зарегистрирован: 13 авг 2014, 19:13
Сообщения: 130
ILYAUL, Да, пожалуй можно и так. Чуть помедленнее только SPI станет. На одну команду в цикле больше, но зато регистр (в отличие от моей версии) экономится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 18 окт 2019, 01:46 
Заглядывает иногда

Зарегистрирован: 13 авг 2014, 19:13
Сообщения: 130
Всё заработало, Правда ЛА показывает какие то иголки на MISO. Видимо наводки, я не сильно большой специалист.
Изображение
При этом если отцепить программатор, которым тиньку шью, иголок становится раза в три чаще. С ними как можно побороться? Резистор какой нить подтянуть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 18 окт 2019, 01:50 
Старожил

Зарегистрирован: 04 окт 2012, 00:23
Сообщения: 2745
Откуда: Москва
Я вообще не понимаю зачем ее пихнули в цикл. Но DS поздно открывать
Код:
ldi r16,(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)
out USICR,r16 или как у тебя с r17

Весь пример какой-то левый. Так что может быть и так будет правильней.

Код:
SPITransfer:
    out USIDR,r16
    ldi r16,(1<<USIOIF)
    out USISR,r16
    ldi r16,(1<<USIWM0)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)
    out USICR,r16
SPITransfer_loop:
    in r16, USISR
    sbrs r16, USIOIF
    rjmp SPITransfer_loop
    in r16,USIDR
    ret


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 18 окт 2019, 02:42 
Заглядывает иногда

Зарегистрирован: 13 авг 2014, 19:13
Сообщения: 130
ILYAUL писал(а):
Весь пример какой-то левый. Так что может быть и так будет правильней.

Так не взлетит. out USICR,r16 должно остаться в цикле. Оно при этих (1<<USIWM0)|(1<<USICS1)|(1<<USICLK) настройках, этим (1<<USITC) тактируется. Т.е. что бы счетчик сдвигового регистра тикал+ USCK такты отбивал, нужно каждый раз USICR,r16 делать. Один пих=один фронт.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 18 окт 2019, 16:25 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3693
Откуда: Новосибирск
Код:
         LDI R16, Low(RAMEND)  ; младший байт конечного адреса ОЗУ в R16
         OUT SPL, R16          ; установка младшего байта указателя стека
         LDI R16, High(RAMEND) ; старший байт конечного адреса ОЗУ в R16
         OUT SPH, R16          ; установка старшего байта указателя стека

Запись: сначала старший, затем младший. Чтение: сначала младший, затем старший. Мнемоническая запоминалка. Таймер тикает, пока читаешь старший байт, младшее значение убежит.
Код:
.macro         INIT_STACK
.ifdef   SPH
   outi   SPH,HIGH(RAMEND)
.endif
   outi   SPL,LOW(RAMEND)
.endmacro


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 18 окт 2019, 17:30 
Старожил

Зарегистрирован: 31 янв 2010, 16:53
Сообщения: 210
Откуда: Ижевск
Пофиг порядок загрузки указателя стека. Тем более, что у этих камней он при подаче питания аппаратно устанавливается на RAMEND.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 18 окт 2019, 18:20 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3693
Откуда: Новосибирск
akl писал(а):
Пофиг порядок загрузки указателя стека. Тем более, что у этих камней он при подаче питания аппаратно устанавливается на RAMEND.

Минусую. Жёстко. За введение в заблуждение. Ты сам сейчас заблуждается и вводишь в заблуждение других. Если забыл, когда последний раз писал на асме, и писал ли вообще, прошу пройти мимо этой темы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 19 окт 2019, 00:12 
Старожил
Аватара пользователя

Зарегистрирован: 02 фев 2012, 02:14
Сообщения: 759
Откуда: Вiльна та самостiйна Баварiя
Ну вот, четырьмя инструкциями меньше :)
Вложение:
Комментарий к файлу: Datasheet ATtyni25/45/85 (08/2013)
StackPointer_Tyni45.PNG
StackPointer_Tyni45.PNG [ 15.82 Кб | Просмотров: 493 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 19 окт 2019, 01:13 
Заглядывает иногда

Зарегистрирован: 13 авг 2014, 19:13
Сообщения: 130
demiurg1978 писал(а):
Запись: сначала старший, затем младший. Чтение: сначала младший, затем старший. Мнемоническая запоминалка. Таймер тикает, пока читаешь старший байт, младшее значение убежит.

Спасибо.

Fahivec писал(а):
Ну вот, четырьмя инструкциями меньше :)
Вложение:
StackPointer_Tyni45.PNG

Ничего не имею против того, если это действительно имеет место быть. Однако как показала практика (буквально в этой теме) датиш на 45 тиньку писался не самыми пунктуальными людьми. Две ошибки на 10 строчек кода, как мне кажется это очень дохрена.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 19 окт 2019, 08:05 
Старожил

Зарегистрирован: 31 янв 2010, 16:53
Сообщения: 210
Откуда: Ижевск
demiurg1978 писал(а):
Ты сам сейчас заблуждается и вводишь в заблуждение других. Если забыл, когда последний раз писал на асме, и писал ли вообще, прошу пройти мимо этой темы.
Возвращаю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 19 окт 2019, 09:53 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3693
Откуда: Новосибирск
del


Последний раз редактировалось demiurg1978 19 окт 2019, 10:33, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 19 окт 2019, 10:12 
Старожил

Зарегистрирован: 31 янв 2010, 16:53
Сообщения: 210
Откуда: Ижевск
Погромист писал(а):
Ничего не имею против того, если это действительно имеет место быть. Однако как показала практика (буквально в этой теме) датиш на 45 тиньку писался не самыми пунктуальными людьми. Две ошибки на 10 строчек кода, как мне кажется это очень дохрена.
DS просто руководство к действию. Например, для tiny45 можно записать
Код:
SPITransfer_loop:
       out USICR,r16

   SBIS   USISR,USIOIF
   rjmp SPITransfer_loop

;       in r16, USISR
;       sbrs r16, USIOIF
;       rjmp SPITransfer_loop


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 19 окт 2019, 10:32 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3693
Откуда: Новосибирск
Беру свои слова назад. Оказывается, действительно Initial value регистра SP на этих камнях RAMEND.
Но это не отменяет правила записи чтения в регистры ввода-вывода. Регистра SP и рабочих регистров это не касается. Опять же в даташитах в примерах пишется именно в таком порядке. Запись: сначала старший, затем младший. Чтение: сначала младший, затем старший. И лучше придерживаться этого правила. Просто для того, чтобы в дальнейшем не путаться. Я себе завел именно такое правило-привычку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tiny 45 не запускается SPI и непонятки с регистрами.
СообщениеДобавлено: 19 окт 2019, 22:23 
Старожил
Аватара пользователя

Зарегистрирован: 02 фев 2012, 02:14
Сообщения: 759
Откуда: Вiльна та самостiйна Баварiя
Очень хорошая привычка! "На Datasheet надейся - а сам не плошай!"
Не каждый из нас может наизусть знать "..что там можно, что - нельзя.."
А перерывать кучу доки, да еще не на родном языке, часто не хватает усидчивости.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB