Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

MSP 430 - Adresowanie wejść / wyjść

Mientek007 15 Mar 2016 20:30 543 2
  • #1 15 Mar 2016 20:30
    Mientek007
    Uczeń

    Witam.
    Dopiero co uczę się MSP 430 i piszę pierwsze proste programy typu migająca dioda (programowałem już w C, ale nigdy nie programowałem mikrokontrolerów)
    Mam kilka pytań, gdyż nie do końca rozumiem jak zarządzamy adresami wejść/wyjść

    Posiadam płytkę LaunchPad z prockiem MSP430G2553.
    Mam prosty program typu migające diody, który na przemian zapala diody. Raz jedną, raz drugą.

    Oto on:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dlaczego tutaj mamy teraz 0x01 i 0x40?
    W MSP430G2553 mamy 16 wejści/wyjść
    Skąd mam wiedzieć w jaki sposób w programie odnosić się do konkretnego wejścia / wyjścia ?
    W jaki sposób przebiega adresowanie wejść / wyjść ?

    Próbowałem znaleźć przyporządkowanie adresów wejść/wyjść do poszczególnych nóżek układu w instrukcji producenta
    http://www.ti.com/lit/ds/symlink/msp430g2553.pdf
    Ale nie ma... a raczej moje małe doświadczenie nie pozwoliło na znalezienie tego w tym dokumencie, gdyż widocznie nie jest to napisane "wprost"

    Byłbym bardzo wdzięczny za pomoc i rozjaśnienie nieco sprawy.
    Pozdrawiam i z góry dziękuję

    0 2
  • #2 15 Mar 2016 20:43
    vonar
    Poziom 28  

    To co zalinkowałeś to nie instrukcja, tylko karta katalogowa. Instrukcję znajdziesz pod tytułem "MSP430x2xx Family User's Guide". Zajrzyj do rozdziału "Digital I/O" tamże, a się wszystko wyjaśni.

    Popraw swój post - blok kodu ma być w znacznikach syntax.

    0
  • #3 15 Mar 2016 21:08
    ZbeeGin
    Poziom 38  

    Generalnie powinieneś posiłkować się nie notą samego procesora, a podręcznikiem użytkownika dla całej rodziny: http://www.ti.com/lit/ug/slau144j/slau144j.pdf

    P1DIR to rejestr w którym poszczególne bity definiują kierunek działania poszczególnych pinów P1.0-P1.7 portu P1. Stan 0 oznacza wejście, stan 1 oznacza wyjście.
    Zapis P1OUT |= 0x41 jest równoważny bitowo P1OUT |= 0b01000001, zatem piny P1.0 oraz P1.6 będą wyjściami, reszta popracuje tak jak ustawiono je wcześniej, gdyż robimy tu operację bitową OR z poprzednią zawartością a nie nadajemy arbitralną wartość całemu rejestrowi.
    P1OUT = 0x40 spowoduje, że na bicie 6 znów pojawi się jedynka (0b01000000). Zatem na P1.6 pojawi się stan wysoki i zostanie przekazany na wyjście, bo wcześniej ustawiliśmy taki tryb pracy tego pinu.

    Mientek007 napisał:
    P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR
    P1OUT^= 0x40;

    Tutaj mamy podobną sytuację co w przypadku P1DIR. Znowu mamy rozwinięcia bitowe, które w połączeniu z operacją XOR jaka tu występuj dadzą nam przełączenie stanu P1.0 na przeciwny w pierwszej instrukcji (maska bitowa 0b00000001). W drugiej zaś przełączy się stan P1.6 (maska bitowa 0b01000000).
    Równie dobrze można było napisać P1OUT ^= 0x41 co dałoby wizualnie ten sam efekt, bo naraz przełączamy i P1.6 i P1.0. Różnicę dałoby się dopiero zauważyć na oscyloskopie. Występowałby brak opóźnienia pomiędzy zmianą stanu P1.6 a zmianą stanu P1.0.

    0