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);

}

原文地址:https://www.cnblogs.com/dengxiaojun/p/4338682.html