S3C2440的SPI解析
S3C2440A的串行外设接口(SPI)可以与串行数据传输连接。S3C2440A包含了2个SPI,每个都有2个分别用于发送和接收的8位移位寄存器。一次SPI传输期间,同时发送(串行移出)和接收(串行移入)数据。由相应控制寄存器设置指定8位串行数据的频率。如果只希望发送,则接收数据可以保持伪位(dummy)。此外如果只希望接收,则需要发送伪位'1'数据
使用SPI主要需要以下寄存器
选择SPI模式,中断模式,查询模式等SCK选择,主从机选择以及GPOL
GPOA选择,关于GPOL与GPOA的描述请查看SPI协议手册
选择SPI时钟,SPI挂在PCLK上,具体计算公式如下
针对数据传输完成之后的SPI总线状态做一个选择
传输数据时,数据分别存在与两个寄存器中
同时,在传输过程中查看是否发送完成或者接收完成应该看这个寄存器
另外,在SPI通讯过程中如果希望只写不读,应该发送0XFF,这样才能产生SPI时钟
示例代码如下
SPI.C
#include "spi.h" void SPI0IoInit(void)
{
// SPI0为主设备
// 初始化GPE GPE11:MISO0(MISO);GPE12:MOSI0(MOSI);GPE13:SPICLK0(SCK)
//对三个引脚的的配置清零
rGPECON &= ~((3<<26)|(3<<24)|(3<<22));
//配置为第二功能
rGPGCON |= ((2<<26)|(2<<24)|(2<<22));
} void SPI0Init(void)
{
SPI0IoInit();
// 设置时钟控制寄存器(CLKCON),使能SPI时钟
//rCLKCON = (rCLKCON & ~(1 << 18)) | (1 << 18);
// 设置波特率预定标器寄存器(SPPREn),波特率 = PCLK / 2 / (预定标器值 + 1)
//预订频率为1M
rSPPRE0 = (PCLK/2/1000000) - 1;
// 设置SPCONn寄存器以正确配置SPI模块
// normal; format A; active high; master; enable; polling mode
rSPCON0 &= ~(0x7f); //清零
//时钟使能 主机模式 查询模式 低电平有效 格式A 普通模式
rSPCON0 |= ((1<<4)|(1<<3));
// 设置SPI引脚控制寄存器(SPPINn)
// 禁止多主机模式,发送完成释放MOSI
rSPPIN0 &= ~((1<<2)|(1<<0));
} u8 SPI0RWData(u8 dat)
{
u8 retry=0;
u8 temp = 0;
while (!(rSPSTA0 & 0x01)) //等待数据传输就绪
{
retry++;
if(retry>200)return 0;
}
rSPTDAT0 = dat; //传输数据
while (!(rSPSTA0 & 0x01)) //等待数据传输就绪
{
retry++;
if(retry>200)return 0;
}
temp = rSPRDAT0;
return temp;
}
SPI.H
#ifndef __SPI_H
#define __SPI_H
#include "2440addr.h"
#include "def.h"
#include "clock.h" void SPI0IoInit(void);
void SPI0Init(void);
u8 SPI0RWData(u8 dat); #endif
S3C2440的SPI解析的更多相关文章
- S3C2440 之SPI
概述: S3C2440有两个串行外设SPI接口,SPI具有全双工通信 SPI方框图 SPI操作: 通过使用SPI接口,S3C2440可以与外部器件同时发送.接收8位数据.当SPI接口为主机时,可以通过 ...
- S3C2440的RTC解析
位二-十进制交换码(BCD)值数据给CPU.这些数据包括年.月.日.星期.时.分和秒的时间信息.RTC单元工作在外部32.768kHz晶振并且可以执行闹钟功能 实时时钟模块保存的数据是DCD码形式. ...
- S3C2440硬件连接解析
S3c2440是三星公司推出的一款基于ARM920T的处理器,采用ARM内核,不同于单片机,无片上rom与ram,必须搭配相应的外围电路进行使用,现在,让我们从零开始进行这一块MCU的学习,为了入门简 ...
- SOFARPC —— SPI 解析
一.前言 我之前研究过微博的Motan框架(当时接触的第一个RPC框架),当时懵懵懂懂,现在,上手SOFARPC框架,感觉比较轻松,事物的本质都是相通的.以前写博文,会逐行分析源码,慢慢地发现,源码其 ...
- dubbo源码分析--dubbo spi解析
1. 什么叫SPI? 简单总结就是一种使用类名字符串来动态实例化java类的方式,也就是反射. 2. java SPI与Dubbo SPI有什么区别 (此图来自网上,我没有刻意去截图) 然后在这个文件 ...
- S3C2440看门狗解析
个PCLK周期的复位信号 也就是说,在某些环境下,看门狗可以当做定时器使用,当他中断的时候并不发生复位,只发生中断,我看看图 看门狗的中断和复位信号是可以依靠wtcon来切断的(看门狗的时钟是无法切断 ...
- SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)
由于工作的原因,对SPI的理解最为深刻,也和SPI最有感情了,之前工作都是基于OSEK操作系统上进行实现,也在US/OS3上实现过SPI驱动的实现和测试,但是都是基于基本的寄存器操作,没有一个系统软件 ...
- 详解SPI中的极性CPOL和相位CPHA
SPI由于接口相对简单(只需要4根线),用途算是比较广泛,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间.即一个SPI的Master通过SPI与一个 ...
- SPI中的极性CPOL和相位CPHA
详解SPI中的极性CPOL和相位CPHA SPI由于接口相对简单(只需要4根线),用途算是比较广泛,主要应用在 EEPROM,FLASH, 实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间 ...
随机推荐
- SSH整合环境下Spring配置文件的配置
applicationContext.xml: <?xml version="1.0" encoding="UTF-8"?> <beans x ...
- 【Python初学】深copy&浅copy
在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 1. copy.copy 浅拷贝 只拷贝父对象 ...
- 通过ReconstructMe实现3D扫描
实物3D建模 目前在3D游戏制作过程中,需要专业人士花几天甚至数星期的时间,借助于Autodesk 3ds Max和Maya等昂贵的软件工具制作3D模型.纹理和动画.游戏制作中经常使用一种方法,即设计 ...
- 微信小程序Server端环境配置
主要内容:1. SSL免费证书申请步骤2. Nginx HTTPS 配置3. TLS 1.2 升级过程 微信小程序要求使用 https 发送请求,那么Web服务器就要配置成支持 https,需要先申请 ...
- linux proxy
ALL_PROXY=socks://192.168.2.1:3128/ HTTPS_PROXY=https://192.168.2.1:3128/HTTP_PROXY=http://192.168.2 ...
- Oracle如何还原数据库
http://blog.sina.com.cn/s/blog_6c25b1e50101ga0b.html
- Attrib命令,可以让文件夹彻底的隐藏起来
Attrib命令,可以让文件夹彻底的隐藏起来,就算是在文件夹选项中设置了显示隐藏文件夹,也无法显示出来的.只能通过路径访问的方式打开文件夹.如上图,就是attrib命令的隐藏文件夹和显示文件夹的两条命 ...
- CentOS6.5 安装snorby
如果下列任何组件之一已经被安装,请酌情忽略 1.Snort 参照 CentOS6.5 安装snort 2.GIT 系统自带 3.Ruby 版本限制> 1.9.2 系统自带版本过低首先卸载掉,注意 ...
- SMB/CIFS协议解析
1.SMB协议与CIFS协议的区别 139端口是一种TCP端口,该端口在通过网上邻居访问局域网中的共享文件或共享打印机时就能发挥作用.445端口也是一种TCP端口,该端口在 Windows 2 ...
- 在java中和javascript中过滤掉类似于img形式的字符串,从而不显示图片
1:javascript过滤掉<img></img>和<img />形式的字符串 <!DOCTYPE html PUBLIC "-//W3C//DT ...