LPC824-SPI接口(续一)

发布者:电子创意达人最新更新时间:2023-10-03 来源: elecfans关键字:LPC824  SPI接口  寄存器 手机看文章 扫描二维码
随时随地手机看文章

SPI接口共涉及到11个寄存器,下面就来对它们进行具体分析。

先来看SPI配置寄存器CFG,下表是它的全部位结构,其地址分别为0x40058000(SPI0),0x4005C000(SPI1)。

(1)第0位(ENABLE)为SPI使能位,值为0时禁用SPI接口,值为1时使能SPI接口,默认为禁止。
(2)第1位为保留位,写入时只能写0。
(3)第2位(MASTER)为主机模式选择位,值为0时是从机模式,此时SCK、MOSI和SSEL信号为输入,MISO为输出,值为1时是主机模式,此时SCK、MOSI和SSEL信号为输出,MISO为输入,默认为从机模式。
(4)第3位(LSBF)为LSB优先模式使能位,值为0时是标准模式,数据以标准MSB优先顺序发送和接收,值为1时是反转模式,数据以反转顺序发送和接收(LSB优先),默认为标准模式。
(5)第4位(CPHA)为时钟相位选择位,值为0时是更改模式,SPI在传输的第一个时钟转换时捕捉串行数据(此时时钟向休闲状态的反方向变动),数据在下一个边沿改变,值为1时是捕获模式,SPI在传输的第一个时钟转换时改变串行数据(此时时钟向休闲状态的反方向变动),在下一个边沿捕捉数据,默认为更改模式。
(6)第5位(CPOL)为时钟极性选择位,值为0时为低电平,即时钟休闲状态(两次传输之间)为低电平,值为1时为高电平,即时钟休闲状态(两次传输之间)为高电平,默认为低电平。
(7)第6位为保留位,写入时只能写0。
(8)第7位(LOOP)为环回模式使能位,环回模式仅适用于主机模式,它将发送和接收数据相连,支持简单的软件测试,值为0时禁止,值为1时使能,默认为禁止。
(9)第8位(SPOL0)为SSEL0极性选择位,值为0时选择低电平有效,值为1时选择高电平有效,默认为低电平有效。
(10)第9位(SPOL1)为SSEL1极性选择位,值为0时选择低电平有效,值为1时选择高电平有效,默认为低电平有效。
(11)第10位(SPOL2)为SSEL2极性选择位,值为0时选择低电平有效,值为1时选择高电平有效,默认为低电平有效。
(12)第11位(SPOL3)为SSEL3极性选择位,值为0时选择低电平有效,值为1时选择高电平有效,默认为低电平有效。
(13)第12到31位为保留位,写入时只能写0。

接下来看SPI延迟寄存器DLY,下表是它的全部位结构,其地址分别为0x40058004(SPI0), 0x4005C004(SPI1)。

(1)第0到3位(PRE_DELAY)用来控制SSEL有效和数据开始传输之间的时间,SSEL有效和第一个时钟沿之间始终存在1个SPI时钟,它不视为本预延迟的部分,值为0时表示未插入额外延时时间,值从0x1到0xF分别表示插入1到15个SPI时钟的延时时间,默认为未插入额外延时时间。
(2)第4到7位(POST_DELAY)用来控制数据传输结束和SSEL无效之间的时间,值为0时表示未插入额外延时时间,值从0x1到0xF分别表示插入1到15个SPI时钟的延时时间,默认为未插入额外延时时间。
(3)第8到11位(FRAME_DELAY)是当EOF标志置位,则控制当前帧和下一帧(如果EOT置位则为SSEL无效)之间的最短时间,值为0时表示未插入额外延时时间,值从0x1到0xF分别表示插入1到15个SPI时钟的延时时间,默认为未插入额外延时时间。
(4)第12到15位(TRANSFER_DELAY)用来控制两次传输之间SSEL处于无效的最短时间,当值为0x0时表示SSEL处于无效的最短时间为1个SPI时钟时间(零增量时间),当值为0x1时表示SSEL处于无效的最短时间为2个SPI时钟时间,以此类推,当值为0xF时表示SSEL处于无效的最短时间为16个SPI时钟时间,默认为零增量时间。
(5)第16到31位为保留位,写入时只能写0。
 

接下来是SPI状态寄存器STAT,下表是它的全部位结构,其地址分别为0x40058008(SPI0), 0x4005C008(SPI1)。 

