博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LPC1768的SPI通讯
阅读量:5127 次
发布时间:2019-06-13

本文共 1273 字,大约阅读时间需要 4 分钟。

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

你可能感兴趣的文章
php中json在使用过程中的中文乱码问题解决
查看>>
vim 操作快捷键 待更~
查看>>
UVA 11806 Cheerleaders (容斥原理
查看>>
Myisam 和 Innodb 区别
查看>>
Entropy
查看>>
黄帝内经解读
查看>>
POJ1845 数论 二分快速取余
查看>>
子查询 附加主外键的图
查看>>
分数组(思想很重要)
查看>>
JSP !
查看>>
SQLite in Oracle MAF
查看>>
什么是子网掩码
查看>>
poj 1655 Balancing Act 树的重心
查看>>
CSS文字两端对齐
查看>>
解决listview适应scrollview的问题
查看>>
Spring MVC 注解
查看>>
安装oracle11g学习版遇到的几个问题
查看>>
投資是壹場修行
查看>>
spyder里的"查找文件里的特定字符串"非常方便
查看>>
Web缓存
查看>>