LPC2478的spi使用

LPC2748具有一个SPI控制器,可以当做SPI主机或者从机使用,有以下特性

其使用起来很方便,并且支持中断,使用的寄存器如下

基本上,使用起来就是设置控制为,CPOL CPOA等等,数据长度的配置等,设置分频率,发送数据,等待状态或者中断,发送完成,就OK了

官方给出的流程如下

操作过程见以下代码

#ifndef __SPI0_H_
#define __SPO0_H_
#include "common.h"
#include "lpc24xx.h"
#include "clock.h" typedef enum SPI0_SPEED
{
SPI_SPEED1 = 100000,
SPI_SPEED2 = 500000,
SPI_SPEED3 = 1000000,
SPI_SPEED4 = 1500000,
SPI_SPEED5 = 2000000,
SPI_SPEED6 = 3125000
}SPI0_SPEED; typedef enum SPI_BITFRIST
{
msbFrist = 0,
lsbFrist = 1
}SPI_BITFRIST; void Spi0SelectCs(void); void Spi0DisSelectCs(void); u8 Spi0RwData(u8 writeByte,u8* readByte); void Spi0SetSpeed(SPI0_SPEED speed); void Spi0Init(SPI0_SPEED speed,SPI_BITFRIST bitFrist); #endif
#include "spi.h"

