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.

[spi]2x8 bitow do 16 bitowego rejestru [asm30]

xsv 03 Maj 2011 16:40 1275 6
  • #1 03 Maj 2011 16:40
    xsv
    Poziom 9  

    witam,

    na wej. dostaje sygnał 16 bitowy, spi ustawione jest na obsługę 8 bitów, potrzebuję wewnątrz uC połączyć te dwie części do rejestru 16 bitowego na którym tam sobie będę robił coś dalej,

    mam pytanie do was drodzy forumowicze jak wpisać dwie dane wejściowe do dwóch kolejnych rejestrów, (z operacją scalenia powinienem dać sobie radę)

    p.s. oczywiście wszystko w asm30


    pozdrawiam

    0 6
  • #2 04 Maj 2011 07:27
    adamwesola
    Poziom 24  

    Sprzętowe spi ??? Nie możesz odebrać 16 bitów ???
    Opisz precyzyjnie problem.

    0
  • #3 07 Maj 2011 21:26
    xsv
    Poziom 9  

    witam,
    mam przetwornik 16 bitowy analog/cyfra, oraz mikrokontroler pic24f, realizuje algorytm kodowania G.711 ktory to potrzebuje 14 bitow na wejściu a na wyjściu otrzymuje 8 bitów, ze specyfikacji uC zrozumiałem że zmiana sposobu przesyłania danych po SPI ( i tu chodzi mi o wielkość słowa przesyłanego) wiąże się z resetem, stąd domyślam się że najlepiej było by ustawić SPI aby działało w trybie 8 bitów, które to po odebraniu scalał bym, kodował i wysyłał poprzez SDO na zewnątrz, jak do tej pory zmontowałem taki o to fragment kodu

    bufw1:
    btss SPI1STAT, 0 - czekamy aż bajt zostanie odebrany
    bra bufw1
    mov SPI1BUF, W1

    podobnie z drugim bajtem

    bufw2:
    btss SPI1STAT, 0
    bra bufw2
    mov SPI1BUF, W2

    SL W2, #8, W3
    MOV.B W1,W3

    p.s. czy aby odebrac coś z SPI muszę wysłać cokolwiek na SDO mikrokontrolera ?
    p.s.2 czy moze jest latwiejszy i szybszy sposob ? zalezy mi tez na optymalizacji

    0
  • #4 07 Maj 2011 22:06
    adamwesola
    Poziom 24  

    "wysłać cokolwiek na SDO" - zapewne trzeba wysłac komendę do przetwornika, nakazującą mu odczyt z rejestru wyniku
    być może nawet komende startu przetwarzania, moze tez komendy do rejestru konfiguracji - analogicznie do adc w procesorze.
    Podaj nazwę tego adc.
    Prostszego kodu niż zademonstrowałes, już nie ma.
    Sygnał CS dla przetwornika wystawiasz "ręcznie" ? wiec odpowiednie operowanie nim.

    0
  • #5 09 Maj 2011 21:01
    xsv
    Poziom 9  

    SDO to po prostu pin uC przeznaczony do wysyłania danych po szynie SPI

    wykorzystam przetwornik ads8320 TI,

    sam uC pracuje w trybie master i ma pobierać dane z czestot. 8 kHz, do tego wykorzystuje Timer który co jakis czas wywołuje przerwanie, a ono właściwą część programu,

    czy układ SPI w uC działa w ten sposób, że wysyła bit na SDO jednocześnie pobierając bit z SDI ?

    0
  • #6 10 Maj 2011 06:37
    adamwesola
    Poziom 24  

    Nic na SDO nie musisz wysłać , by otrzymać dane na SDI.
    Z dataszita przetwornika wynika ze potrzebujesz 3 ośmiobitowe odczyty z ads8320. Albo w trybie spi-16bit - 2 odczyty, potem odpowiednia obróbka wyniku, w asemblerze zrobisz ja bez problemu - to precyzyjne narzędzie.

    0
  • #7 16 Maj 2011 21:49
    xsv
    Poziom 9  

    dzięki wielkie za rozwianie wątpliwości

    :)

    0