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. js滚动条

    /*滚动条在Y轴上的滚动距离*/function ScrollTop(){ var scrollTop = 0, bodyScrollTop = 0, documentScrollTop = 0; i ...

  2. 获取spring bean的utils

    <span style="font-size:10px;">package com.record.util; import org.springframework.be ...

  3. android xml文件中出现如下提醒:This tag and its children can be replaced by one <TextView/> and a compound drawable

    第一个感叹号 是跟你说 让你把Imageview 和textview 结合起来 只用 textview textview有个属性叫  android:drawable...(top/bottom/.. ...

  4. STM32片上Flash内存映射、页面大小、寄存器映射

    STM32片上Flash内存映射.页面大小.寄存器映射 STM32有4种Flash module organization,分别是:low-density devices(32KB,1KB/page) ...

  5. 关于Stringbulider类

    在使用String类构造一个字符串时,要给它分配足够的内存来保存字符串,但StringBuilder通常分配的内存会比需要的更多.开发人员可以选择显式指定StringBuilder要分配多少内存,但如 ...

  6. Brain Network (medium)

    Brain Network (medium) Further research on zombie thought processes yielded interesting results. As ...

  7. OpenGL学习-------点、直线、多边形

    上一课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处.例如:点太小,难以看清楚:直线也太细,不舒服:或者想画虚线,但不知道方法只能用许多短直线,甚至用点组合而成. ...

  8. Copy-->Mutable Copy

    一.深拷贝和浅拷贝 深拷贝:对象拷贝 - 直接拷贝内容. 浅拷贝:指针拷贝 - 将指针中的地址值拷贝一份. 二.对于 Copy 与 mutableCopy 的实践 思路:我用四个方案来验证 Copy ...

  9. 删除DriverStore\FileRepository文件夹后,设备驱动无法安装,提示“没有为设备信息集或元素选择驱动程序(代码 28)”的解决办法

    前言: 我前几天手贱,整个FileRepository删除掉了,之后重启就出现了让人蛋疼的这个问题,因为出于各种原因不想重装系统,百度轮番换搜索词无果,虽然驱动装上了但新设备依然无法自动安装驱动等“一 ...

  10. Allegro PCB -通孔焊盘制作 及Flash制作

    通孔焊盘制作,比如插针封装 数值确定: mil单位                                                                           ...