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. Element type "bean" must be followed by either attribute specifications, ">" or "/>".

    在这里其他内容就省了,错在,<bean id="bpcsU1gblDAO"class="dao.jk.bpcs.impl.BpcsU1gblDaoImpl" ...

  2. UVA - 12563 Jin Ge Jin Qu hao (01背包变形)

    此题应该注意两个点,首先背包容量应该缩减为t-1,因为最长的歌不超过三分钟,而劲歌金曲有678s,所以肯定要留出这个时间来.其次注意优先级,保证唱的歌曲数目最多,在此前提下尽可能的延长时间. 处理方法 ...

  3. android ScrollView嵌套EditText

    editext.setOnTouchListener(new OnTouchListener() {                        @Override            publi ...

  4. 转:WebDriver(Selenium2) 判断页面是否刷新的方法

    public static boolean waitPageRefresh(WebElement trigger) { int refreshTime = 0; boolean isRefresh = ...

  5. android 5.0新特性学习--RecyclerView

    在过去很多年,我们的PC或者手机设备都是采用拟物化的设计风格,IOS采用扁平化的特性,android在2014年IO大会上说采用Material Design的设计风格,显示效果不能过于生硬的转换,而 ...

  6. AngularJS数据建模(转载)

    出处不明 我们知道,AngularJS并没有自带立等可用的数据建模方案.而是以相当抽象的方式,让我们在controller中使用JSON数据作为模 型.但是随着时间的推移和项目的成长,我意识到这种建模 ...

  7. JSP内置对象--pageContext对象(非常重要!!!)

    pageContext对象是javax.servlet.jsp.PageContext类的实例,只要表示的是一个jsp页面的上下文,而且功能强大,几乎可以操作各种内置对象. >forward(S ...

  8. mysql建表: 主键,外键约束

    CREATE DATABASE db_studentinfo; USE db_studentinfo ; DROP TABLE IF EXISTS t_student ; CREATE TABLE t ...

  9. HDU 5215 BestCoder"杯中国大学生程序设计冠军赛” 边双连通分量取出子图+二分染色判图内奇偶环

    Cycle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Sub ...

  10. 面向对象重写(override)与重载(overload)区别

    一.重写(override) override是重写(覆盖)了一个方法,以实现不同的功能.一般是用于子类在继承父类时,重写(重新实现)父类中的方法. 重写(覆盖)的规则: 1.重写方法的参数列表必须完 ...