LPC2478的SPI使用
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使用的更多相关文章
- SPI基础知识
Serial Peripheral Interface 是摩托罗拉公司提出的一种总线协议,主要应用在EEPROM,FLASH,实时时钟,A/D转换,以及数字信号处理和数字信号解码器中 是一种高速,全双 ...
- spi子系统之驱动SSD1306 OLED
spi子系统之驱动SSD1306 OLED 接触Linux之前,曾以为读源码可以更快的学习软件,于是前几个博客都是一边读源码一边添加注释,甚至精读到每一行代码,实际上效果并不理想,看过之后就忘记了.主 ...
- java中的SPI机制
1 SPI机制简介 SPI的全名为Service Provider Interface.大多数开发人员可能不熟悉,因为这个是针对厂商或者插件的.在java.util.ServiceLoader的文档里 ...
- 基于TQ2440的SPI驱动学习(OLED)
平台简介 开发板:TQ2440 (NandFlash:256M 内存:64M) u-boot版本:u-boot-2015.04 内核版本:Linux-3.14 作者:彭东林 邮箱:pengdongl ...
- SPI协议及IO模拟
SPI协议 SPI协议网上资料比较多,但是也比较乱,当初在网上搜集的错误资料导致现在比较混乱. SPI协议资料比较正规的是: 1.SPI的规约协议英文文档,例如<摩托罗拉spi协议规范> ...
- STM32F412应用开发笔记之三:SPI总线通讯与AD采集
本次我们在NUCLEO-F412ZG试验模拟量输入采集.我们的模拟量输入采用ADI公司的AD7705,是一片16位两路差分输入的AD采集芯片.具有SPI接口,我们将采用SPI接口与AD7705通讯.两 ...
- spi 10方式编写
//第一个CS变低的时候要sclk为高电平,第一个跳变沿进行赋值 module spi(input clk,input rst_n,output reg sclk,output reg cs,outp ...
- 挣值管理(PV、EV、AC、SV、CV、SPI、CPI) 记忆
挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV. PV:计划值,在即定时间点前计划 ...
- SPI总线
一.概述. SPI, Serial Perripheral Interface, 串行外围设备接口, 是 Motorola 公司推出的一种同步串行接口技术. SPI 总线在物理上是通过接在外围设备微控 ...
随机推荐
- sqlserver2008行锁
select * from tablename WITH (UPDLOCK) where Id=#value#
- 关于一些url中传递参数有空格问题
1.关于一些url中传递参数有空格问题: url.replace(/ /g, "%20") 从上面的例子中可以看到可以用:replace(/ /g, "%20" ...
- Hibernate的dynamic-insert和dynamic-update的使用
Hibernate在初始化的时候,默认按照配置为表预定义insert,delete,update,select(by id)的SQL语句放在session中,其中insert,update,selec ...
- 推荐 iOS 网站:
0. https://developer.apple.com/videos/1. http://www.raywenderlich.com2. http://nshipster.com3. http: ...
- java 随机流
Example10_8.java import java.io.*; public class Example10_8 { public static void main(String args[]) ...
- CDN(转载)
CDN是什么? 谈到CDN的作用,可以用8年买火车票的经历来形象比喻: 8年前,还没有火车票代售点一说,12306.cn更是无从说起.那时候火车票还只能在火车站的售票大厅购买,而我所住的小县城并不通火 ...
- bootstrap's plugin:sthe usage of carousel
if we want use the carousel.js,we need quote it in the page. sample code: <div id="myCarouse ...
- Linux学习 -- 服务管理
1 服务分类 服务管理内容 启动 自启动 查询已安装的服务 RPM包安装的服务 自启动的 chkconfig --list 2345中如果是启用,代表下次开机会自启动 正在运行的服务 p ...
- magento head.phtml 加载<a target=_parent
<script language="javascript">function alinks(){ var links = document.getElementsBy ...
- 关于python的可变和不可变对象
在python中所有都是对象,在python中只有list和dict是可变对象,其他都是不可变对象. 具体参照:http://www.cnblogs.com/lovemo1314/archive/20 ...