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

  1. #include "spi.h"
  2.  
  3. void SPI0IoInit(void)
  4. {
  5. // SPI0为主设备
  6. // 初始化GPE GPE11:MISO0(MISO);GPE12:MOSI0(MOSI);GPE13:SPICLK0(SCK)
  7. //对三个引脚的的配置清零
  8. rGPECON &= ~((3<<26)|(3<<24)|(3<<22));
  9. //配置为第二功能
  10. rGPGCON |= ((2<<26)|(2<<24)|(2<<22));
  11. }
  12.  
  13. void SPI0Init(void)
  14. {
  15. SPI0IoInit();
  16. // 设置时钟控制寄存器(CLKCON),使能SPI时钟
  17. //rCLKCON = (rCLKCON & ~(1 << 18)) | (1 << 18);
  18. // 设置波特率预定标器寄存器(SPPREn),波特率 = PCLK / 2 / (预定标器值 + 1)
  19. //预订频率为1M
  20. rSPPRE0 = (PCLK/2/1000000) - 1;
  21. // 设置SPCONn寄存器以正确配置SPI模块
  22. // normal; format A; active high; master; enable; polling mode
  23. rSPCON0 &= ~(0x7f); //清零
  24. //时钟使能 主机模式 查询模式 低电平有效 格式A 普通模式
  25. rSPCON0 |= ((1<<4)|(1<<3));
  26. // 设置SPI引脚控制寄存器(SPPINn)
  27. // 禁止多主机模式,发送完成释放MOSI
  28. rSPPIN0 &= ~((1<<2)|(1<<0));
  29. }
  30.  
  31. u8 SPI0RWData(u8 dat)
  32. {
  33. u8 retry=0;
  34. u8 temp = 0;
  35. while (!(rSPSTA0 & 0x01)) //等待数据传输就绪
  36. {
  37. retry++;
  38. if(retry>200)return 0;
  39. }
  40. rSPTDAT0 = dat; //传输数据
  41. while (!(rSPSTA0 & 0x01)) //等待数据传输就绪
  42. {
  43. retry++;
  44. if(retry>200)return 0;
  45. }
  46. temp = rSPRDAT0;
  47. return temp;
  48. }

SPI.H

  1. #ifndef __SPI_H
  2. #define __SPI_H
  3. #include "2440addr.h"
  4. #include "def.h"
  5. #include "clock.h"
  6.  
  7. void SPI0IoInit(void);
  8. void SPI0Init(void);
  9. u8 SPI0RWData(u8 dat);
  10.  
  11. #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. 基础-Servlet

    Servlet是运行在web服务器上的一个java类. 它的作用是将http请求和http相应进行操作完成我们的业务逻辑. servlet创建: 1.创建一个类extends HttpServlet ...

  2. php socket客户端及服务器端应用实例

    经常有朋友会对php的socket应用充满疑惑,本文就以实例代码作一讲解,希望能对初学php的朋友起到一点帮助作用 具体代码如下: 1.服务器端代码: <?php class SocketSer ...

  3. Ubuntu Linux系统下的SVN客户端工具PySVN

    在Windows下面一直在用TortoiseSVN做为SVN客户端工具,但它居然没提供Linux版本,无视Linux用户的存在.它视我如空 气,偶视它如废土.开始探索尝试其他跨平台的SVN客户端,最后 ...

  4. zabbix Lack of free swap space

    Zabbix初始设计是大型公司用于监控服务器集群的,但日常中也用于监控VPS或云主机.后者情况下Zabbix的很多配置和属性就没有经过优化,取决于监控的对象和用途,经常需要对一些Zabbix配置进行调 ...

  5. RasterBandClass Class

    Product Availability Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server. Description Th ...

  6. 转: OGG Checkpoint 详解

    1. OGG Checkpoint 详解 定位中断的位置,下次启动从中断的位置开始恢复. 1.target 端配置: 2.一条记录对应一个replicat 一. Extract Checkpoints ...

  7. 转 windows 下 Oracle 导出表结构

      分析Oracle下导出某用户所有表的方法 可能很多使用Oracle的客户都会遇到想把某用户所有表导出的情况,本文就提供这样一个方法帮你轻松解决这个问题. 首先在sqlplus下以该用户登录到Ora ...

  8. FusionCharts 分类以及各个属性参数列表

    <FusionCharts学习及使用笔记>之 第一篇 其实一直以来我都在有意无意的把我平常工作中遇到并解决的问题做个记录,放到我的网易博客中.但却一直没有想过如何把我使用的技术做一个系列化 ...

  9. One Bomb

    One Bomb time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  10. Brain Network (easy)

    Brain Network (easy) One particularly well-known fact about zombies is that they move and think terr ...