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解析的更多相关文章

  1. S3C2440 之SPI

    概述: S3C2440有两个串行外设SPI接口,SPI具有全双工通信 SPI方框图 SPI操作: 通过使用SPI接口,S3C2440可以与外部器件同时发送.接收8位数据.当SPI接口为主机时,可以通过 ...

  2. S3C2440的RTC解析

    位二-十进制交换码(BCD)值数据给CPU.这些数据包括年.月.日.星期.时.分和秒的时间信息.RTC单元工作在外部32.768kHz晶振并且可以执行闹钟功能 实时时钟模块保存的数据是DCD码形式. ...

  3. S3C2440硬件连接解析

    S3c2440是三星公司推出的一款基于ARM920T的处理器,采用ARM内核,不同于单片机,无片上rom与ram,必须搭配相应的外围电路进行使用,现在,让我们从零开始进行这一块MCU的学习,为了入门简 ...

  4. SOFARPC —— SPI 解析

    一.前言 我之前研究过微博的Motan框架(当时接触的第一个RPC框架),当时懵懵懂懂,现在,上手SOFARPC框架,感觉比较轻松,事物的本质都是相通的.以前写博文,会逐行分析源码,慢慢地发现,源码其 ...

  5. dubbo源码分析--dubbo spi解析

    1. 什么叫SPI? 简单总结就是一种使用类名字符串来动态实例化java类的方式,也就是反射. 2. java SPI与Dubbo SPI有什么区别 (此图来自网上,我没有刻意去截图) 然后在这个文件 ...

  6. S3C2440看门狗解析

    个PCLK周期的复位信号 也就是说,在某些环境下,看门狗可以当做定时器使用,当他中断的时候并不发生复位,只发生中断,我看看图 看门狗的中断和复位信号是可以依靠wtcon来切断的(看门狗的时钟是无法切断 ...

  7. SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)

    由于工作的原因,对SPI的理解最为深刻,也和SPI最有感情了,之前工作都是基于OSEK操作系统上进行实现,也在US/OS3上实现过SPI驱动的实现和测试,但是都是基于基本的寄存器操作,没有一个系统软件 ...

  8. 详解SPI中的极性CPOL和相位CPHA

    SPI由于接口相对简单(只需要4根线),用途算是比较广泛,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间.即一个SPI的Master通过SPI与一个 ...

  9. SPI中的极性CPOL和相位CPHA

    详解SPI中的极性CPOL和相位CPHA SPI由于接口相对简单(只需要4根线),用途算是比较广泛,主要应用在 EEPROM,FLASH, 实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间 ...

随机推荐

  1. Swift POP+MVVM

    Swift2.0中引入了协议扩展的特性,并且建议开发者一切从协议(Protocol)出发,经过几个月的学习探索,博主发现Swift作为一门面向协议编程(POP)的语言非常适合时下火热的MVVM架构.M ...

  2. java 使用对象

    class XiyoujiRenwu { float height,weight; String head, ear; void speak(String s) { head="歪着头&qu ...

  3. Code Blocks 使用 VC2013编译HelloWord

    首先在 Settings-Complier中把 Microsoft Visual c++ 2010 设置成默认(莫不默认也无所谓,就是改着方便而已) 然后在ToolChain excutable 中, ...

  4. Android Studio ADB响应失败解决方法(2CTo.com)

    当启动Android Studio时,如果弹出 adb not responding. you can wait more,or kill "adb.exe" process ma ...

  5. PHP 常识

    PHP常识 1.谈谈你对MVC的认识,介绍几种目前比较流行的框架 由Model(M),View(V),Cntroller(C) 组成的一种设计模式,Model 主要处理一些业务处理类,View是页面显 ...

  6. 在linux下用tomcat部署java web项目的过程与注意事项

    在linux下用tomcat部署java web项目的过程与注意事项 一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/ ...

  7. 转 :Vim文件编码识别与乱码处理

    Vim文件编码识别与乱码处理   在 Vim 中,有四个与编码有关的选项,它们是:fileencodings.fileencoding.encoding 和 termencoding.在实际使用中,任 ...

  8. Fix a Tree

    Fix a Tree A tree is an undirected connected graph without cycles. Let's consider a rooted undirecte ...

  9. CentOS查询 杀死进程

    ps aux | grep XXX 查询进程 ps a 显示现行终端机下的所有程序,包括其他用户的程序. ps -A 显示所有程序. ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参 ...

  10. HDU 5534 Partial Tree

    2015 ACM/ICPC 长春现场赛 H题 完全背包 #include<cstdio> #include<cstring> #include<cmath> #in ...