码迷,mamicode.com
首页 > 其他好文 > 详细

LPC1768的SPI通讯

时间:2015-03-15 02:04:34      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:

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

}

 

LPC1768的SPI通讯

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!