Evgenii Legotckoi
Evgenii Legotckoi26. August 2015 21:00

USI in Attiny24 - Einstellungen des Zweidrahtmodus

USI - Universal Serial Interface ist eigentlich eine Hardware zum seriellen Senden und Empfangen von Daten. Diese Schnittstelle ist keine vorgefertigte Lösung für ein bestimmtes Datenübertragungsprotokoll, ermöglicht aber eine komfortablere Datenübertragung als bei einer reinen Softwarelösung.

Die Essenz dieser Schnittstelle besteht darin, dass sie eine Hardwareebene zum Senden und Empfangen von seriellen Informationen bietet und die Logik des Protokolls bereits der Softwareimplementierung zugeordnet ist.


Beschreibung der USI-Register

Diese Schnittstelle enthält nur vier Register, die für ihren Betrieb verantwortlich sind:

  • USIDR - Datenregister
  • USIBR - Datenpufferregister
  • USISR - Schnittstellenstatusregister
  • USICR - Register der Steuerungs- und Schnittstelleneinstellungen

USIDR - USI-Datenregister

Auf Daten aus diesem Register kann direkt zugegriffen werden, während eine Kopie der Daten im Register USIBR zu finden ist. Dieses Register wird gleichzeitig zum Empfangen und Übertragen von Informationen verwendet.

USIBR – USI-Datenpuffer

Dieses Register ist schreibgeschützt, im Gegensatz zu USIDR In dieses Register werden Daten kopiert, die in das USIDR Register fallen, wenn Informationen von außen empfangen werden. Auf diese Weise können Sie den Informationsverlust durch eine erhöhte Belastung des Systems zum Empfangen und Übertragen von Informationen minimieren und dem Prozessor des Mikrocontrollers Zeit geben, die vorherigen Aufgaben zu erledigen, mit denen er beschäftigt ist.

USISR – USI-Statusregister

Das USI-Schnittstellenstatusregister enthält Unterbrechungsflags, Datenleitungsstatusflags und einen Zähler, der die Anzahl der Bits zählt, die an die Datenleitung übertragen werden müssen.

  • Bit 7 - USISIF : Startbedingungs-Interrupt-Flag - Flag zum Bestimmen der Startnachricht. Wird im Zweidrahtmodus verwendet. Durch das Schreiben eines gelöscht.
  • Bit 6 - USIOIF : Zählerüberlauf-Unterbrechungsflag - Zählerüberlauf-Unterbrechungsflag. Dieses Flag wird gesetzt, wenn alle Bits auf die Datenleitung übertragen wurden. Durch das Schreiben eines gelöscht.
  • Bit 5 - USIPF: Stop Condition Flag - Flag zur Bestimmung der Stoppbedingung, die auch im Zweidrahtmodus verwendet wird. Interessanterweise ist dieses Flag kein Interrupt-Flag. Durch das Schreiben eines gelöscht.
  • Bit 4 - USIDC : Datenausgangskollision - Dieses Bit wird verwendet, wenn der Master im Zweidrahtmodus arbitriert wird.
  • Bits 3: 0 - USICNT3: 0 : Zählerwert - Zählerbits. Der Zähler nimmt einen Wert von 0 bis 15 an, um 8 Bit zu übertragen. Der Zähler kann durch einen externen Einfluss, durch einen Timer oder durch einen Programmschalter inkrementiert werden, nämlich durch Setzen des USITC Bits im USICR Register. Was wird in diesem Artikel verwendet.

USICR – USI-Kontrollregister

Das Steuer- und Einstellungsregister enthält die Bits zum Aktivieren des Interrupts, Einstellen des Betriebsmodus, Auswählen der Quelle des Zählerstrobes für die Datenübertragung.

  • Bit 7 - USISIE : Startbedingungs-Interrupt-Freigabe - Aktiviert die Unterbrechung durch Startnachricht.
  • Bit 6 - USIOIE : Zählerüberlaufunterbrechung aktivieren - Aktiviert Zählerüberlaufunterbrechung.
  • Bit 5: 4 - USIWM1, USIWM0 : Drahtmodus - Einstellen des Datenübertragungsmodus.
  • Bit 3: 2 - USICS1, USICS0 : Taktquellenauswahl - Einstellungsbits der Zähler-Strobe-Quelle.
  • Bit 1 - USICLK : Clock Strobe - Strobe-Signalbit zum Verschieben von Daten in die Kommunikationsleitung.
  • Bit 0 - USITC : Toggle Clock Port Pin - Wenn dieses Bit auf 1 gesetzt ist, ändert sich der Zustand des ausgewählten Pins von 0 auf 1 oder von 1 auf 0 (was im Zweidrahtmodus wie ein SCL funktioniert). Linie).