(1)第0位(RXRDY)为SPI接收器就绪标志位,值为1时表示可从接收器缓冲区中读取数据,对RXDAT寄存器执行读取操作后自动清除该位。
(2)第1位(TXRDY)为SPI发送器就绪标志位,值为1时表示数据可以被写入发送缓冲区,可能在继续传输之前的数据。数据写入TXDAT或TXDATCTL时自动清零该位,直至数据移入发送移位寄存器,该位默认值便为1。
(3)第2位(RXOV)为接收器溢出中断标志位,此标志仅适用于从机模式(Master=0时),当检测到接收字符,但接收器缓冲区正被使用时,此标志置位,若这种情况发生,则保留接收器缓冲区内容,丢弃输入数据,若本位被置位,则SPI接收的数据应视为未定义。
(4)第3位(TXUR)为发送器下溢中断标志位,此标志仅适用于从机模式(Master=0时),这种情况下, 如果发送器空闲,则发送器必须在下一个输入时钟开始时发送新数据,若此时发送器保持寄存器中该数据不可用,则无数据可供传输,此标志置位,若本位被置位,则SPI发送的数据应视为未定义。
(5)第4位(SSA)为从机选择有效标志位,无论主机还是从机模式,只要任何从机选择从无效转换到有效状态,此标志便置位,这样可以确定SPI发送/接收功能何时变为繁忙,并允许在开始执行从机模式访问时将器件从低功耗模式唤醒,本标志必须通过软件才能清零。
(6)第5位(SSD)为从机选择无效标志位,无论主机还是从机模式,只要任何有效状态的从机选择转换到无效状态,此标志便置位,这样可以确定SPI发送/接收功能何时变为空闲,本标志必须通过软件才能清零。
(7)第6位(STALLED)为终止状态标志位,表示SPI是否处于停止条件。
(8)第7位(ENDTRANSFER)为传输结束控制位,当发送器完成任意执行中的操作时,软件可以置位该位,强制结束当前传输,就好像EOT标志已经在最后一次传输之前完成置位,此功能可以为这种情况提供支持,即它不知道发送数据是何时写入的,并用来结束传输,随着传输即将结束,当发送器变为空闲时,该位清零,以这种方式强制传输结束可以插入任何指定的FRAME_DELAY和TRANSFER_DELAY。
(9)第8位(MSTIDLE)为主机空闲状态标志位,只要SPI主机功能完全空闲,该位便被置1,这意味着发送保持寄存器为空,且发送器未执行数据发送任务,该位默认值便为1。
(10)第9到31位为保留位,写入时只能写0。

接下来看SPI中断使能读取和置位寄存器INTENSET,下表是它的全部位结构,其地址分别为0x4005800C(SPI0)、0x4005C00C(SPI1)。 

(1)第0位(RXRDYEN)用于判断当接收器数据可用时确定是否发生了中断,值为0时表示接收器数据可用时不产生中断,值为1时表示接收器数据在RXDAT寄存器中可用时产生中断,默认为不产生中断。
(2)第1位(TXRDYEN)用于判断当发送器保持寄存器可用时确定是否发生了中断,值为0时表示发送器保持寄存器可用时不产生中断,值为1时表示数据可写入TXDAT时产生中断,默认为不产生中断。
(3)第2位(RXOVEN)用于判断当发生接收器溢出时,确定是否发生了中断,在从机模式下,当接收器需要将新接收的数据移动到RXDAT寄存器,而该寄存器正在使用时,就会发生这种情况,主机模式下,接口通过不允许进行可能导致接收器溢出的最新传输而防止接收器溢出,值为0时表示发生接收器溢出时不产生中断,值为1时表示若发生了接收器溢出,则产生中断,默认为不产生中断。
(4)第3位(TXUREN)用于判断当发生发送器下溢时,确定是否发生了中断。在从机模式下,当需要发送数据但无可用数据时,就会发生这种情况,值为0时表示发送器下溢时不产生中断,值为1时表示若发生了发送器下溢,则产生中断,默认为不产生中断。
(5)第4位(SSAEN)用于判断当从机选择有效时,确定是否产生中断,值为0时表示任何从机选择从无效变为有效都不会产生中断,值为1时表示任何从机选择从无效变为有效都会产生中断,默认为不产生中断。
(6)第5位(SSDEN)用于判断当从机选择无效时,确定是否产生中断,值为0时表示当所有已生效的从机选择变为无效时,不产生中断,值为1时表示当所有已生效的从机选择变为无效时,产生中断,默认为不产生中断。
(7)第6到31位为保留位,写入时只能写0。

接下来看SPI中断使能清零寄存器INTENCLR,下表是它的全部位结构,其地址分别为0x40058010(SPI0)、0x4005C010(SPI1)。由于上面的INTENSET寄存器只能写1不能写0,所以INTENCLR寄存器就是实现INTENSET寄存器清零的。

(1)第0到5位用于对应清零上面INTENSET寄存器中相应的位,如果向这些位写入1,便会将INTENSET寄存器中相对应的位清零。
(2)第6到31位为保留位,写入时只能写0。

--待续--  


关键字:LPC824  SPI接口  寄存器 引用地址:LPC824-SPI接口(续一)

上一篇:LPC824-SPI接口(续二)
下一篇:LPC824-SPI接口

推荐阅读最新更新时间:2024-11-11 13:23