#define BIT_ENABLE_POSITION     2
#define CPHA_POSITION 3
#define CPOL_POSITION 4
#define MSTR_POSITION 5
#define LSBF_POSITION 6
#define SPIE_POSITION 7
#define BITS_POSITION 8 void Spi0Init(SPI0_SPEED speed,SPI_BITFRIST bitFrist)
{
u32 spiClock = (SystemCoreClock/4)/speed;
PCONP |= (1 << 8);//打开SPI时钟 SCS |= (1<<0);//设置高速寄存器组方式访问端口
//sck
PINSEL0 &= ~(0x03u<<30);
PINSEL0 |= (0x03u<<30);
PINMODE0 &= ~(0x03u<<30); //csn 普通GPIO 不用硬件CSN
PINSEL1 &= ~(0x03<<0);
PINMODE1 &= ~(0x03<<0);
FIO0DIR |= (1<<16); //miso
PINSEL0 &= ~(0x03<<2);
PINSEL0 |= (0x03<<2);
PINMODE0 &= ~(0x03<<2); //mosi
PINSEL0 &= ~(0x03<<4);
PINSEL0 |= (0x03<<4);
PINMODE0 &= ~(0x03<<4); //spi接口初始化
S0SPCR = (0<<BIT_ENABLE_POSITION)|(1<<CPHA_POSITION)|(1<<CPOL_POSITION)|(1<<MSTR_POSITION)|(bitFrist<<LSBF_POSITION)\
|(0<<SPIE_POSITION)|(0x08<<BITS_POSITION);
//八位数据,主模式 关中断 S0SPCCR = spiClock; } void Spi0SelectCs(void)
{
FIO0CLR |= (1<<16);
} void Spi0DisSelectCs(void)
{
FIO0SET |= (1<<16);
} u8 Spi0RwData(u8 writeByte,u8* readByte)
{
u8 retry = 200;
if((S0SPSR&0x80))
{
retry = S0SPDR;
return 1;
}
S0SPDR = writeByte;
retry = 200;
while(!(S0SPSR&0x80))
{
retry--;
if(retry == 0)return 1;
}
*readByte = S0SPDR;
return 0;
} void Spi0SetSpeed(SPI0_SPEED speed)
{
u32 spiClock = (SystemCoreClock/4)/speed;
S0SPCCR = spiClock;
}

LPC2478的SPI使用的更多相关文章

  1. SPI基础知识

    Serial Peripheral Interface 是摩托罗拉公司提出的一种总线协议,主要应用在EEPROM,FLASH,实时时钟,A/D转换,以及数字信号处理和数字信号解码器中 是一种高速,全双 ...

  2. spi子系统之驱动SSD1306 OLED

    spi子系统之驱动SSD1306 OLED 接触Linux之前,曾以为读源码可以更快的学习软件,于是前几个博客都是一边读源码一边添加注释,甚至精读到每一行代码,实际上效果并不理想,看过之后就忘记了.主 ...

  3. java中的SPI机制

    1 SPI机制简介 SPI的全名为Service Provider Interface.大多数开发人员可能不熟悉,因为这个是针对厂商或者插件的.在java.util.ServiceLoader的文档里 ...

  4. 基于TQ2440的SPI驱动学习(OLED)

    平台简介 开发板:TQ2440 (NandFlash:256M  内存:64M) u-boot版本:u-boot-2015.04 内核版本:Linux-3.14 作者:彭东林 邮箱:pengdongl ...

  5. SPI协议及IO模拟

    SPI协议 SPI协议网上资料比较多,但是也比较乱,当初在网上搜集的错误资料导致现在比较混乱. SPI协议资料比较正规的是: 1.SPI的规约协议英文文档,例如<摩托罗拉spi协议规范> ...

  6. STM32F412应用开发笔记之三:SPI总线通讯与AD采集

    本次我们在NUCLEO-F412ZG试验模拟量输入采集.我们的模拟量输入采用ADI公司的AD7705,是一片16位两路差分输入的AD采集芯片.具有SPI接口,我们将采用SPI接口与AD7705通讯.两 ...

  7. spi 10方式编写

    //第一个CS变低的时候要sclk为高电平,第一个跳变沿进行赋值 module spi(input clk,input rst_n,output reg sclk,output reg cs,outp ...

  8. 挣值管理(PV、EV、AC、SV、CV、SPI、CPI) 记忆

    挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV.     PV:计划值,在即定时间点前计划 ...

  9. SPI总线

    一.概述. SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在外围设备微控 ...

随机推荐

  1. websphere安装

    下午来再输 websphere 配置库中已存在应用程序,异常处理 出现此问题的原因之一:操作界面上没有卸载完成. 进行一下操作: 1.删除 $WAS_HOME/profiles/AppSrv01/co ...

  2. C++builder编译别人工程报错

    编译时遇到错误,信息如下: [C++ Error] NVRAMEditor.h(83): E2209 Unable to open include file 'CONTROLSLib_OCX.h'[C ...

  3. 【Android 应用开发】Android 开发 之 JNI入门 - NDK从入门到精通

    NDK项目源码地址 : -- 第一个JNI示例程序下载 : GitHub - https://github.com/han1202012/NDKHelloworld.git -- Java传递参数给C ...

  4. js框架——angular.js(6)

    1. ng-class 这个指令是用来绑定一个或者多个css代码.它的值一般是一个表达式,也可以是函数什么的,只要返回的确实是一个类的名字就可以—— ng-class="nextPageDi ...

  5. java 设计模式之工厂模式与反射的结合

    工厂模式: /**  * @author Rollen-Holt 设计模式之 工厂模式  */   interface fruit{     public abstract void eat(); } ...

  6. Hibernate锁机制

    业务逻辑的实现过程中,往往需要保证数据访问的排他性.因此,我们就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的“锁”,即给我们选定的目标数据上锁,使其无 ...

  7. java反射简解

    1.首先一个问题,什么是类,类是不是对象? 我们总是说我们new一个对象出来 那么我们还没有new的时候,建造的那个java类是不是对象呢? 是 它是java.lang.Class的对象 对于反射我们 ...

  8. 编程实现prim算法和Dijkstra算法。

    网址链接:http://blog.csdn.net/anialy/article/details/7603170

  9. 剑指offer替换空格

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  10. cs的变态语法

    int? a = null; //?指示a为可空checked { ... } //赋值溢出抛异常unchecked { ... } //赋值溢出不抛异常expr1??expr2 //空结合运算符,e ...