SPI sending function The Next CEO of Stack OverflowSPI to soft UARTMonitor/Debug SPI using another GPIO Pin?SPI sclk no outputHelp understanding + hacking spi-bcm2708.cCan Raspberry PI function as SPI slave?SPI device errorfilenotfounderror with SPI functionConnect SPI display to raspberry pi zeroWhat's wrong with my SPI interface?How could I write a C function using the wiringPi SPI library to read the X and Y measurements from this 2-axis inclinometer?

How exploitable/balanced is this homebrew spell: Spell Permanency?

Man transported from Alternate World into ours by a Neutrino Detector

Are British MPs missing the point, with these 'Indicative Votes'?

Why did the Drakh emissary look so blurred in S04:E11 "Lines of Communication"?

Would a grinding machine be a simple and workable propulsion system for an interplanetary spacecraft?

Shortening a title without changing its meaning

Is it correct to say moon starry nights?

Horror film about a man brought out of cryogenic suspension without a soul, around 1990

Simplify trigonometric expression using trigonometric identities

Is there a rule of thumb for determining the amount one should accept for of a settlement offer?

Masking layers by a vector polygon layer in QGIS

Can I cast Thunderwave and be at the center of its bottom face, but not be affected by it?

Percent Dissociated from Titration Curve

How do I keep Mac Emacs from trapping M-`?

What steps are necessary to read a Modern SSD in Medieval Europe?

How can I force the size of an int for debugging purposes?

Another proof that dividing by 0 does not exist -- is it right?

Is it reasonable to ask other researchers to send me their previous grant applications?

Incomplete cube

My ex-girlfriend uses my Apple ID to login to her iPad, do I have to give her my Apple ID password to reset it?

Mathematica command that allows it to read my intentions

How can I prove that a state of equilibrium is unstable?

Ising model simulation

Is it possible to create a QR code using text?



SPI sending function



The Next CEO of Stack OverflowSPI to soft UARTMonitor/Debug SPI using another GPIO Pin?SPI sclk no outputHelp understanding + hacking spi-bcm2708.cCan Raspberry PI function as SPI slave?SPI device errorfilenotfounderror with SPI functionConnect SPI display to raspberry pi zeroWhat's wrong with my SPI interface?How could I write a C function using the wiringPi SPI library to read the X and Y measurements from this 2-axis inclinometer?










1















I'm currently reworking a project from someone who graduated a few years back and I'm supposed to change the function of his work for a bit.



I have trouble understanding these few lines from SPI communication, how does this work? :



 *ptr = (3<<4) | (1<<7); //clear
*(ptr +SPI_FIFO) = udata2>>8;
*(ptr +SPI_FIFO) = udata2;
while (!(*ptr & (1 << 16))); // Transfer DONE

*ptr &= ~(1<<7);

*ptr = (3<<4) | (1<<7) | (1<<0); //clear
*(ptr +SPI_FIFO) = udata1>>8;
*(ptr +SPI_FIFO) = udata1;
while (!(*ptr & (1<<16))); // Transfer DONE
*ptr &= ~(1<<7);


To explain what I know: The function 'send' expects 2 float values in interval <-1;1> and through circuits it changes output voltage from minimum of -12.5V to maximum of 12.5V.
When I tried to send various values to function from interval it got stuck on:



 while (!(*ptr & (1 << 16)));


As I investigated the code more I realized that either I'm dumb or the person who wrote this is dumb because how does this work ?



 *(ptr +SPI_FIFO) = udata2>>8;
*(ptr +SPI_FIFO) = udata2;


Any help is appreciated.
Thank you.



If needed the whole code is below.



SPI.h:



#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>


#ifndef _SPI
#define _SPI

#define IOBASE 0x20000000
#define GPIO_BASE (IOBASE + 0x200000)
#define SPI0_BASE (IOBASE + 0x204000)
#define TIMER_BASE (IOBASE + 0x3000)

//SPI
#define SPI_CS 0
#define SPI_FIFO 1
#define SPI_CLK 2
#define SPI_DLEN 3
#define SPI_LTOH 4
#define SPI_DC 5



class SPI

int fd;
volatile unsigned int* ptr;
volatile unsigned int* uk_GPIO;
public:
SPI();
~SPI();
void inline send(float, float);
int connected(void);
;

#endif


SPI.cpp:



#include "SPI.h"
#include <cstdlib>

SPI::SPI()
O_SYNC) ) < 0)

ptr = 0;
printf("SPI ERROR");
return;

ptr = (volatile unsigned int *)mmap(NULL,4096,PROT_READ

void inline SPI::send(float data1, float data2)
(1<<7); //clear
*(ptr +SPI_FIFO) = udata2>>8;
*(ptr +SPI_FIFO) = udata2;
while (!(*ptr & (1 << 16))); // Transfer DONE

*ptr &= ~(1<<7);

*ptr = (3<<4)
SPI::~SPI()

munmap((void*)ptr,4096);
close(fd);


int SPI::connected(void)











share|improve this question









New contributor




Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
























    1















    I'm currently reworking a project from someone who graduated a few years back and I'm supposed to change the function of his work for a bit.



    I have trouble understanding these few lines from SPI communication, how does this work? :



     *ptr = (3<<4) | (1<<7); //clear
    *(ptr +SPI_FIFO) = udata2>>8;
    *(ptr +SPI_FIFO) = udata2;
    while (!(*ptr & (1 << 16))); // Transfer DONE

    *ptr &= ~(1<<7);

    *ptr = (3<<4) | (1<<7) | (1<<0); //clear
    *(ptr +SPI_FIFO) = udata1>>8;
    *(ptr +SPI_FIFO) = udata1;
    while (!(*ptr & (1<<16))); // Transfer DONE
    *ptr &= ~(1<<7);


    To explain what I know: The function 'send' expects 2 float values in interval <-1;1> and through circuits it changes output voltage from minimum of -12.5V to maximum of 12.5V.
    When I tried to send various values to function from interval it got stuck on:



     while (!(*ptr & (1 << 16)));


    As I investigated the code more I realized that either I'm dumb or the person who wrote this is dumb because how does this work ?



     *(ptr +SPI_FIFO) = udata2>>8;
    *(ptr +SPI_FIFO) = udata2;


    Any help is appreciated.
    Thank you.



    If needed the whole code is below.



    SPI.h:



    #include <sys/mman.h>
    #include <fcntl.h>
    #include <unistd.h>


    #ifndef _SPI
    #define _SPI

    #define IOBASE 0x20000000
    #define GPIO_BASE (IOBASE + 0x200000)
    #define SPI0_BASE (IOBASE + 0x204000)
    #define TIMER_BASE (IOBASE + 0x3000)

    //SPI
    #define SPI_CS 0
    #define SPI_FIFO 1
    #define SPI_CLK 2
    #define SPI_DLEN 3
    #define SPI_LTOH 4
    #define SPI_DC 5



    class SPI

    int fd;
    volatile unsigned int* ptr;
    volatile unsigned int* uk_GPIO;
    public:
    SPI();
    ~SPI();
    void inline send(float, float);
    int connected(void);
    ;

    #endif


    SPI.cpp:



    #include "SPI.h"
    #include <cstdlib>

    SPI::SPI()
    O_SYNC) ) < 0)

    ptr = 0;
    printf("SPI ERROR");
    return;

    ptr = (volatile unsigned int *)mmap(NULL,4096,PROT_READ

    void inline SPI::send(float data1, float data2)
    (1<<7); //clear
    *(ptr +SPI_FIFO) = udata2>>8;
    *(ptr +SPI_FIFO) = udata2;
    while (!(*ptr & (1 << 16))); // Transfer DONE

    *ptr &= ~(1<<7);

    *ptr = (3<<4)
    SPI::~SPI()

    munmap((void*)ptr,4096);
    close(fd);


    int SPI::connected(void)











    share|improve this question









    New contributor




    Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.






















      1












      1








      1








      I'm currently reworking a project from someone who graduated a few years back and I'm supposed to change the function of his work for a bit.



      I have trouble understanding these few lines from SPI communication, how does this work? :



       *ptr = (3<<4) | (1<<7); //clear
      *(ptr +SPI_FIFO) = udata2>>8;
      *(ptr +SPI_FIFO) = udata2;
      while (!(*ptr & (1 << 16))); // Transfer DONE

      *ptr &= ~(1<<7);

      *ptr = (3<<4) | (1<<7) | (1<<0); //clear
      *(ptr +SPI_FIFO) = udata1>>8;
      *(ptr +SPI_FIFO) = udata1;
      while (!(*ptr & (1<<16))); // Transfer DONE
      *ptr &= ~(1<<7);


      To explain what I know: The function 'send' expects 2 float values in interval <-1;1> and through circuits it changes output voltage from minimum of -12.5V to maximum of 12.5V.
      When I tried to send various values to function from interval it got stuck on:



       while (!(*ptr & (1 << 16)));


      As I investigated the code more I realized that either I'm dumb or the person who wrote this is dumb because how does this work ?



       *(ptr +SPI_FIFO) = udata2>>8;
      *(ptr +SPI_FIFO) = udata2;


      Any help is appreciated.
      Thank you.



      If needed the whole code is below.



      SPI.h:



      #include <sys/mman.h>
      #include <fcntl.h>
      #include <unistd.h>


      #ifndef _SPI
      #define _SPI

      #define IOBASE 0x20000000
      #define GPIO_BASE (IOBASE + 0x200000)
      #define SPI0_BASE (IOBASE + 0x204000)
      #define TIMER_BASE (IOBASE + 0x3000)

      //SPI
      #define SPI_CS 0
      #define SPI_FIFO 1
      #define SPI_CLK 2
      #define SPI_DLEN 3
      #define SPI_LTOH 4
      #define SPI_DC 5



      class SPI

      int fd;
      volatile unsigned int* ptr;
      volatile unsigned int* uk_GPIO;
      public:
      SPI();
      ~SPI();
      void inline send(float, float);
      int connected(void);
      ;

      #endif


      SPI.cpp:



      #include "SPI.h"
      #include <cstdlib>

      SPI::SPI()
      O_SYNC) ) < 0)

      ptr = 0;
      printf("SPI ERROR");
      return;

      ptr = (volatile unsigned int *)mmap(NULL,4096,PROT_READ

      void inline SPI::send(float data1, float data2)
      (1<<7); //clear
      *(ptr +SPI_FIFO) = udata2>>8;
      *(ptr +SPI_FIFO) = udata2;
      while (!(*ptr & (1 << 16))); // Transfer DONE

      *ptr &= ~(1<<7);

      *ptr = (3<<4)
      SPI::~SPI()

      munmap((void*)ptr,4096);
      close(fd);


      int SPI::connected(void)











      share|improve this question









      New contributor




      Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.












      I'm currently reworking a project from someone who graduated a few years back and I'm supposed to change the function of his work for a bit.



      I have trouble understanding these few lines from SPI communication, how does this work? :



       *ptr = (3<<4) | (1<<7); //clear
      *(ptr +SPI_FIFO) = udata2>>8;
      *(ptr +SPI_FIFO) = udata2;
      while (!(*ptr & (1 << 16))); // Transfer DONE

      *ptr &= ~(1<<7);

      *ptr = (3<<4) | (1<<7) | (1<<0); //clear
      *(ptr +SPI_FIFO) = udata1>>8;
      *(ptr +SPI_FIFO) = udata1;
      while (!(*ptr & (1<<16))); // Transfer DONE
      *ptr &= ~(1<<7);


      To explain what I know: The function 'send' expects 2 float values in interval <-1;1> and through circuits it changes output voltage from minimum of -12.5V to maximum of 12.5V.
      When I tried to send various values to function from interval it got stuck on:



       while (!(*ptr & (1 << 16)));


      As I investigated the code more I realized that either I'm dumb or the person who wrote this is dumb because how does this work ?



       *(ptr +SPI_FIFO) = udata2>>8;
      *(ptr +SPI_FIFO) = udata2;


      Any help is appreciated.
      Thank you.



      If needed the whole code is below.



      SPI.h:



      #include <sys/mman.h>
      #include <fcntl.h>
      #include <unistd.h>


      #ifndef _SPI
      #define _SPI

      #define IOBASE 0x20000000
      #define GPIO_BASE (IOBASE + 0x200000)
      #define SPI0_BASE (IOBASE + 0x204000)
      #define TIMER_BASE (IOBASE + 0x3000)

      //SPI
      #define SPI_CS 0
      #define SPI_FIFO 1
      #define SPI_CLK 2
      #define SPI_DLEN 3
      #define SPI_LTOH 4
      #define SPI_DC 5



      class SPI

      int fd;
      volatile unsigned int* ptr;
      volatile unsigned int* uk_GPIO;
      public:
      SPI();
      ~SPI();
      void inline send(float, float);
      int connected(void);
      ;

      #endif


      SPI.cpp:



      #include "SPI.h"
      #include <cstdlib>

      SPI::SPI()
      O_SYNC) ) < 0)

      ptr = 0;
      printf("SPI ERROR");
      return;

      ptr = (volatile unsigned int *)mmap(NULL,4096,PROT_READ

      void inline SPI::send(float data1, float data2)
      (1<<7); //clear
      *(ptr +SPI_FIFO) = udata2>>8;
      *(ptr +SPI_FIFO) = udata2;
      while (!(*ptr & (1 << 16))); // Transfer DONE

      *ptr &= ~(1<<7);

      *ptr = (3<<4)
      SPI::~SPI()

      munmap((void*)ptr,4096);
      close(fd);


      int SPI::connected(void)








      gpio spi c++ c






      share|improve this question









      New contributor




      Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question









      New contributor




      Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question








      edited 2 days ago







      Dominik Ficek













      New contributor




      Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 2 days ago









      Dominik FicekDominik Ficek

      83




      83




      New contributor




      Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




















          1 Answer
          1






          active

          oldest

          votes


















          2














          You need to refer to the BCM2835 ARM Peripherals document.



          It specifies many of the Pi's hardware interfaces.



          In this case SPI appears to be the main SPI device documented from page 148.



          *ptr = (3<<4) | (1<<7); // 1
          *(ptr +SPI_FIFO) = udata2>>8; // 2
          *(ptr +SPI_FIFO) = udata2; // 3
          while (!(*ptr & (1 << 16))); // 4


          ptr is a word pointer(32 bits) to the base of the SPI registers (the CS register).



          1. clears the FIFOs and starts SPI.

          2. writes the MSB of udata2 to the hardware FIFO.

          3. writes the LSB of udata2 to the hardware FIFO.

          4. spins until the CS register indicates the transfer is complete.

          Note that writing to the hardware FIFO address adds a byte to the transmit FIFO, reading from the hardware FIFO address removes a byte from the receive FIFO.



          It may be worthwhile to point out that this code may have been written before the availability of the Pi Linux SPI driver. I would suggest you now use the Linux SPI driver.






          share|improve this answer























          • Thank you this is certainly helpful. I have one more question, what is it that changes the value of CS register so it indicates the completion of transfer? I'm clearly stuck at that, I never leave the 4th point.

            – Dominik Ficek
            2 days ago











          • Bit 16 being set in the CS register indicates the transfer is complete. See page 154. The hardware sets it.

            – joan
            2 days ago











          • I would highly recommend switching to the available linux driver if possible

            – crasic
            yesterday











          Your Answer






          StackExchange.ifUsing("editor", function ()
          return StackExchange.using("schematics", function ()
          StackExchange.schematics.init();
          );
          , "cicuitlab");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "447"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );






          Dominik Ficek is a new contributor. Be nice, and check out our Code of Conduct.









          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fraspberrypi.stackexchange.com%2fquestions%2f95968%2fspi-sending-function%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          2














          You need to refer to the BCM2835 ARM Peripherals document.



          It specifies many of the Pi's hardware interfaces.



          In this case SPI appears to be the main SPI device documented from page 148.



          *ptr = (3<<4) | (1<<7); // 1
          *(ptr +SPI_FIFO) = udata2>>8; // 2
          *(ptr +SPI_FIFO) = udata2; // 3
          while (!(*ptr & (1 << 16))); // 4


          ptr is a word pointer(32 bits) to the base of the SPI registers (the CS register).



          1. clears the FIFOs and starts SPI.

          2. writes the MSB of udata2 to the hardware FIFO.

          3. writes the LSB of udata2 to the hardware FIFO.

          4. spins until the CS register indicates the transfer is complete.

          Note that writing to the hardware FIFO address adds a byte to the transmit FIFO, reading from the hardware FIFO address removes a byte from the receive FIFO.



          It may be worthwhile to point out that this code may have been written before the availability of the Pi Linux SPI driver. I would suggest you now use the Linux SPI driver.






          share|improve this answer























          • Thank you this is certainly helpful. I have one more question, what is it that changes the value of CS register so it indicates the completion of transfer? I'm clearly stuck at that, I never leave the 4th point.

            – Dominik Ficek
            2 days ago











          • Bit 16 being set in the CS register indicates the transfer is complete. See page 154. The hardware sets it.

            – joan
            2 days ago











          • I would highly recommend switching to the available linux driver if possible

            – crasic
            yesterday















          2














          You need to refer to the BCM2835 ARM Peripherals document.



          It specifies many of the Pi's hardware interfaces.



          In this case SPI appears to be the main SPI device documented from page 148.



          *ptr = (3<<4) | (1<<7); // 1
          *(ptr +SPI_FIFO) = udata2>>8; // 2
          *(ptr +SPI_FIFO) = udata2; // 3
          while (!(*ptr & (1 << 16))); // 4


          ptr is a word pointer(32 bits) to the base of the SPI registers (the CS register).



          1. clears the FIFOs and starts SPI.

          2. writes the MSB of udata2 to the hardware FIFO.

          3. writes the LSB of udata2 to the hardware FIFO.

          4. spins until the CS register indicates the transfer is complete.

          Note that writing to the hardware FIFO address adds a byte to the transmit FIFO, reading from the hardware FIFO address removes a byte from the receive FIFO.



          It may be worthwhile to point out that this code may have been written before the availability of the Pi Linux SPI driver. I would suggest you now use the Linux SPI driver.






          share|improve this answer























          • Thank you this is certainly helpful. I have one more question, what is it that changes the value of CS register so it indicates the completion of transfer? I'm clearly stuck at that, I never leave the 4th point.

            – Dominik Ficek
            2 days ago











          • Bit 16 being set in the CS register indicates the transfer is complete. See page 154. The hardware sets it.

            – joan
            2 days ago











          • I would highly recommend switching to the available linux driver if possible

            – crasic
            yesterday













          2












          2








          2







          You need to refer to the BCM2835 ARM Peripherals document.



          It specifies many of the Pi's hardware interfaces.



          In this case SPI appears to be the main SPI device documented from page 148.



          *ptr = (3<<4) | (1<<7); // 1
          *(ptr +SPI_FIFO) = udata2>>8; // 2
          *(ptr +SPI_FIFO) = udata2; // 3
          while (!(*ptr & (1 << 16))); // 4


          ptr is a word pointer(32 bits) to the base of the SPI registers (the CS register).



          1. clears the FIFOs and starts SPI.

          2. writes the MSB of udata2 to the hardware FIFO.

          3. writes the LSB of udata2 to the hardware FIFO.

          4. spins until the CS register indicates the transfer is complete.

          Note that writing to the hardware FIFO address adds a byte to the transmit FIFO, reading from the hardware FIFO address removes a byte from the receive FIFO.



          It may be worthwhile to point out that this code may have been written before the availability of the Pi Linux SPI driver. I would suggest you now use the Linux SPI driver.






          share|improve this answer













          You need to refer to the BCM2835 ARM Peripherals document.



          It specifies many of the Pi's hardware interfaces.



          In this case SPI appears to be the main SPI device documented from page 148.



          *ptr = (3<<4) | (1<<7); // 1
          *(ptr +SPI_FIFO) = udata2>>8; // 2
          *(ptr +SPI_FIFO) = udata2; // 3
          while (!(*ptr & (1 << 16))); // 4


          ptr is a word pointer(32 bits) to the base of the SPI registers (the CS register).



          1. clears the FIFOs and starts SPI.

          2. writes the MSB of udata2 to the hardware FIFO.

          3. writes the LSB of udata2 to the hardware FIFO.

          4. spins until the CS register indicates the transfer is complete.

          Note that writing to the hardware FIFO address adds a byte to the transmit FIFO, reading from the hardware FIFO address removes a byte from the receive FIFO.



          It may be worthwhile to point out that this code may have been written before the availability of the Pi Linux SPI driver. I would suggest you now use the Linux SPI driver.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 2 days ago









          joanjoan

          50.3k35183




          50.3k35183












          • Thank you this is certainly helpful. I have one more question, what is it that changes the value of CS register so it indicates the completion of transfer? I'm clearly stuck at that, I never leave the 4th point.

            – Dominik Ficek
            2 days ago











          • Bit 16 being set in the CS register indicates the transfer is complete. See page 154. The hardware sets it.

            – joan
            2 days ago











          • I would highly recommend switching to the available linux driver if possible

            – crasic
            yesterday

















          • Thank you this is certainly helpful. I have one more question, what is it that changes the value of CS register so it indicates the completion of transfer? I'm clearly stuck at that, I never leave the 4th point.

            – Dominik Ficek
            2 days ago











          • Bit 16 being set in the CS register indicates the transfer is complete. See page 154. The hardware sets it.

            – joan
            2 days ago











          • I would highly recommend switching to the available linux driver if possible

            – crasic
            yesterday
















          Thank you this is certainly helpful. I have one more question, what is it that changes the value of CS register so it indicates the completion of transfer? I'm clearly stuck at that, I never leave the 4th point.

          – Dominik Ficek
          2 days ago





          Thank you this is certainly helpful. I have one more question, what is it that changes the value of CS register so it indicates the completion of transfer? I'm clearly stuck at that, I never leave the 4th point.

          – Dominik Ficek
          2 days ago













          Bit 16 being set in the CS register indicates the transfer is complete. See page 154. The hardware sets it.

          – joan
          2 days ago





          Bit 16 being set in the CS register indicates the transfer is complete. See page 154. The hardware sets it.

          – joan
          2 days ago













          I would highly recommend switching to the available linux driver if possible

          – crasic
          yesterday





          I would highly recommend switching to the available linux driver if possible

          – crasic
          yesterday










          Dominik Ficek is a new contributor. Be nice, and check out our Code of Conduct.









          draft saved

          draft discarded


















          Dominik Ficek is a new contributor. Be nice, and check out our Code of Conduct.












          Dominik Ficek is a new contributor. Be nice, and check out our Code of Conduct.











          Dominik Ficek is a new contributor. Be nice, and check out our Code of Conduct.














          Thanks for contributing an answer to Raspberry Pi Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fraspberrypi.stackexchange.com%2fquestions%2f95968%2fspi-sending-function%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          រឿង រ៉ូមេអូ និង ហ្ស៊ុយលីយេ សង្ខេបរឿង តួអង្គ បញ្ជីណែនាំ

          Crop image to path created in TikZ? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Crop an inserted image?TikZ pictures does not appear in posterImage behind and beyond crop marks?Tikz picture as large as possible on A4 PageTransparency vs image compression dilemmaHow to crop background from image automatically?Image does not cropTikzexternal capturing crop marks when externalizing pgfplots?How to include image path that contains a dollar signCrop image with left size given

          Romeo and Juliet ContentsCharactersSynopsisSourcesDate and textThemes and motifsCriticism and interpretationLegacyScene by sceneSee alsoNotes and referencesSourcesExternal linksNavigation menu"Consumer Price Index (estimate) 1800–"10.2307/28710160037-3222287101610.1093/res/II.5.31910.2307/45967845967810.2307/2869925286992510.1525/jams.1982.35.3.03a00050"Dada Masilo: South African dancer who breaks the rules"10.1093/res/os-XV.57.1610.2307/28680942868094"Sweet Sorrow: Mann-Korman's Romeo and Juliet Closes Sept. 5 at MN's Ordway"the original10.2307/45957745957710.1017/CCOL0521570476.009"Ram Leela box office collections hit massive Rs 100 crore, pulverises prediction"Archived"Broadway Revival of Romeo and Juliet, Starring Orlando Bloom and Condola Rashad, Will Close Dec. 8"Archived10.1075/jhp.7.1.04hon"Wherefore art thou, Romeo? To make us laugh at Navy Pier"the original10.1093/gmo/9781561592630.article.O006772"Ram-leela Review Roundup: Critics Hail Film as Best Adaptation of Romeo and Juliet"Archived10.2307/31946310047-77293194631"Romeo and Juliet get Twitter treatment""Juliet's Nurse by Lois Leveen""Romeo and Juliet: Orlando Bloom's Broadway Debut Released in Theaters for Valentine's Day"Archived"Romeo and Juliet Has No Balcony"10.1093/gmo/9781561592630.article.O00778110.2307/2867423286742310.1076/enst.82.2.115.959510.1080/00138380601042675"A plague o' both your houses: error in GCSE exam paper forces apology""Juliet of the Five O'Clock Shadow, and Other Wonders"10.2307/33912430027-4321339124310.2307/28487440038-7134284874410.2307/29123140149-661129123144728341M"Weekender Guide: Shakespeare on The Drive""balcony"UK public library membership"romeo"UK public library membership10.1017/CCOL9780521844291"Post-Zionist Critique on Israel and the Palestinians Part III: Popular Culture"10.2307/25379071533-86140377-919X2537907"Capulets and Montagues: UK exam board admit mixing names up in Romeo and Juliet paper"Istoria Novellamente Ritrovata di Due Nobili Amanti2027/mdp.390150822329610820-750X"GCSE exam error: Board accidentally rewrites Shakespeare"10.2307/29176390149-66112917639"Exam board apologises after error in English GCSE paper which confused characters in Shakespeare's Romeo and Juliet""From Mariotto and Ganozza to Romeo and Guilietta: Metamorphoses of a Renaissance Tale"10.2307/37323537323510.2307/2867455286745510.2307/28678912867891"10 Questions for Taylor Swift"10.2307/28680922868092"Haymarket Theatre""The Zeffirelli Way: Revealing Talk by Florentine Director""Michael Smuin: 1938-2007 / Prolific dance director had showy career"The Life and Art of Edwin BoothRomeo and JulietRomeo and JulietRomeo and JulietRomeo and JulietEasy Read Romeo and JulietRomeo and Julieteeecb12003684p(data)4099369-3n8211610759dbe00d-a9e2-41a3-b2c1-977dd692899302814385X313670221313670221