zoukankan      html  css  js  c++  java
  • LPC1768的SPI通讯

    SPI是一种全双工串行接口,可处理多个连接到指定总线上的主机和从机。在数据传输过程中总线上只能有一个主机和一个从机通信。在数据传输中,主机总是会向从机发送一帧8到16个位的数据,而从机也总会向主机发送一帧字节数据

     

    使用代码如下

    void SpiInit(SPI_SPEED speed)

    {

        u8 div=25000000/speed;

        LPC_SC->PCONP |= (1 << 8);//打开SPI时钟

        LPC_SC->PCONP |= (1<<15);//打开GPIO时钟

        

        //sck

        LPC_PINCON->PINSEL0 &= ~(0x03u<<30);

        LPC_PINCON->PINSEL0 |= (0x03u<<30);

       

        //csn

        LPC_PINCON->PINSEL1 &= ~(0x03<<0);

    //  LPC_PINCON->PINMODE1 &= ~(0x03<<0);

    //  LPC_PINCON->PINMODE_OD0 &= ~(0x01<<16);

        P0dir(16) = 1;

     

        //miso

        LPC_PINCON->PINSEL1 &= ~(0x03<<2);

        LPC_PINCON->PINSEL1 |= (0x03<<2);

     

        //mosi

        LPC_PINCON->PINSEL1 &= ~(0x03<<4);

        LPC_PINCON->PINSEL1 |= (0x03<<4);

     

        SPI_CS_HIGH;

       

        //spi接口初始化 每次8位数据 sck上升沿采样 sck高有效 主模式 禁止中断 msb高位在前

        LPC_SPI->SPCR = (0<<BIT_ENABLE_POSITION)|(0<<CPHA_POSITION)|(1<<CPOL_POSITION)|(1<<MSTR_POSITION)

            |(0<LSBF_POSITION)|(0<<SPIE_POSITION)|(0x08<<BITS_POSITION);

     

       if(div<8)div=8;

       LPC_SPI->SPCCR=div;

     

    }

     

    u8 SpiRW(u8 writeData)

    {

        LPC_SPI->SPDR=writeData;

        while((LPC_SPI->SPSR & 0x80)!=0x80);

        writeData=(LPC_SPI->SPDR)&0xff;

        return writeData;

    }

     

     

    void SpiSetSpeed(SPI_SPEED speed)

    {

        u8 div=25000000/speed;

        if(div<8)div=8;

        LPC_SPI->SPCCR=div;

    }

     

    void SpiSetSpeedHigh(void)

    {

        SpiSetSpeed(SPI_SPEED5);

    }

     

    void SpiSetSpeedLow(void)

    {

        SpiSetSpeed(SPI_SPEED1);

    }

  • 相关阅读:
    定时器
    SysTick
    13.看门狗
    12.FSMC
    11.中断
    ##HTML行内块元素好迷啊!!
    ##HTML基础
    ##CS3动画效果
    ##管家婆项目(tools层)
    ##管家婆项目(app层)
  • 原文地址:https://www.cnblogs.com/dengxiaojun/p/4338682.html
Copyright © 2011-2022 走看看