KEA128用户参考手册.docx
《KEA128用户参考手册.docx》由会员分享,可在线阅读,更多相关《KEA128用户参考手册.docx(215页珍藏版)》请在冰豆网上搜索。
KEA128用户参考手册
第30章串行外设接口(SPI)
30.1介绍
注意:
芯片模块的具体实施细节详见芯片的配置信息。
串行外设接口(SPI)模块为MCU和外设之间提供了全双工同步串行通信。
这些外设包括各种微控制器,模拟-数字转换器,移位寄存器,传感器,和存储器等等。
SPI主机模式可以在总线时钟2分频的波特率下运行,或是在从机模式下总线4分频的波特率下运行。
SPI可使用软件查询方式或是中断方式来工作。
注意:
至于SPI工作的最大波特率,请参考芯片配置细节和器件的数据手册。
为了匹配接收数据缓冲区,SPI包含了硬件匹配功能。
30.1.1特性
SPI包含以下鲜明的特性:
(1)主机模式或是从机模式运行。
(2)全双工或单线双向模式。
(3)可编程的传输波特率。
(4)双缓冲发送和接收数据寄存器。
(5)串行时钟相位和极性选择。
(6)从机选择输出。
(7)具有CPU的中断功能模式错误标志。
(8)在等待模式下的SPI操作控制。
(9)可选MSB优先或LSB优先转换。
(10)接收数据缓冲区硬件匹配功能。
30.1.2操作模式
SPI可在以下三种模式下工作:
运行、等待和停止。
运行模式:
这是基本的操作模式。
等待模式:
在等待模式下SPI操作是一个可配置的低功耗模式,它被SPIx_C2寄存器的C2[SPISWAI]位控制。
在等待模式下,如果C2[SPISWAI]位被清0,SPI会进入运行模式。
如果C2[SPISWAI]位被置位,SPI就会进入节电模式,SPI时钟关闭。
如果SPI被配置为主机模式,当前的任何传输都会停止,但会在CPU进入运行模式后恢复。
如果SPI被配置为从机模式,字节接收和发送将继续,以便从机保持与主机的同步。
停止模式:
为了节电,SPI在外围设备被停止但内部逻辑仍然继续的停止模式下是非激活的。
如果SPI作为一个主机,当前的任何传输都会停止,但会在CPU进入运行模式后恢复。
如果SPI被配置成为一个从机,数据的发送和接收继续,以便从机保持与主机的同步。
SPI在外围总线时钟停止且不保留内部逻辑的停止模式下是完全关闭的。
当CPU工作在这些停止模式,所有的SPI寄存器被重置。
详细操作模式见“低电模式选项”信息。
30.1.3结构图
这一节包含结构图,它描述了SPI系统连接、SPI模块的内部组织、和用于控制主模式波特率的SPI时钟分频器。
30.1.3.1SPI系统结构图
图30-1显示为两个MCU的SPI模块连接成主从模式。
主机开启所有的SPI数据传输。
在传输期间,主机发送数据给从机,同时从从机获得数据。
数据移位器可以高效的传输数据,数据存放在两个SPI系统的SPI移位寄存器。
SPSCK信号是主机时钟的输出,是从机的输入。
主机通过把从机选择引脚拉低为低电平实现对该从机的选择。
在这个系统中,主机已配置它的
引脚作为从机选择输出。
图30-1SPI系统连接
30.1.3.2SPI模块结构图
图30-2是SPI模块的结构图。
SPI的核心要素是SPI移位寄存器。
数据被写入到双缓冲的发送器(写入SPIx_D)和被转移到SPI移位寄存器,然后数据传送开始。
在接收8位的数据时,该数据被转移到双缓冲的接收器,在那里数据可以从SPIx_D读取。
引脚复用逻辑控制着MCU引脚和SPI模块的连接的对应关系。
当SPI配置为主机时,时钟输出发送到SPSCK引脚,移位器输出被连接到MOSI,移位寄存器的输入则来自MISO引脚。
当SPI配置为从机,SPSCK引脚被连接到时钟SPI输入端,转换器输出发送到MISO,输入来自MOSI引脚。
在外部SPI系统中,所有SPSCK引脚简单地彼此连接。
所有MISO引脚连在一起,所有MOSI引脚连在一起。
外围设备上的这些引脚的名字通常略有不同。
图30-2没有FIFO的SPI模块结构图
30.2外部信号描述
SPI合理的分配了四个端口引脚。
这些引脚的功能依赖于SPI控制位的设置。
当SPI(SPE=0)关闭,这四个引脚转换成其他的功能,它们就不再受SPI控制。
30.2.1SPSCK-SPI串行时钟
当SPI模块设置成为从机,这个引脚是串行时钟的输入。
当这个SPI作为一个主机时,这个引脚是串行时钟输出。
30.2.2MOSI–主机数据输出,从机数据输入
当SPI设置为主机,SPI引脚控制零(SPC0)是0(非单线双向模式),这个引脚是串行数据输出。
当SPI设置成为从机模式,并且SPC0是0,这个引脚是串行数据输入。
如果SPC0是1就会选择单线双向模式,并且同时选择了主机模式,这个引脚变成双向数据I/O引脚(MOMI)。
双向模式输出使能位决定这个引脚是作为一个输出(BIDIROE是0)还是作为一个输入(BIDIROE是1)。
如果,SPC0是1并且被设置为从机模式,这个引脚就不会被SPI用来转换成为其他功能(依赖芯片配置)。
30.2.3MISO-主机数据输入,从机数据输出
当SPI设置为主机,SPI引脚控制零(SPC0)是0(非单线双向模式),这个引脚是串行数据输入。
当SPI设置成为从机模式,并且SPC0是0,这个引脚是串行数据输出。
如果SPC0是1就会选择单线双向模式,且同时选择了主机模式,这个引脚变成双向数据I/O引脚(MOMI)。
双向模式输出使能位决定这个引脚是作为一个输出还是作为一个输入。
如果,SPC0是1并且选择了从机模式,这个引脚就不会被SPI使用,成为其他功能(依赖芯片配置)。
30.2.4____SS—从机选择
当SPI被设置成为从机模式,当此引脚为低时,从机被选择。
当SPI被设置作为主机,且模式错误使能关闭(MODFEN是0),这个引脚不被SPI使用或是被用作其他功能。
当SPI被设置为主机,并且MODFEN是1,从机选择输出决定这个引脚是否作为错误的输入(SSOE是0)或是作为从机选择输出。
30.3地址映射和寄存器说明
SPI有6个8位的寄存器来配置SPI,可以控制波特率,显示SPI的状态,控制一个SPI数据匹配值,发送或是接收数据。
表30-1SPI地址映射
地址偏移
绝对地址
寄存器名称
宽度
访问方式
重置值
章节
0
4007_6000
SPI控制寄存器1(SPI0_C1)
8
R/W
04h
30.3.1/493
1
4007_6001
SPI控制寄存器2(SPI0_C2)
8
R/W
00h
30.3.2/495
2
4007_6002
SPI波特率寄存器(SPI0_BR)
8
R/W
00h
30.3.3/496
3
4007_6003
SPI状态寄存器(SPI0_S)
8
R
20h
30.3.4/497
5
4007_6005
SPI数据寄存器(SPI0_D)
8
R/W
00h
30.3.5/498
7
4007_6007
SPI匹配寄存器(SPI0_M)
8
R/W
00h
30.3.6/499
0
4007_7000
SPI控制寄存器1(SPI1_C1)
8
R/W
04h
30.3.1/493
1
4007_7001
SPI控制寄存器2(SPI1_C2)
8
R/W
00h
30.3.2/495
2
4007_7002
SPI波特率寄存器(SPI1_BR)
8
R/W
00h
30.3.3/496
3
4007_7003
SPI状态寄存器(SPI1_S)
8
R
20h
30.3.4/497
5
4007_7005
SPI数据寄存器(SPI1_D)
8
R/W
00h
30.3.5/498
7
4007_7007
SPI匹配寄存器(SPI1_M)
8
R/W
00h
30.3.6/499
30.3.1SPI控制寄存器1(SPIx-C1)
这个可读/写寄存器包含SPI使能控制,中断使能和配置选项。
地址:
4007_6000hbase+0hoffset=4007_6000h
数据位
D7
D6
D5
D4
D3
D2
D1
D0
读/写
SPIE
SPE
SPTIE
MSTR
CPOL
CPHA
SSOE
LSBFE
复位
0
0
0
0
0
0
0
0
表30-2SPI0_C1字段说明
D7
(SPIE)
SPI中断使能:
是SPRF和MODF使能位。
这位使能SPI接收区满(SPRF)中断和模式错误(MODF)中断。
0:
SPRF和MODF中断是禁止的—只能使用查询方式;
1:
当SPRF或MODF为1时,请求一次硬件中断。
D6
(SPE)
SPI系统使能。
这位使能SPI系统并且使SPI端口引脚变成SPI系统功能。
如果SPE被清0,则SPI关闭并且强制进入一个暂停状态,所有的状态位被重置。
0:
SPI系统禁止。
1:
SPI系统启用。
D5
(SPTIE)
SPI发送中断使能。
它是SPI发送缓冲区空(SPIEF)的中断使能。
当SPI发送缓冲是空时中断发生。
0:
SPTEF中断禁止(使用查询方式),
1:
当SPTEF是1时,请求硬件中断。
D4
(MSTR)
主/从模式选择。
该位选择主模式或从模式操作。
0:
SPI模块配置为从SPI设备,
1:
SPI模块配置为主SPI设备。
D3
(CPOL)
时钟极性。
这位选择一个反转的或是非反转的SPI时钟。
要想在SPI模块之间传输数据,SPI模块都必须有完全一样的CPOL值。
这位可方便地将一个来自主机SPI或是通向从机SPI的串行时钟信号进行反转。
详细内容,请参阅“SPI时钟格式”说明。
0:
高电平有效(空闲状态为低电平)
1:
低电平有效(空闲状态为高电平)
D2
(CPHA)
时钟相位。
这位用来选择两种时钟格式中的一种,来跟不同的同步串行外设通信。
详细信息请参考“SPI时钟格式”。
0:
SPSCK的第一个边缘发生在第一位数据周期的中间,
1:
SPSCK的第一个边缘发生在第一位数据周期的开始。
D1
(SSOE)
从机选择输出使能。
这位与C2寄存器中的模式错误使能位(MODFEN)及主从控制位(MSTR)的组合,决定了
引脚的功能。
0:
当MODFEN为0:
在主机模式下,
引脚功能为通用I/O(非SPI)。
在从机模式下,
引脚被用来从机选择输入。
当MODFEN是1:
在主机模式下,
引脚功能为
,错误输入模式。
在从机模式下,
被设置为从机选择输入。
1:
当MODFEN为0:
在主机模式下,
引脚功能为通用I/O(非SPI)。
在从机模式下,
引脚的功能是从机选择输入。
当MODFEN是1:
在主机模式下,
引脚的功能是自动
输出。
在从机模式下:
引脚功能是从机选择输入。
D0(LSBFE)
LSB优先(移位方向)。
这位不影响数据寄存器中的MSB和LSB的位置。
MSB位一直在数据寄存器的第八位。
0:
SPI串行数据传输开始于最高有效位。
1:
SPI串行数据传输开始于最低有效位。
30.3.2SPI控制寄存器2(SPIx-C2)
该读/写寄存器是用来控制SPI系统的可选功能。
第6位是不起作用的并始终为0。
地址:
4007_6000hbase+1hoffset=4007_6001h
数据位
D7
D6
D5
D4
D3
D2
D1
D0
读/写
SPMIE
Reserved
Reserved
MODFEN
BIDIROE
Reserved
SPISWAI
SPC0
复位
0
0
0
0
0
0
0
0
表26-3SPI0_C2字段说明
D7
(SPMIE)
SPI匹配中断使能。
这是一个中断使能位,它使能SPI的硬件匹配中断功能(SPMF)。
0:
来自SPMF中断禁止(使用轮询)。
1:
当SPMF为1时,请求一次硬件中断。
D6
(Reserved)
保留
D5
(Reserved)
保留
D4
(MODFEN)
主模式故障功能使能位。
当SPI配置为从机模式下,该位没有意义或效果。
(
引脚是从机选择输入。
)在主模式下,该位决定
引脚如何使用。
有关详细信息,请参阅SSOE位在C1寄存器描述。
0:
模式错误功能禁止,主机
引脚恢转换为通用I/O控制。
1:
模式错误功能启用,主机
引脚作为模式默认输入或从机选择输出。
D3
(BIDIROE)
双向模式输出使能位。
当双向模式启用,SPI引脚控制0(SPC0)会被设置为1,BIDIROE位决定SPI数据输出驱动器是否启用单双向SPII/O引脚。
根据是否将SPI配置为主机或从机,它使用MOSI(MOMI)或MISO(SISO)引脚,分别为单SPI数据I/O引脚。
当SPC0是0时,BIDIROE没有意义或效果。
0:
禁止输出驱动器,所以SPI数据I/O引脚配置为输入。
1:
SPII/O引脚使能为输出。
D2
(Reserved)
保留
D1
(SPISWAI)
在等待模式下SPI停止。
这位被用于等待模式下的节电。
0:
SPI时钟在等待模式下,继续运行。
1:
MCU进入等待模式,SPI时钟停止。
D0
(SPC0)
SPI引脚控制0。
该位使能双向引脚配置。
0:
SPI使用分开的引脚用于数据输入和数据输出(引脚模式是正常的)。
在主模式下操作:
MISO是主机接收数据引脚,MOSI是主机发送数据引脚。
在从模式下操作:
MISO是从机输出引脚,MOSI是从机输入引脚。
1:
SPI配置为单线双向操作(引脚模式是双向的)。
在主模式下的操作:
MISO不被SPI使用。
当BIDIROE为0时,MOSI是主机的输入,或是当BIDIROE为1时,会被设置为输入输出。
在从模式下的操作:
当BIDIROE为0,MISO是从机的输入。
BIDIROE是1时,作为从机的输入输出。
MOSI不被SPI使用。
30.3.3SPI波特率寄存器(SPIx_BR)
使用该寄存器为SPI主机来设置预分频因子和比特率。
该寄存器可以在任何时间读出或写入。
地址:
4007_6000hbase+2hoffset=4007_6002h
数据位
D7
D6
D5
D4
D3
D2
D1
D0
读
0
SPPR[2:
0]
SPPR[3:
0]
写
—
复位
0
0
0
0
0
0
0
0
表30-4SPI0_BR字段说明
D7
Reserved
这个字段是保留的。
只读字段保留,值一直为0。
D6–D4(SPPR[2:
0])
SPI波特率预分频因子。
这3位字段,选择其中在8个因子中的一个因子来设置SPI波特率预分频器。
该预分频器的输入总线频率时钟(BUSCLK)。
该分频器的输出驱动是SPI波特率分频器的输入。
有关详细信息,请参阅“SPI波特率发生器”。
000波特率预分频因子为1。
001波特率预分频因子为2。
010波特率预分频因子为3。
011波特率预分频因子为4。
100波特率预分频因子为5。
101波特率预分频因子为6。
110波特率预分频因子为7。
111波特率预分频因子为8。
D3–D0(SPR[3:
0])
SPI波特率分频因子。
这4位字段,选择九个SPI波特率因子中的一个。
该因子的输入来自SPI波特率预分频器。
“SPI波特率发生器”的详细信息,请参阅的描述。
0000波特率除数是2。
0001波特率除数是4。
0010波特率除数是8。
0011波特率除数是16。
0100波特率除数是32。
0101波特率除数是64。
0110波特率除数为128。
0111波特率除数为256。
1000波特率除数为512。
其他的都保留。
29.3.4SPI状态寄存器(SPIx_S)
这个寄存器包含只读状态位。
对它写没有意义。
注意
从0位到第三位是没用的,一直是0。
地址:
4007_6000hbase+3hoffset=4007_6003h
数据位
D7
D6
D5
D4
D3
D2
D1
D0
读
SPRF
SPMF
SPTEF
MODF
0
写
—
复位
0
0
0
0
0
0
0
0
表30-5SPI0_S字段描述
D7(SPRF)
SPI接收缓冲区满标志。
SPRF在SPI传输完毕之后被设置,指示SPI的数据寄存器可以被读取。
SPRF通过读SPRF来清除,然后读取SPI数据寄存器。
0:
无数据在接收数据缓冲区。
1:
接收数据缓冲区中有数据。
D6(SPMF)
SPI硬件匹配标志。
当SPRF被置位后,如果接收数据缓冲区中的值跟M寄存器中的值匹配时,SPMF被设置。
如果要想清除该标志,读并写1。
0:
接收数据缓冲区的值不匹配M寄存器中的值。
1:
接收数据缓冲区的值匹配M寄存器中的值。
D5(SPTEF)
SPI发送缓冲区空标志。
该位被置位。
当发送DMA请求关闭时(TXDMAE为0),通过读S寄存器,SPTEF被清除,并且SPTEF被设置,然后写一个数据值到D。
SPTEF被设置为1时,在写数据到D寄存器之前,S寄存器必须被读。
否则,写入被忽略。
所有的数据从发送缓冲区传输到发送移位寄存器后,SPTEF被自动设置。
对于不忙的SPI,写入到数据寄存器中的数据几乎立刻被转移到移位器,因此,SPTEF在两个总线周期内被设置,从而允许在数据队列中的数据被二次设置。
在移位寄存器中的数据被发送完成之后,在发送寄存器等待的数据会自动移位到移位器,SPTEF被设置来提示在发送寄存器现有的空间可以提供给新数据。
如果没有新数据在发送缓冲区中等待,
SPTEF只是简单地保持设置,并不会把数据从缓冲器移动到移位寄存器。
如果传输没有停止,数据会持续不断的被发送。
0:
SPI发送缓冲区非空。
1:
SPI发送缓冲区空。
D4(MODF)
主模式故障标志。
如果SPI被配置为一个主机,MODF被置位,表明一些其他SPI设备也配置为主机。
仅当MSTR是1,MODFEN是1,和SSOE是0,
引脚作为一个模式故障输入,否则MODF将永远不会被置位。
通过读MODF,清除MODF。
如果它是1,接着把SPI控制寄存器写1。
0:
无模式故障错误。
1:
检测到模式故障错误。
D3–D0
该字段被保留。
这个只读字段是保留的,值为0。
30.3.5SPI数据寄存器(SPIx_D)
该寄存器是SPI数据的输入和输出数据寄存器。
对这个寄存器的一次写操作会把数据写到发送数据缓冲区,从而使数据能够排队并发送。
当SPI配置为主机,停留在传输数据寄存器排队等待的数据,在前一数据发送完成后,会立刻被发送。
当发送数据缓冲区已经准备好接收下一发送数据时,S寄存器的SPTEF位会指示出来。
在写入到SPI数据寄存器之前,要想设置S[SPTEF],S寄存器必须被读。
否则,该写操作被忽略。
在下一个数据被传输之前,SPRF被置位之后,SPI数据寄存器可以在任何时候被读取。
在新的接收没有完成之前是不能读取接收数据缓冲器的数据的,这会导致一个溢出情况,来自新接收的数据可能被丢失。
新数据丢失,是因为数据接收缓冲器仍然装有以前的数据,它还没有准备好接收新数据。
芯片中没有指示溢出的状态位,所以程序设计者在接收一个新数据之前必须读取前一数据。
地址:
4007_6000hbase+5hoffset=4007_6005h
数据位
7
6
5
4
3
2
1
0
读/写
数据位s[7:
0]
复位
0
0
0
0
0
0
0
0
表26-6SPI0_D字段说明
字段
说明
7–0数据位s[7:
0]
数据(低字节)
30.3.6SPI匹配寄存器(SPIx_M)
该寄存器包含硬件比较值。
当接收到的值在SPI接收数据缓冲器等于这个硬件比较值,SPI匹配标志(SPMF)被设置。
地址:
4007_6000hbase+7hoffset=4007_6007h
数据位
D7
D6
D5
D4
D3
D2
D1
D0
读/写
数据位s[7:
0]
复位
0
0
0
0
0
0
0
0
表26-7SPI0_M字段说明
字段
说明
7–0数据位s[7:
0]
硬件比较值(低字节)
30.4功能说明
本节描述了模块的功能。
30.4.1一般
通过设置SPI控制寄存器1中的SPI使能位,来启动SPI系统。
C1[SPE]位被置位,四个相关的SPI端口引脚用于SPI的功能为:
(1)从机选择(
)。
(2)串行时钟(SPSCK)。
(3)主出/从入(MOSI)。
(4)主如/从出(MISO)。
当S[SPTEF]=1时,通过读取SPI状态寄存器(SPIx_S),可以初始化SPI主设备的SPI传输,然后将数据写入发送数据缓冲区(写入到SPIxD)。
当传输完成时,接收到的数据被移动到接收数据缓冲区。
当发送数据时向SPIxD寄存器写数据即可,当接收数据时读取SPIxD寄存器即可。
在控制寄存器(SPIx_C1)中的时钟相位控制位(CPHA)和SPI的时钟极性控制位(CPOL)配合使用来选择要使用的四种可能的时钟格式。
CPOL位只需选择一个非反相或反向的时钟。
C1[CPHA]位通过在奇数编号或偶数编号的SPSCK信号边沿采样,来适应两个在根本上完全不同的协议。
SPI可以配置成为主设备或是从设备。
SPI控制寄存器1中的C1[MSTR]位被置1,选择主机模式;当MSTR位被清0,从机模式被选择。
30.4.2主模式
当C1[MSTR]位被置位后,SPI工作在主模式下。
只有主SPI模块才可以起始传输。
通过阅读SPIx_S寄存器传输开始,当S[SPTEF]=1时,向SPI数据数据寄存器写数据。
如果移位寄存器是空的,字节立即转移到移位寄存器。
在串行时钟的控制下,数据开始移出到MOSI。
(1)SPSCK
SPR3,SPR2,SPR1和SPR0波特率选择位配合SPI波特率寄存器中的SPPR2,SPPR1,SPPR0的波特率预选位,来控制波特率发生器和确定传输速度。
SPSCK引脚为SPI时钟输出。
通过SPSCK引脚,主机的波特率发生器控制外设的移位寄存器。
(2)MOSI,MISO引脚
在主模式下,该功能的串行数据输出引脚(MOSI)和串行数据输入引脚(MISO)由SPC0BIDIROE控制位确定。
(3)
引脚
如果C2[MODFEN]和C1[SSOE]位被置位,
引脚被配置为从机选择输出功能。
在传输时
输出变成低电平,SPI处于闲置状态时变成高电平。
如果C2[MODFEN]和C1[SSOE]被清除,
引脚配置为输入模式故障检测。
如果
输入变成低电平,此时又有一个主机尝试驱动MOSI和SPSCK时,就会指示错误。
在这种情况下,SPI立即切换到从机模式清除C1[MSTR]位,并禁止从机输出缓冲MISO(或是在双向模式的SISO)。
因此,所有输出将终止,SPSCK,MOSI和MISO成为输入。
如果传输过