SPI设计


title: SPI设计
tags: ARM
date: 2018-11-05 15:22:59
---

SPI设计

概述

在SPI协议中,有两个值来确定SPI的模式。 CPOL:表示SPICLK的初始电平,0为电平,1为高电平 CPHA:表示相位,即第一个还是第二个时钟沿采样数据,0为第一个时钟沿,1为第二个时钟沿.

CPOLCPHA模式含义
000初始电平为低电平,在第一个时钟沿采样数据
011初始电平为低电平,在第二个时钟沿采样数据
102初始电平为高电平,在第一个时钟沿采样数据
113初始电平为高电平,在第二个时钟沿采样数据

常用的是模式0和模式3,因为它们都是在上升沿采样数据,不用去在乎时钟的初始电平是什么,只要在上升沿采集数据就行。比如下图的flash手册

mark

寄存器配置

  1. GPIO复用为SPI
  2. 设置SPI寄存器
    1. 设置波特率预分频寄存器(SPPREn)
    2. 设置 SPCONn 来正确配制 SPI 模型
    3. 写数据 0xFF 到 SPTDATn 10 次来初始化 MMC 或 SD 卡
    4. 设置起 nSS 作用的 GPIO 引脚为低来激活 MMC 或 SD 卡
    5. 发送数据 ¡ 检查发送就绪标志的状态(REDY = 1),并接着写数据到 SPTDATn。
    6. 接收数据(1):SPCONn 的 TAGD 位禁止 = 普通模式
    7. ¡ 写 0xFF 到 SPTDATn,然后确认 REDY 的置位,并接着从读缓冲器读取数据
    8. 接收数据(2):SPCONn 的 TAGD 位使能 = 自动发送杂数据模式
    9. ¡ 确认 REDY 的置位,并接着从读缓冲器读取数据(然后自动开始传输)
    10. 设置起 nSS 作用的 GPIO 引脚为高来释放 MMC 或 SD 卡

程序设计

/*
[6:5]设置为查询模式: 00 polling mode
[4]设置时钟使能: 1 = enable 
[3]设置为主机模式: 1 = master
[2]设置无数据时时钟为低电平: 0
[1]设置工作模式为模式A: 0 = format A
[0]设置发送数据时无需读取数据: 0 = normal mode
*/
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);
    
}

发送接收(查询)

mark

void SPISendByte(unsigned char val)
{
    while (!(SPSTA1 & 1));
    SPTDAT1 = val;    
}
//读数据的时候,无所谓发什么数据
unsigned char SPIRecvByte(void)
{
    SPTDAT1 = 0xff;    
    while (!(SPSTA1 & 1));
    return SPRDAT1;    
}

转载于:https://www.cnblogs.com/zongzi10010/p/10023646.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值