历史上的今天
返回首页

历史上的今天

今天是:2025年04月15日(星期二)

正在发生

2018年04月15日 | ARM9的SPI

2018-04-15 来源:eefocus

实验前须知:
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)的方式。


上一篇:STM32的LED灯实验

下一篇:ARM9的IIC

推荐阅读

史海拾趣

Gazelle Microcircuits Inc公司的发展小趣事
负电压的生成需要额外的电路和功耗,取消这些电压输出可以降低主板的整体功耗和发热量,提高能效。
Eby Electro Inc公司的发展小趣事

Eby Electro Inc在发展壮大的同时,始终关注社会责任的履行。公司积极参与环保和公益活动,推广绿色电子产品,减少生产过程中的环境污染。此外,公司还设立了奖学金和助学金,支持教育事业的发展。这些举措不仅提升了公司的社会形象,也为公司赢得了更多的社会支持和认可。

Emmoco公司的发展小趣事

在稳固了电子元器件和模块市场地位后,Emmoco开始寻求多元化发展。公司利用自身的技术优势和市场经验,逐步拓展产品线,涉足智能家居、物联网等领域。通过不断的技术创新和市场拓展,Emmoco成功实现了产品线的多元化,为客户提供更加全面和多样化的解决方案。

Epitex Inc公司的发展小趣事

随着全球环保意识的不断提高,Epitex也积极响应环保号召,将环保理念融入到公司的生产经营中。他们采用环保材料和生产工艺,减少对环境的影响。同时,Epitex还积极参与环保公益活动,推动电子行业的绿色发展。

在可持续发展方面,Epitex也做出了积极努力。他们通过技术创新和产业升级,不断提高资源利用效率和产品附加值。同时,Epitex还注重与供应商和客户的合作,共同推动产业链的可持续发展。

Davico Industrial Ltd公司的发展小趣事

Epitex非常重视企业文化的建设和团队精神的培育。他们倡导“创新、协作、务实、共赢”的价值观,鼓励员工积极创新、勇于挑战。同时,Epitex还注重员工关怀和福利待遇的提升,为员工提供良好的工作环境和发展空间。

在团队建设方面,Epitex注重培养员工的团队协作能力和沟通能力。他们定期组织团队活动和培训项目,增强团队的凝聚力和向心力。这种积极向上的企业文化和高效的团队协作为Epitex的持续发展提供了有力保障。

Broadband公司的发展小趣事

Epitex Inc公司成立于XXXX年,由一群热衷于电子技术的工程师和企业家共同创立。当时,电子行业正处于快速发展的阶段,各种新技术层出不穷。Epitex的创始人看到了电子材料在半导体制造中的巨大潜力,于是决定专注于研发和生产高性能的电子材料。

在公司创立初期,Epitex面临着资金、技术和市场等多方面的挑战。然而,通过不懈的努力和持续的创新,Epitex逐渐在电子材料领域取得了突破。他们研发出了一种新型的电子封装材料,具有优异的耐热性和绝缘性能,迅速在市场上获得了认可。

问答坊 | AI 解惑

Keil C51 UV2调试命令(中文版) .pdf

传个Keil C51 UV2调试命令(中文版)资料,希望大家喜欢。…

查看全部问答>

最小系统6

功能: 将LCD填充为黑色 ******************************************************************************/ void lcd_fill(void) { uchar i,j; uchar byte[1] = {0xFF}; for(i=0;i…

查看全部问答>

CPLD的资源与稳定性

有人说CPLD资源使用过多会发热严重,影响稳定性。 现有一项目准备做PCB了,有一EPM7128的宏单元用了88%引脚用了86%,不知对稳定性是否真的有影响?以前的项目都没用过这么多的。 请有此类经验的同仁给点意见。。。…

查看全部问答>

usb外置键盘在什么时候起作用

笔记本电脑进水,键盘回车键失灵,最关键的键啊,已经很长时间了,不要告诉我晾干什么的方法。用了个keyswap用alt键代替回车,就这样凑合用。现在问题,那个keyswap是更改系统注册表实现的,必须进入xp系统后(到登陆画面)才可以使用。在此以前, ...…

查看全部问答>

北京旋极 高薪急招 高级税控软件工程师

北京旋极 高薪急招 高级税控软件工程师 职责: 负责税控项目系统软件的技术研发。 要求: 1、有完整税控项目研发的经验。 2、精通税控系统的各项技术。 3、诚信健康 联系:hr@watertek.com …

查看全部问答>

选型问题求助

最近正在和客户谈灌装设备,主传动和灌装都要求用伺服电机,由于设备有无杯不灌装的功能,所以每个灌装头都要配备一个伺服,这样加上主传动,一共要用到9个伺服,客户要求PLC用西门子的,请问如果选型的话用300的好还是400的好?…

查看全部问答>

请教各位关于万利EK学习板上调试usb的虚拟串口的问题

   最近使用stmf103做一个信号采集的实验板,觉得用usb传数据比较方便(主要是笔记本上都不带串口啊)。比较后打算用usb的虚拟串口功能比较好。有主机端的驱动程序,又有设备端的例程。 但是用起来有很多问题。因为是实时 ...…

查看全部问答>

STM8S用TIME1来触发ADC1转换

我把STM8 固件库中的TIME1触发 ADC2 的列程,翻译成 TIME1触发ADC1,可失败了!请大家帮我找找原因! void main(void) {     /*  Init GPIO for ADC2 */     GPIO_Init(GPIOB, GPIO_PIN_3, GPIO_MODE_IN_FL_ ...…

查看全部问答>

2011年全国电子设计竞赛培训资料

本帖最后由 paulhyde 于 2014-9-15 03:35 编辑 希望可以帮助到今年参加电赛的同学们    …

查看全部问答>

zstack组网距离远远小于数据传输距离,如何实现远距离组网?

现在有两个思路一个是扩大组网距离但似乎实现起来比较困难另一个是去掉组网过程,使一定数量的节点启动后就连接一个网络,这样能避免组网距离太近的缺陷实际应用中各个节点都安装好,开机后组网,组网后可正常使用但现在的情况组网距离很近,加了CC ...…

查看全部问答>