ARM9的SPI

发布者:HarmonyInLife最新更新时间:2018-04-15 来源: eefocus关键字:ARM9  SPI 手机看文章 扫描二维码
随时随地手机看文章

实验前须知:
SPI的原理:

注:

CLK传输时钟

MISO主机输入从机输出

MOSI主机输出从机输入

CS片选信号,由于SPI控制器可以外接多个SPI设备,所以这个用于选中SPI设备。


SPI的操作流程大体如下图所示:


实验的目的:
用s3c2440的SPI控制器操作SPI总线上的两个设备,分别是OLED和FLASH

实验的源程序:
07th_spi_i2c_adc_mini2440_tq2440_spi_controller.rar

实验的问题总结:
1>我们主要分析一下s3c2440_spi.c这个文件
/*************************************s3c2440_spi.c**********************************
#include "s3c24xx.h"

/* SPI controller */

static void SPI_GPIO_Init(void)
{
    /* GPG1 OLED_CSn output 
    * GPG10 FLASH_CSn output
    */
    GPGCON &= ~((3<<(1*2)) | (3<<(10*2)));
    GPGCON |= (1<<(1*2)) | (1<<(10*2));
    GPGDAT |= (1<<1) | (1<<10);


    /* 
    * GPF3  OLED_DC   output
    * GPE11 SPIMISO   
    * GPE12 SPIMOSI   
    * GPE13 SPICLK    
    */
    GPFCON &= ~(3<<(3*2));    
    GPFCON |= (1<<(3*2));    


    GPECON &= ~((3<<(11*2)) | (3<<(12*2)) | (3<<(13*2)));
    GPECON |= ((2<<(11*2)) | (2<<(12*2)) | (2<<(13*2)));
}


void SPISendByte(unsigned char val)
{
    while (!(SPSTA0 & 1));
    SPTDAT0 = val;    
}


unsigned char SPIRecvByte(void)
{
    SPTDAT0 = 0xff;    
    while (!(SPSTA0 & 1));
    return SPRDAT0;    
}




static void SPIControllerInit(void)
{
    /* OLED  : 100ns, 10MHz
    * FLASH : 104MHz
    * 取10MHz
    * 10 = 50 / 2 / (Prescaler value + 1)
    * Prescaler value = 1.5 = 2
    * Baud rate = 50/2/3=8.3MHz
    */
    SPPRE0 = 2;
    SPPRE1 = 2;


    /* [6:5] : 00, polling mode
    * [4]   : 1 = enable 
    * [3]   : 1 = master
    * [2]   : 0
    * [1]   : 0 = format A
    * [0]   : 0 = normal mode
    */
    SPCON0 = (1<<4) | (1<<3);
    SPCON1 = (1<<4) | (1<<3);
    
}


void SPIInit(void)
{
    /* 初始化引脚 */
    SPI_GPIO_Init();


    SPIControllerInit();
}

***********************************s3c2440_spi.c***************************************/

在这个文件中,我们主要分析一下SPISendByte()和SPIRecvByte(),
从这两个函数中,我们可以很清晰地知道SPI的操作是非常简单的。这些操作就是根据上述那个流程图来的。

由于我们的SPI总线上没有接MMC或SD,所以步骤3,4,10都不需要。而在接收数据时,我们选择了接收数据(1)的方式。


关键字:ARM9  SPI 引用地址:ARM9的SPI

上一篇:STM32的LED灯实验
下一篇:ARM9的IIC

推荐阅读最新更新时间:2024-03-16 15:59