PIC单片机内部A/D转换
//需求,将板子上电位器接RA0,设置PIC的AD相关寄存器,显示电压 #include pic.h __CONFIG(0x3831);//配置位18323831 #define uint unsigned int #define uchar unsigned char //共阴数码管(板子上用了达林顿管ULN2003,反向器) const unsigned char table ={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f}; //加小数点的共阴数码管显示,非常不错 const uchar table1 ={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0x
[单片机]
STM32F103x RCC寄存器配置
rcc reset and clock control 复位及时钟控制 主要是设置时钟树中的内容,如下图所示: 具体在RCC_Configuration函数中的体现。 第一步:系统时钟选择哪个,HSE、HSI还是PLLCLK。 RCC_HSEConfig(RCC_HSE_ON); //使用HSE 如果HSE时钟已经稳定,硬件会将RCC_CR的HSERDY位置1。 第二步:判断HSE时钟是否稳定 if (RCC_WaitForHSEStartUp() == SUCCESS) 第三步:使能FLASH的预取址缓冲区,并设置FLASH的等待状态。(具体功能见FLASH部分)
[单片机]
STM32F103x RCC<font color='red'>寄存器</font>配置
STM32 GPIO寄存器ODR BSRR BRR
使用BRR和BSRR寄存器可以方便地快速地实现对端口某些特定位的操作,而不影响其它位的状态。 比如希望快速地对GPIOE的位7进行翻转,则可以: GPIOE- BSRR = 0x80; // 置'1' GPIOE- BRR = 0x80; // 置'0' 如果使用常规'读-改-写'的方法: GPIOE- ODR = GPIOE- ODR | 0x80; // 置'1' GPIOE- ODR = GPIOE- ODR & 0xFF7F; // 置'0' 有人问是否BSRR的高16位是多余的,请看下面这个例子: 假如你想在一个操作中对GPIOE的位
[单片机]
ATmega128 通用寄存器
寄存器文件针对AVR 增强型 RISC 指令集做了优化。为了获得需要的性能和灵活性,寄存器文件支持以下的输入/ 输出方案: • 一个 8 位输出操作数和一个 8 位结果输入。 • 两个 8 位位输出操作数和一个 8 位结果输入。 • 两个 8 位位输出操作数和一个16 位结果输入。 • 一个 16 位位输出操作数和一个 16 位结果输入。 Figure 4 为CPU 32 个通用工作寄存器的结构。 大多数操作寄存器文件的指令都可以直接访问所有的寄存器,而且多数的执行时间为单 时钟周期。 如Figure 4 所示,每个寄存器都有一个数据内存地址,将他们直接映射到用户数据空间的 头32 个地址。虽然寄存器文件的物理实现不是SR
[单片机]
ATmega128 通用<font color='red'>寄存器</font>
DS1302 寄存器介绍
DS1302 的一条指令一个字节共8位,其中第7位(即最高位)固定为1,这一位如果是0的话,那写进去也是无效的。第6位是选择 RAM 还是 CLOCK 的,我前边说过,我们这里主要讲 CLOCK 时钟的使用,它的 RAM 功能我们不用,所以如果选择 CLOCK 功能,第6位是0,如果要用 RAM,那第6位就是1。从第5到第1位,决定了寄存器的5位地址,而第0位是读写位,如果要写,这一位就是0,如果要读,这一位就是1。指令字节直观位分配如图15-9所示。 图15-9 DS1302 命令字节 DS1302 时钟的寄存器,其中8个和时钟有关的,5位地址分别是 0b00000~0b00111,还有一个寄存器的地址是 01000,这是涓
[单片机]
DS1302 <font color='red'>寄存器</font>介绍
STM32使用BSRR和BRR寄存器快速操作GPIO端口
STM32的每个GPIO端口都有两个特别的寄存器,GPIOx_BSRR和GPIOx_BRR寄存器,通过这两个寄存器可以直接对对应的GPIOx端口置'1'或置'0'。 GPIOx_BSRR的高16位中每一位对应端口x的每个位,对高16位中的某位置'1'则端口x的对应位被清'0';寄存器中的位置'0',则对它对应的位不起作用。 GPIOx_BSRR的低16位中每一位也对应端口x的每个位,对低16位中的某位置'1'则它对应的端口位被置'1';寄存器中的位置'0',则对它对应的端口不起作用。
[单片机]
51单片机特殊功能寄存器有哪些_功能是什么
  51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。   51单片机特殊功能寄存器   1、21个寄存器介绍   51系列单片机内部主要有四大功能模块,分别是I/O口模块、中断模块、定时器模块和串口通信模块(串行I/O口
[单片机]
51单片机特殊功能<font color='red'>寄存器</font>有哪些_功能是什么
STM32F4中GPIO_PuPd寄存器设置上拉与下拉问题
首先 上下拉 是给IO一个默认的状态 比如控制EN的话,那么高有效的我们就下拉,低有效的话我们就上拉 而 很多IO 由于CMOS工艺问题会出现float的现象,所以不能悬空 需要PU PD。 上拉和下拉是指GPIO输出高电位(上拉)还是低电位(下拉)。 上拉就是输入高电平,然后接一个上拉电阻(起保护作用),知道上拉就表示该端口在默认情况下输入为高电平。 下拉就相反了,指输入低电平,然后接一个下拉电阻。 那么,什么是高电平,什么是低电平呢?这是电路方面的知识,百度百科讲的,表示不太懂。 上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。 下拉同理。也是将不确定的信号通过一个电阻钳位在低电平。 不过从程序设计的角度
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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