Arbeiten mit der USI-Schnittstelle

In diesem Artikel wird eine Option zum Übertragen eines Informationsbytes an ein Zielgerät vorgestellt. Das Informationsbit wird weitergeschaltet, wenn sich der Zustand der SCL-Leitung von 0 auf 1 ändert. Die Schnittstelle selbst arbeitet im Zweidrahtbetrieb. Die Daten werden über die SDA-Leitung übertragen. Da der Zähler mit jeder Einstellung des USITC-Bits inkrementiert wird, ist es zur Übertragung von 8 Informationsbits erforderlich, das USITC-Bit 16-mal zu setzen, da die folgende Einstellung eine Option zeigt, bei der das Bit auf die Datenleitung übertragen wird nur wenn sich der Leitungszustand von 0 auf 1 ändert.

;======= Процедура инициализации USI в режиме TWO-wire mode =============================
 usi_init:
     sbi    PORTA,4       ; Устанавливаем в исходное состояние PORT SCL
     sbi    PORTA,6       ; Устанавливаем в исходное состояние PORT SDA
     sbi    DDRA,4        ; Устанавливаем в исходное состояние DDR SCL
     sbi    DDRA,6        ; Устанавливаем в исходное состояние DDR SDA
     ldi    r16,0xFF
     out    USIDR,r16
     ldi    r16,(0<<USISIE)|(0<<USIOIE)|(1<<USIWM1)|(0<<USIWM0)|(1<<USICS1)|(0<<USICS0)|(1<<USICLK)|(0<<USITC)  
                ; (0<<USISIE)|(0<<USIOIE) Запрещаем прерывания по счетчику и СТАРТу
                ; (1<<USIWM1)|(0<<USIWM0) Устанавливаем двухпроводной режим работы
                ; (1<<USICS1)|(0<<USICS0)|(1<<USICLK) настройка режима работы счетчика
                ; бит передаётся по смене состояния линии SCL с 0 до 1
                ; (0<<USITC) исходное состояние выхода тактового сигнала
     out    USICR,r16       ; Посылаем полученный байт в USICR
     ldi    r16,(1<<USISIF)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)|(0x0<<USICNT0) ; Очистка флагов и обнуляем счетчик
     out    USISR,r16       ; Посылаем полученный байт в USISR
     ret
 ;======= Посылка байта информации через интерфейс USI ===================================
 usi_send:
     out    USIDR,r16       ; Загружаем данные в USIDR
     ldi    r16,0xF0        ; Установка счетчика USISR для передачи 8 бит информации
     out    USISR,r16       ; Посылаем полученный байт в USISR
     ldi    r16,(0<<USISIE)|(0<<USIOIE)|(1<<USIWM1)|(0<<USIWM0)|(1<<USICS1)|(0<<USICS0)|(1<<USICLK)|(1<<USITC)  
                ; (0<<USISIE)|(0<<USIOIE) Запрещаем прерывания по счетчику и СТАРТу
                ; (1<<USIWM1)|(0<<USIWM0) Устанавливаем двухпроводной режим работы
                ; (1<<USICS1)|(0<<USICS0)|(1<<USICLK) настройка режима работы счетчика
                ; (1<<USITC) исходное состояние выхода тактового сигнала
 transfer:
     out    USICR,r16       ; Посылаем полученный байт в USICR
     out    USICR,r16       ; Посылаем полученный байт в USICR
     in     r17,USISR
     sbrs   r17,6
     rjmp   transfer
     ldi    r16,(1<<USISIF)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)|(0x0<<USICNT0) ; Очистка флагов
     out    USISR,r16       ; Посылаем полученный байт в USISR
     ret
 ;========================================================================================
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken