lpc1114的spi速率设置

发布者:冷漠之心最新更新时间:2016-12-09 来源: eefocus关键字:lpc1114  spi  速率设置 手机看文章 扫描二维码
随时随地手机看文章

spi速率计算公式为:PCLK / (CPSDVSR *[SCR+1])

公式出处:lpc1114用户手册SSP章节CR0寄存器的bit15:bit8定义的解释里面

LPC1114spi速率计算公式

PCLK是当前SSP的时钟,CPSDVSR是寄存器CPSR值,SCR是CR0寄存器bit15:bit8的值。

所以spi的速率受到了3个寄存器值的影响,这3个寄存器分别是:

1. LPC_SYSCON->SSP1CLKDIV或者 LPC_SYSCON->SSP0CLKDIV(这是SSP的分频寄存器)

2. LPC_SSP1->CR0(这是SSP控制寄存器0,其中bit15:bit8决定速率)

3. LPC_SSP1->CPSR(这是SSP时钟预分频寄存器)

得到这3个寄存器的值,就可以计算出当前的spi速率值,例如下面的SPI1初始化函数:

void SPI1_Init(void)
{
 uint8_t i,Clear=Clear;//Clear=Clear:用这种语句形式解决编译产生的Waring:never used!
 LPC_SYSCON->PRESETCTRL |= (0x1<<2); //禁止LPC_SSP1复位
 LPC_SYSCON->SYSAHBCLKCTRL |= (0x1<<18);//允许LPC_SSP1时钟 bit18
 LPC_SYSCON->SSP1CLKDIV = 10; //10分频:50/10=5Mhz
 LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟(bit16)
 LPC_IOCON->PIO2_1 &= ~0x07;
 LPC_IOCON->PIO2_1 |= 0x02; //把PIO2_1选择为LPC_SSP CLK
 LPC_IOCON->PIO2_2 &= ~0x07;
 LPC_IOCON->PIO2_2 |= 0x02; //把PIO2_2选择为LPC_SSP MISO
 LPC_IOCON->PIO2_3 &= ~0x07;
 LPC_IOCON->PIO2_3 |= 0x02; //把PIO2_3选择为LPC_SSP MOSI
 LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟(bit16)
 // 8位数据传输,SPI模式, CPOL = 1, CPHA = 1,空闲时CLK为1,SCR = 4
 LPC_SSP1->CR0 = 0x04C7;
 // 预分频值(注意:这里必须为偶数 2~254)
 LPC_SSP1->CPSR = 10;
 LPC_SSP1->CR1 &= ~(1<<0);//LBM=0:正常模式
 LPC_SSP1->CR1 &= ~(1<<2);//MS=0:主机模式
 LPC_SSP1->CR1 |= (1<<1);//SSE=1:使能SPI1
 //清空RxFIFO,LPC1114收发均有8帧FIFO,每帧可放置4~16位数据
 for ( i = 0; i < 8; i++ )
 {
   Clear = LPC_SSP1->DR;//读数据寄存器DR将清空RxFIFO
 }
 }

上面例子中,主频50MHz, LPC_SYSCON->SSP1CLKDIV值为10,即PCLK=5MHz; LPC_SSP1->CR0=0x04c7,即bit15:bit8为4,即SCR=4;LPC_SSP1->CPSR=10;带入公式计算得出,现在的SPI速率应该是100KHz.

SPI速率波形

上图中,示波器,横向每格表示5微秒,图中一个周期就是10微秒,即100KHz,实测与理论完全一致。


关键字:lpc1114  spi  速率设置 引用地址:lpc1114的spi速率设置

上一篇:用LPC1114做产品-如何设计程序下载接口
下一篇:ATT7053智能电表程序与电路图设计

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

spi协议时序图和四种模式实际应用详解
上个章节我们讲解了spi接口定义,今天我们更加深入讲解下spi协议时序图和spi四种模式的用法。 刚开始接触单片机开发时,最怕就是看时序图,对于我来说就是奇怪的知识。 特别是SPI和IIC的,以前写程序都直接复制别人程序,功能实现就行了也没去研究过数据传输的时候时序具体是怎么样的。 那个时候经验也不足,网上搜的资料说的都太学术化了,也看不懂。 后面项目做多了,发现最常用到的通信总线无非就是SPI、IIC、USART、CAN、单口通信。 理解也慢慢深刻了,现在去分析时序图也更加清晰了。 所以, 我经常和无际单片机编程的学员灌输一种理念,先学会用,用多了经验丰富了再深入就轻松了 。 不要在你没经验的时候去死磕,否则会付出很多不必要的时
[单片机]
STM8S学习01——SPI&IIC
1、温习IIC总线协议 1)I2C 总线的一些特征 1 只要求两条总线线路 一条串行数据线 SDA 一条串行时钟线 SCL 2 每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机 从机关系软件设定地址 主机可以作为主机发送器或主机接收器 3 它是一个真正的多主机总线 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁,防止数据被破坏 4 串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/s 快速模式下可达 400kbit/s 高速模式下可达 3.4Mbit/s 5 片上的滤波器可以滤去总线数据线上的毛刺波 保证数据完整 6 连接到相同总线的 IC 数量只受到总线的最大电容 400pF 限制
[单片机]
STM32F103 SPI接口9MHz时钟和18Mhz时钟的波形对比
最近工作上的原因使用了STM32F103V8T6这款CPU,用到了SPI接口来读取AD器件AD7685的数据。按该CPU的手册说明,该SPI接口最大的时钟频率为18MHz,即主时钟72MHz的4分频。抓取了两种时钟频率下SPI接口的波形,保留,待以后有时机细研究。 关于时钟的说明: 1.9MHz采32个AD值 2.9MHz采32个AD值中的1个进行放大观察 3.18MHz采32个AD值 4.18MHz采32个AD值
[单片机]
STM32F103 <font color='red'>SPI</font>接口9MHz时钟和18Mhz时钟的波形对比
联盛德 HLK-W806 (九): 软件SPI和硬件SPI驱动ST7789V液晶LCD
ST7789介绍 ST7789/ST7789V/ST7789H2, 用于单片驱动262K色图像TFT-LCD, 包含 720(240*3色) x 320 线输出, 可以直接以SPI协议, 或者8位/9位/16位/18位并行连接外部控制器. 显示数据存储在片内 240x320x18 bits内存中, 显示内存的读写不需要外部时钟驱动. ST7789有 ST7789, ST7789V, ST7789H2等型号, 分辨率有240x204, 240x240, 240x320等多种类型, 驱动方式都是一样的. 接线 ST7789的接线有7针/8针和兼容并口的40针, 会比ST7735多一些, 一部分是用于背光LED, 因为显示
[单片机]
联盛德 HLK-W806 (九): 软件<font color='red'>SPI</font>和硬件<font color='red'>SPI</font>驱动ST7789V液晶LCD
SPI的电路设计
PIC16F877A将其SCK(串行时钟)和SDO(串行数据输出)分别与74HC165的CP和Ds引脚相连,送出时钟信号和串行数据。 74HC165将接收到的串行数据转换成并行数据,通过并行数据输出口D0~D7连接到共阴极数码管,从而实现在SPI方式下驱动数码管显示数据,电路连接如图所示。 图 PIC16F877A与74HC165的接线
[电源管理]
<font color='red'>SPI</font>的电路设计
STM32模拟SPI接口
做单片机开发的时候经常需要用到模拟spi接口,这种写法不错的,网上很多类似的,我也拿来主义了。 #define MOSI_H GPIO_SetBits(GPIOB, GPIO_Pin_10) #define MOSI_L GPIO_ResetBits(GPIOB, GPIO_Pin_10) #define SCLK_H GPIO_SetBits(GPIOB, GPIO_Pin_13) #define SCLK_L GPIO_ResetBits(GPIOB, GPIO_Pin_13) #define MISO GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) unsigned char SPI_
[单片机]
基于S3C2440处理器SPI移植全过程
环境 硬件:S3C2440(ARM920T) 嵌入式操作系统:Linux2.6.24内核 文件系统:Yaffs2文件系统 服务器:SuSe10.0 Linux服务器 第一步:内核配置 需要在内核中选择以上几个选项: 很多网友发邮件说Linux2.6.24内核在SPI选项上未发现有Samsung S3C2440 series SPI 或 Samsung S3C24XX series SPI 和User mode SPI device driver support这两个选项。 其实在Linux2.6.24内核里已经兼容了对SPI的操作。只是在Linux2.6.24/drivers/spi/Kconfig中未能选中此选项
[单片机]
基于S3C2440处理器<font color='red'>SPI</font>移植全过程
stm32_SPI基本函数
void SPI_RCC_config(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE); } void SPI_GPIO_config(void) { GPIO_InitTypeDef GPIO_InitStructure;; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//SCK GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructu
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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