大华彩票

  • <tr id='daX2WM'><strong id='daX2WM'></strong><small id='daX2WM'></small><button id='daX2WM'></button><li id='daX2WM'><noscript id='daX2WM'><big id='daX2WM'></big><dt id='daX2WM'></dt></noscript></li></tr><ol id='daX2WM'><option id='daX2WM'><table id='daX2WM'><blockquote id='daX2WM'><tbody id='daX2WM'></tbody></blockquote></table></option></ol><u id='daX2WM'></u><kbd id='daX2WM'><kbd id='daX2WM'></kbd></kbd>

    <code id='daX2WM'><strong id='daX2WM'></strong></code>

    <fieldset id='daX2WM'></fieldset>
          <span id='daX2WM'></span>

              <ins id='daX2WM'></ins>
              <acronym id='daX2WM'><em id='daX2WM'></em><td id='daX2WM'><div id='daX2WM'></div></td></acronym><address id='daX2WM'><big id='daX2WM'><big id='daX2WM'></big><legend id='daX2WM'></legend></big></address>

              <i id='daX2WM'><div id='daX2WM'><ins id='daX2WM'></ins></div></i>
              <i id='daX2WM'></i>
            1. <dl id='daX2WM'></dl>
              1. <blockquote id='daX2WM'><q id='daX2WM'><noscript id='daX2WM'></noscript><dt id='daX2WM'></dt></q></blockquote><noframes id='daX2WM'><i id='daX2WM'></i>

                技术支持Technical

                Am335x 应用层之SPI操作

                时间:2016-12-02     作者:


                AM335X的SPI接口有四种不同的数据传输时序,取决于CPOL和CPHL这两位的组合。图1中表现了这四种时序,时序与CPOL、CPHL的关系也可以从图中看出。

                1111551424.jpg

                CPOL是用来决定SCK时钟信号空闲时的电平,CPOL=0,空闲电平为低电平,CPOL=1时,

                空闲电平为高电平。CPHA是¤用来决定采样时刻的,CPHA=0,在每个周期的第一个时钟沿采样,

                CPHA=1,在每个周期的第二个时钟■沿采样。

                经由上面我们就可以比对实际设备的时序来对SPI的MODE进行配置了。

                找到头文件里的SPI mode的一定义如下:

                 

                1.     #define SPI_CPHA 0x01 /* clock phase */ 

                2.     #define SPI_CPOL 0x02 /* clock polarity */ 

                3.     #define SPI_MODE_0 (0|0) /* (original MicroWire) */

                4.     #define SPI_MODE_1 (0|SPI_CPHA) 

                5.     #define SPI_MODE_2 (SPI_CPOL|0) 

                6.     #define SPI_MODE_3 (SPI_CPOL|SPI_CPHA)

                7. 大家很容易可以分析出SPI四种模式的配置了吧,后面的速率,字节数就都很好配置了。

                8.     int Spi0Mode = SPI_MODE_2; //配置模式

                9.     ioctl(Spi0Handle, SPI_IOC_WR_MODE, &Spi0Mode);

                10.     ioctl(Spi0Handle, SPI_IOC_RD_MODE, &Spi0Mode);


                11.     struct spi_ioc_transfer sSpi0TR;

                12.     sSpi0TR.speed_hz = 6000000; //配置速率6M

                13.  

                  1.    ioctl(Spi0Handle, SPI_IOC_WR_MAX_SPEED_HZ, &sSpi0TR.speed_hz);

                  2.    ioctl(Spi0Handle, SPI_IOC_RD_MAX_SPEED_HZ, &sSpi0TR.speed_hz);

                14.      sSpi0TR.bits_per_word =16;  //配置字节数

                15.      sSpi0TR.len = 2;


                16. 配置∑ 好了后,就是读写了,读写需要▼注意的参数有两个地方:

                  1,tx_buf,rx_buf这两个参数决定了SPI的读写,如果只㊣读或只写的情况下,就把另一个不用的参数=NULL。

                  2,SPI_IOC_MESSAGE(N)这里的N决定了SPI操作的次数,如果你想连接读写几次SPI就改变N就是了

                  1.    ioctl(Spi0Handle, SPI_IOC_WR_BITS_PER_WORD, &sSpi0TR.bits_per_word);

                  2.    ioctl(Spi0Handle, SPI_IOC_RD_BITS_PER_WORD, &sSpi0TR.bits_per_word);