ARM9 2410移植之ARM中断原理, 中断嵌套的误区,中断号的怎么来的
几天前一个学生问我ARM中断嵌套的问题,我才发现原在我心中理所当然的事对学生来说理解实属不易。 ARM有七种模式,我们这里只讨论SVC、IRQ和FIQ模式。 我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一根叫 irq pin, 一根叫fiq pin. 在ARM的cpsr中,有一个I位和一个F位,分别用来禁止IRQ和FIQ的。 先不说中断控制器,只说ARM核心。正常情况下,ARM核都只是机械地随着pc的指示去做事情,当CPSR中的I和F位为1的时候,IRQ和FIQ全部处 于禁止状态。无论你在irq pin和fiq pin上面发什么样的中断信号,ARM是不会理你的,你根本不能打断他,因为他耳聋了,眼也瞎了
[单片机]
ARM9(S3C2440) Touch Screen
触摸屏工作原理 触摸屏分为:电阻式,电容式,声表面波式,红外线扫描式等类型,使用的最多的是4线电阻式的触摸屏。 触摸屏工作流程 (1)、设置触摸屏接口为等待中断模式,等待触摸屏被按下。 (2)、如果中断(INT_TC)发生,选择X,Y坐标转换模式(X/Y坐标分别转换模式,X/Y坐标自动转换模式),启动AD转换。 (3)、当AD转换完毕后,通过中断(INT_ADC),获取X/Y坐标,ADCDAT0 bit -x坐标,ADCDAT1 bit -Y坐标。 (4)、设置触摸屏接口为等待中断模式,等待触摸笔离开触摸屏。 (5)、返回步骤1,等待下次触摸笔被按下。 实验主要代码 main
[单片机]
[学习笔记]ARM9-mini2440之点亮第一颗LED
本文记录mini2440点亮led的操作流程; 点亮一颗led代码实现方式:汇编和C; 进行了一些功能扩展实验; 基本思路 看原理图确定控制led的引脚; 看主芯片手册确定如何控制引脚; 编写程序; 编译; 烧录bin文件; 看原理图 mini2440主芯片引脚图: led电路图: 由于只要点亮一颗led,因此选择nLED_1。由原理图可知:nLED_1接线对应主芯片的GPB5引脚,且当GPB5输出低电平时,nLED_1会被点亮。而引脚则由寄存器控制,因此只要对GPB5引脚相关寄存器进行设置即可。 看芯片手册 S3C2440端口B相关寄存器: 由上图可知,S3C2440的I/O口B相关的寄存器有: 控制
[单片机]
[学习笔记]ARM9-mini2440之点亮第一颗LED
MAX1441与触摸屏传感器的SPI接口设计指南
摘要:MAX1441为双通道接近检测与触摸屏传感器,本文介绍了在产品开发过程中如何使用其接口固件,以简化MAX1441的性能评估。本文假设用户已熟悉MAX1441及其评估系统MAX1441EVSYS,了解MAX-IDE集成开发环境或类似工具,能够把应用固件下载到MAX1441EVSYS闪存。关于接近检测与触摸屏传感器的更多信息和详细规范,请参考MAX1441数据资料;关于MAX1441EVSYS的使用,以及如何利用MAX-IDE将程序下载到MAX1441闪存,请参考MAX1441EVSYS数据资料。 MAX1441的SPI接口固件为独立的程序单元,包含初始化程序,用于设定MAX1441寄存器的初始值(包括范围、转换速率、激励频
[模拟电子]
MAX1441与触摸屏传感器的<font color='red'>SPI</font>接口设计指南
基于ARM和FPGA的智能小车监控系统
0 引言     智能小车是机器人研究领域的一项重要内容。它集机械、电子、检测技术与智能控制于一体。在各种移动机构中,智能小车的轮式移动机构最为常见。轮式移动机构之所以得到广泛的应用,主要是因为容易控制其移动速度和移动方向。智能小车可以适应不同环境,不受温度、湿度等条件的影响,完成危险地段、人类无法介入等特殊情况下的任务。一般的智能小车操作控制复杂、功能单一、不能远程重构。     本文介绍的智能小车可移动视频监控系统,以“飞思卡尔杯”智能小车竞赛提供的车模装置为基础,利用ARM芯片S3C2440A控制图像采集、网络传输、速度采集干扰小的模块,利用FPGA芯片控制电机驱动、舵机控制、电量采集干扰大的模块,当上位机通过I
[嵌入式]
STM32-24位AD7799驱动之手册代码详解,支持模拟SPI和硬件SPI
1.AD7799介绍 AD7799结构图如下所示: 其中REFIN参考电压建议为2.5V, REFIN电压低于0.1V时,则差分输入ad值就无法检测了,如下图所示: 注意: 如果REG_CONFIG的REF_DET开启的话,那么输入AD值电压低于0.5V时,则差分输入ad值就无法检测了,如下图所示: 2.AD7799差分信号的输入模式 如下图所示,差分输入电压有3种模式: 注意: 单端输入电压(AIN-接地,只有正电压)则支持任意范围,比如In-Amp模式下,单端输入如果为10mv的话,也能检测到. 2.1 Unbuffered Mode非缓冲模式 该模式可测的AD值可以在 -30mV ~ (AVDD+30
[单片机]
STM32-24位AD7799驱动之手册代码详解,支持模拟<font color='red'>SPI</font>和硬件<font color='red'>SPI</font>
基于ARM9处理器的ZigBee工业以太网网关设计
   引言   目前多标准多协议共存的场合应用增多,而充当协议转换桥梁作用的网关起到了关键作用当前比较流行的两个本地无线技术无疑是Wi-Fi 和蓝牙,但是,对于低功耗、低带宽的控制类应用,诸如工厂内的传感器网络,ZigBee 或许是个更好的选择。配备一个功能强大的处理器后,ZigBee 可以在低功耗、低带宽的限制下高效完成很多复杂的应用。   ZigBee 因其低成本、低功耗、组网灵活等众多优势,成为工业无线通信技术中备受关注的技术之一。ZigBee 是一种低速网络,传输速度为10KB/S~250KB/S,多样的互联方式使得组网方式灵活而稳健。   文章介绍一种基于AT91SAM9260 的ZigBee 工业以太网网关设计,
[单片机]
基于<font color='red'>ARM9</font>处理器的ZigBee工业以太网网关设计
兆易创新推出突破性1.2V超低功耗SPI NOR Flash产品系列
应需而生!兆易创新推出突破性1.2V超低功耗SPI NOR Flash产品系列 中国北京(2022年8月19日) — 业界领先的半导体器件供应商兆易创新GigaDevice宣布,推出突破性的 1.2V超低功耗SPI NOR Flash产品——GD25UF系列 。该系列在数据传输速度、供电电压、读写功耗等关键性能指标上均达到国际领先水平,在针对智能可穿戴设备、健康监测、物联网设备或其它单电池供电的应用中,能显著降低运行功耗,有效延长设备的续航时间。 随着物联网技术的发展,新一代智能可穿戴设备需要拥有更丰富的功能来满足消费者的需求,这种空间敏感型产品对系统功耗提出了更严苛的要求,希望进一步提升产品的续航能力。从系统设计层
[嵌入式]
兆易创新推出突破性1.2V超低功耗<font color='red'>SPI</font> NOR Flash产品系列
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved