admin管理员组

文章数量:1531663

2024年3月11日发(作者:)

目 录

Stellaris外设驱动库——1

SSI总体特性.................................................................................................................1

SSI通信协议.................................................................................................................1

1.2.1 Texas Instruments同步串行帧格式..................................................................1

1.2.2 Freescale SPI帧格式.........................................................................................2

1.2.3 MICROWIRE帧格式.......................................................................................6

1.3 SSI功能概述.................................................................................................................8

1.3.1 位速率和帧格式...............................................................................................8

1.3.2 FIFO操作..........................................................................................................8

1.3.3 SSI中断.............................................................................................................9

1.4 SSI库函数参考.............................................................................................................9

1.4.1 配置与控制.......................................................................................................9

1.4.2 数据收发.........................................................................................................11

1.4.3 中断控制.........................................................................................................12

1.1

1.2

i

Stellaris外设驱动库——SSI

1.1 SSI总体特性

Stellaris系列ARM的SSI(Synchronous Serial Interface,同步串行接口)是与具有Freescale

SPI(飞思卡尔半导体)、MicroWire(美国国家半导体)、Texas Instruments(德州仪器,TI)

同步串行接口的外设器件进行同步串行通信的主机或从机接口。SSI接口是Stellaris系列

ARM都支持的标准外设,也是流行的外部串行总线之一。SSI具有以下主要特性:

z 主机或从机操作

z 时钟位速率和预分频可编程

z 独立的发送和接收FIFO,16位宽,8个单元深

z 接口操作可编程,以实现Freescale SPI、MicroWire或TI的串行接口

z 数据帧大小可编程,范围4~16位

z 内部回环测试模式,可进行诊断/调试测试

1.2 SSI通信协议

对于Freescale SPI、MICROWIRE、Texas Instruments3种帧格式,当SSI空闲时串行时

钟(SSICLK)都保持不活动状态,只有当数据发送或接收时处于活动状态,SSICLK才在

设置好的频率下工作。利用SSICLK的空闲状态可提供接收超时指示。如果一个超时周期之

后接收FIFO仍含有数据,则产生超时指示。

对于Freescale SPI和MICROWIRE这两种帧格式,串行帧(SSIFss)管脚为低电平有

效,并在整个帧的传输过程中保持有效(被下拉)。

而对于Texas Instruments同步串行帧格式,在发送每帧之前,每遇到SSICLK的上升沿

开始的串行时钟周期时,SSIFss管脚就跳动一次。在这种帧格式中,SSI和片外从器件在

SSICLK的上升沿驱动各自的输出数据,并在下降沿锁存来自另一个器件的数据。

不同于其它两种全双工传输的帧格式,在半双工下工作的MICROWIRE格式使用特殊的主-

从消息技术。在该模式中,帧开始时向片外从机发送8位控制消息。在发送过程中,SSI没

有接收到输入的数据。在消息已发送之后,片外从机对消息进行译码,并在8位控制消息的

最后一位也已发送出去之后等待一个串行时钟,之后以请求的数据来响应。返回的数据在长

度上可以是4~16位,使得在任何地方整个帧长度为13~25位。

1.2.1 Texas Instruments同步串行帧格式

图1 TI同步串行帧格式(单次传输)

1

1显示了一次传输的Texas Instruments同步串行帧格式。

在该模式中,任何时候当SSI空闲时,SSICLK和SSIFss被强制为低电平,发送数据线

SSITx为三态。一旦发送FIFO的底部入口包含数据,SSIFss变为高电平并持续一个SSICLK

周期。即将发送的值也从发送FIFO传输到发送逻辑的串行移位寄存器中。在SSICLK的下

一个上升沿,4~16位数据帧的MSB从SSITx管脚移出。同样地,接收数据的MSB也通过

片外串行从器件移到SSIRx管脚上。

然后,SSI和片外串行从器件都提供时钟,供每个数据位在每个SSICLK的下降沿进入

各自的串行移位器中。在已锁存LSB之后的第一个SSICLK上升沿上,接收数据从串行移

位器传输到接收FIFO。

SSIClk

SSIFss

SSITx/SSIRx

4~16位

LSB

图2 TI同步串行帧格式(连续传输)

2显示了背对背(back-to-back)传输时的Texas Instruments同步串行帧格式。

1.2.2 Freescale SPI帧格式

Freescale SPI(Motorala SPI)接口是一个4线接口,其中SSIFss信号用作从机选择。

Freescale SPI格式的主要特性为:SSICLK信号的不活动状态和相位可以通过SSISCR0控制

寄存器中的SPO和SPH位来设置。

z SPO时钟极性位

当SPO时钟极性控制位为0时,在没有数据传输时SSICLK管脚上将产生稳定的低电

平。如果SPO位为1,则在没有进行数据传输时在SSICLK管脚上产生稳定的高电平。

z SPH相位控制位

SPH相位控制位选择捕获数据以及允许数据改变状态的时钟边沿。通过在第一个数据

捕获边沿之前允许或不允许时钟转换,从而在第一个被传输的位上产生极大的影响。当SPH

相位控制位为0时,在第一个时钟边沿转换时捕获数据。如果SPH位为1,则在第二个时

钟边沿转换时捕获数据。

1. SPO=0和SPH=0时的Freescale SPI帧格式

SPO=0和SPH=0时,Freescale SPI帧格式的单次和连续传输信号序列如

3和

4所

示。

2

图3 SPO=0和SPH=0时的Freescale SPI帧格式(单次传输)

SSIClk

SSIFss

SSIRx

LSBMSB

4~16位

SSITx

LSBMSBLSBMSB

LSBMSB

图4 SPO=0和SPH=0时的Freescale SPI帧格式(连续传输)

在上述配置中,SSI处于空闲周期时:

(1)SSICLK强制为低电平

(2)SSIFss强制为高电平

(3)发送数据线SSITx强制为低电平

(4)当SSI配置为主机时,使能SSICLK端口

(5)当SSI配置为从机时,禁止SSICLK端口

如果SSI使能并且在发送FIFO中含有有效的数据,则通过将SSIFss主机信号驱动为低

电平表示发送操作开始。这使得从机数据能够放在主机的SSIRx输入线上,主机SSITx输

出端口使能。在半个SSICLK周期之后,有效的主机数据传输到SSITx管脚。既然主机和从

机数据都已设置好,则在下面的半个SSICLK周期之后,SSICLK主机时钟管脚变为高电平。

在SSICLK的上升沿捕获数据,该操作延续到SSICLK信号的下降沿。

如果是传输一个字,则在数据字的所有位都已传输完之后,在捕获到最后一个位之后的

一个SSICLK周期后,SSIFss线返回到其空闲的高电平状态。

在连续的背对背传输中,数据字的每次传输之间SSIFss信号必须变为高电平。这是因

为如果SPH位为逻辑0,则从机选择管脚将其串行外设寄存器中的数据固定,不允许修改。

因此,主器件必须在每次数据传输之间将从器件的SSIFss管脚拉高,来使能串行外设的数

据写操作。当连续传输完成时,在捕获到最后一个位之后的一个SSICLK周期后,SSIFss

管脚返回到其空闲状态。

2.

SPO=0和SPH=1时的Freescale SPI帧格式

SPO=0和SPH=1时,Freescale SPI帧格式的传输信号序列如

5所示,该图涵盖了单

次和连续传输这两种情况。

3

SSIClk

SSIFss

SSIRxQ

MSB

4~16位

SSITx

MSBLSB

LSBQ

图5 SPO=0和SPH=1时的Freescale SPI帧格式

在该配置中,SSI处于空闲周期时:

(1)SSICLK强制为低电平

(2)SSIFss强制为高电平

(3)发送数据线SSITx强制为低电平

(4)当SSI配置为主机时,使能SSICLK端口

(5)当SSI配置为从机时,禁止SSICLK端口

如果SSI使能并且在发送FIFO中含有有效的数据,则通过将SSIFss主机信号驱动为低

电平表示发送操作开始。主机SSITx输出使能。在下面的半个SSICLK周期之后,主机和从

机有效数据能够放在各自的传输线上。同时,利用一个上升沿转换来使能SSICLK。然后,

在SSICLK的下降沿捕获数据,该操作一直延续到SSICLK信号的上升沿。

如果是传输一个字,则在所有位传输完之后,在捕获到最后一个位之后的一个SSICLK

周期,SSIFss线返回到其空闲的高电平状态。

如果是背对背(back-to-back)传输,则在两次连续的数据字传输之间SSIFss管脚保持

低电平,连续传输的结束情况与单个字传输相同。

3. SPO=1和SPH=0时的Freescale SPI帧格式

SPO=1和SPH=0时,Freescale SPI帧格式的单次和连续传输信号序列如

6和

7所

示。

SSIClk

SSIFss

SSIRxMSB

4~16位

SSITx

MSBLSB

LSBQ

图6 SPO=1和SPH=0时的Freescale SPI帧格式(单次传输)

4

SSIClk

SSIFss

SSITx/SSIRx

LSBMSB

4~16位

LSBMSB

图7 SPO=1和SPH=0时的Freescale SPI帧格式(连续传输)

在该配置中,SSI处于空闲周期时:

(1)SSICLK强制为高电平

(2)SSIFss强制为高电平

(3)发送数据线SSITx强制为低电平

(4)SSI配置为主机时,使能SSICLK引脚

(5)SSI配置为从机时,禁止SSICLK引脚

如果SSI使能并且在发送FIFO中含有有效的数据,则通过将SSIFss主机信号驱动为低

电平表示传输操作开始,这可使从机数据立即传输到主机的SSIRx线上。主机SSITx输出

引脚使能。半个周期之后,有效的主机数据传输到SSITx线上。既然主机和从机的有效数

据都已设置好,则在下面的半个SSICLK周期之后,SSICLK主机时钟管脚变为低电平。这

表示数据在下降沿被捕获并且该操作延续到SSICLK信号的上升沿。

如果是单个字传输,则在数据字的所有位传输完之后,在最后一个位传输完之后的一个

SSICLK周期,SSIFss线返回到其空闲的高电平状态。

而在连续的背对背(back-to-back)传输中,每次数据字传输之间SSIFss信号必须变为

高电平。这是因为如果SPH位为逻辑0,则从机选择管脚使其串行外设寄存器中的数据固

定,不允许修改。因此,每次数据传输之间,主器件必须将从器件的SSIFss管脚拉为高电

平来使能串行外设的数据写操作。在连续传输完成时,最后一个位被捕获之后的一个

SSICLK周期,SSIFss管脚返回其空闲状态。

4. SPO=1和SPH=1时的Freescale SPI帧格式

SPO=1和SPH=1时,Freescale SPI帧格式的传输信号序列如

8所示。该图涵盖了单

次和连续传输两种情况。

SSIClk

SSIFss

SSIRx

Q

MSB

4~

1

6位

SSITxMSBLSB

LSBQ

图8 SPO=1和SPH=1时的Freescale SPI帧格式

(注:图中的Q表示未定义)

5

在该配置中,SSI处于空闲周期时:

(1)SSICLK强制为高电平

(2)SSIFss强制为高电平

(3)发送数据线SSIFss强制为低电平

(4)当SSI配置为主机时,使能SSICLK引脚

(5)当SSI配置为从机时,禁止SSICLK引脚

如果SSI使能并且在发送FIFO中含有有效的数据,则通过将SSIFss主机信号驱动为低

电平表示发送操作开始。主机SSITx输出引脚使能。在下面的半个SSICLK周期之后,主机

和从机数据都能够放在各自的传输线上。同时,利用SSICLK的下降沿转换来使能SSICLK。

然后在上升沿捕获数据,并且该操作延续到SSICLK信号的下降沿。

在所有位传输完之后,如果是单个字传输,则在最后一个位捕获完之后的一个SSICLK周期

中,SSIFss线返回到其空闲的高电平状态。

而对于连续的背对背(back-to-back)传输,SSIF

SS

管脚保持其有效的低电平状态,直至最

后一个字的最后一位捕获完,再返回其上述的空闲状态。

而对于连续的背对背(back-to-back)传输,在两次连续的数据字传输之间SSIFss管脚保

持低电平,连续传输的结束情况与单个字传输相同。

1.2.3 MICROWIRE帧格式

9显示了单次传输的MICROWIRE帧格式,而

10为该格式的背对背(back-to-back)

传输情况。

SSIClk

SSIFss

SSITx

SSIRx

MSBLSB

8位控制

0

MSBLSB

4~16位

输出数据

图9 MICROWIRE帧格式(单次传输)

MICROWIRE格式与SPI格式非常类似,只是MICROWIRE为半双工而不是全双工,

使用主-从消息传递技术。每次串行传输都由SSI向片外从器件发送8位控制字开始。在此

传输过程中,SSI没有接收到输入的数据。在消息已发送完之后,片外从机对消息进行译码,

SSI在将8位控制消息的最后一位发送完之后等待一个串行时钟,之后以请求的数据来响应。

返回的数据在长度上为4~16位,使得任何地方总的帧长度为13~25位。

在该配置中,SSI处于空闲状态时:

(1)SSICLK强制为低电平

(2)SSIFss强制为高电平

(3)数据线SSITx强制为低电平。

通过向发送FIFO写入一个控制字节来触发一次传输。SSIFss的下降沿使得包含在发送

FIFO底部入口的值能够传输到发送逻辑的串行移位寄存器中,并且8位控制帧的MSB移出

6

到SSITx管脚上。在该控制帧传输期间SSIFss保持低电平,SSIRx管脚保持三态。

片外串行从器件在SSICLK的上升沿时将每个控制位锁存到其串行移位器中。在将最后

一位锁存之后,从器件在一个时钟的等待状态中对控制字节进行译码,并且从机通过将数据

发送回SSI来响应。数据的每个位在SSICLK的下降沿时驱动到SSIRx线上。SSI在SSICLK

的上升沿依次将每个位锁存。在帧传输结束时,对于单次传输,在最后一位已锁存到接收串

行移位器之后的一个时钟周期,SSIFss信号被拉为高电平。这使得数据传输到接收FIFO中。

注:在接收移位器已将LSB锁存之后的SSICLK的下降沿上或在SSIFss管脚变为高电平时,

片外从器件能够将接收线置为三态。

对于连续传输,数据传输的开始与结束与单次传输相同。但SSIFss线持续有效(保持

低电平)并且数据传输以背对背(back-to-back)方式产生。在接收到当前帧的接收数据的LSB

之后,立即跟随下一帧的控制字节。在当前帧的LSB已锁存到SSI之后,接收数据的每个

位在SSICLK的下降沿从接收移位器中进行传输。

SSIClk

SSIFss

SSITx

LSBMSBLSB

8

位控制

SSIRx

0

MSBLSBMSB

4~16位

输出数据

图10 MICROWIRE帧格式(连续传输)

在MICROWIRE模式中,SSIFss变为低电平之后的SSICLK上升沿上,SSI从机对接收

数据的第一个位进行采样。驱动自由运行SSICLK的主机必须确保SSIFss信号相对于

SSICLK的上升沿具有足够的建立时间和保持时间裕量(setup and hold margins)。

11阐明了建立和保持时间要求。相对于SSICLK的上升沿(在该上升沿上,SSI从

机将对接收数据的第一个位进行采样),SSIFss的建立时间至少必须是SSI进行操作的

SSICLK周期的两倍。相对于该边沿之前的SSICLK上升沿,SSIFss至少必须具有一个

SSICLK周期的保持时间。

t

Setup

=(2*t

SSIClk

)

t

Hold

=t

SSIClk

SSIClk

SSIFss

SSIRx

第一个RX数据将被

SSI从机采样

图11 MICROWIRE帧格式,SSIFss输入建立和保持时间要求

7

1.3 SSI功能概述

SSI对从外设器件接收到的数据执行串行到并行转换。CPU可以访问SSI数据寄存器来

发送和获得数据。发送和接收路径利用内部FIFO存储单元进行缓冲,以允许最多8个16

位的值在发送和接收模式中独立地存储。

1.3.1 位速率和帧格式

SSI包含一个可编程的位速率时钟分频器和预分频器来生成串行输出时钟。尽管最大位

速率由外设器件决定,但1.5MHz及更高的位速率仍是支持的。

串行位速率是通过对输入的系统时钟进行分频来获得。虽然理论上SSICLK发送时钟可

达到25MHz,但模块可能不能在该速率下工作。发送操作时,系统时钟速率至少必须时

SSICLK的两倍。接收操作时,系统时钟速率指导必须时SSICLK的12倍。

SSI通信的帧格式有3种:Texas Instruments同步串行数据帧、Freescal SPI数据帧、

MICROWIRE串行数据帧。

根据已设置的数据大小,每个数据帧长度在4~16位之间,并采用MSB在前的方式发

送。

1.3.2 FIFO操作

对FIFO的访问是通过SSI数据寄存器(SSIDR)中写入与读出数据来实现的,SSIDR

为16为宽的数据寄存器,可以对它进行读写操作,SSIDR实际对应两个不同的物理地址,

以分别完成对发送FIFO和接收FIFO的操作。

SSIDR的读操作即是对接收FIFO的入口(由当前FIFO读指针来指向)进行访问。当

SSI接收逻辑将数据从输入的数据帧中转移出来后,将它们放入接收FIFO的入口(由当前

FIFO写指针来指向)。

SSIDR的写操作即是将数据写入发送FIFO的入口(由写指针来指向)。每次,发送逻

辑将发送FIFO中的数值转移出来一个,装入发送串行移位器,然后在设置的位速率下串行

溢出到SSITx管脚。

当所选的数据长度小于16位时,用户必须正确调整写入发送FIFO的数据,发送逻辑

忽略高位未使用的位。小于16位的结合搜数据在记诶手传冲去中自动调整。

当SSI设置为MICROWIRE帧格式时,发送数据的默认大小为8为(最高有效字节忽

略),接收数据的大小由程序员控制。即使当SSICR1寄存器的SSE位设置为0时(禁止SSI

端口),也可以不将发送FIFO和接收FIFO清零。这样可在使能SSI之前使用软件来填充发

送FIFO。

z 发送FIFO

通用发送FIFO是16位宽、8单元深、先进先出的存储缓冲区。CPU通过写SSI数据

寄存器SSIDR来将数据写入发送FIFO,数据在由发送逻辑读出之前一直保存在发送FIFO

中。

当SSI配置为主机或从机时,并行数据先写入发送FIFO,再转换成串行数据并通过

SSITx管脚分别发送到相关的从机或主机。

z 接收FIFO

8

通用接收FIFO是一个16位宽、8单元深、先进先出的存储缓冲区。从串行接口接收到

的数据在由CPU读出之前一直保存在缓冲区中,CPU通过读SSIDR寄存器来访问读FIFO。

当SSI配置位主机或从机时,通过SSIRx管脚接收到的串行数据转换成并行数据后装

载到相关的从机或主机接收FIFO。

1.3.3 SSI中断

SSI在满足以下条件时能够产生中断:

z 发送FIFO服务

z 接收FIFO服务

z 接收FIFO超时

z 接收FIFO溢出

所有中断事件在发送到嵌套中断向量控制器之前先要执行“或”操作,因此,在任何给

定的时刻SSI只能向中断控制器产生一个中断请求。通过对SSI中断屏蔽寄存器(SSIIM)

中的对应位进行设置,你可以屏蔽4个单独屏蔽的中断里的任一个,将适当的屏蔽位置1

可使能中断。

SSI提供单独的输出和组合的中断输出,这样可允许全局中断服务程序或组合的逻辑驱

动程序来处理中断。发送或接收动态数据流的中断已与状态中断分开,这样,根据FIFO出

发点(trigger level)可以对数据执行读和写操作。各个中断源的状态可从SSI原始中断状态

(SSIRIS)和SSI屏蔽后的中断状态寄存器(SSIMIS)中读出。

1.4 SSI库函数参考

1.4.1 配置与控制

1. SSIConfigSetExpClk( )

表1 函数SSIConfigSetExpClk( )

功能 SSI配置(需要提供明确的时钟速度)

void SSIConfigSetExpClk(unsigned long ulBase ,

unsigned long ulSSIClk ,

原型

unsigned long ulProtocol ,

unsigned long ulMode ,

unsigned long ulBitRate ,

unsigned long ulDataWidth)

ulBase:SSI模块的基址,应当取下列值之一:

SSI_BASE // SSI模块的基址(用于仅含有1个SSI模块的芯片)

SSI0_BASE // SSI0模块的基址(等同于SSI_BASE)

SSI1_BASE // SSI1模块的基址

参数

ulSSIClk:提供给SSI模块的时钟速度

ulProtocol:数据传输的协议,应当取下列值之一:

SSI_FRF_MOTO_MODE_0 // Freescale(飞思卡尔半导体)格式,极性0,相位0

SSI_FRF_MOTO_MODE_1 // Freescale(飞思卡尔半导体)格式,极性0,相位1

SSI_FRF_MOTO_MODE_2 // Freescale(飞思卡尔半导体)格式,极性1,相位0

SSI_FRF_MOTO_MODE_3 // Freescale(飞思卡尔半导体)格式,极性1,相位1

9

SSI_FRF_TI // TI(德州仪器)格式

SSI_FRF_NMW // National(美国国家半导体)MicroWire格式

ulMode:SSI模块的工作模式,应当取下列值之一:

SSI_MODE_MASTER // SSI主模式

SSI_MODE_SLAVE // SSI从模式

SSI_MODE_SLAVE_OD // SSI从模式(输出禁止)

ulBitRate:SSI的位速率,这个位速率必须满足下面的时钟比率标准:

ulBitRate ≤ FSSI/2(主模式)

ulBitRate ≤ FSSI/12(从模式)

其中FSSI是提供给SSI模块的时钟速率

ulDataWidth:数据宽度,取值4~16

返回 无

2. SSIConfig( )

这是个宏函数,为了实际编程的方便,常常用来代替函数SSIConfigSetExpClk( )。

表2 宏函数SSIConfig( )

功能

原型

参数

返回

SSI配置

#define SSIConfig(a , b , c , d , e) SSIConfigSetExpClk(a , SysCtlClockGet( ) , b , c , d , e)

详见函数SSIConfigSetExpClk( )的描述

3. SSIEnable( )

表3 函数SSIEnable( )

功能

原型

参数

返回

使能SSI发送和接收

void SSIEnable(unsigned long ulBase)

ulBase:SSI模块的基址,取值SSI_BASE、SSI0_BASE或SSI1_BASE

4. SSIDisable( )

表4 函数SSIDisable( )

功能

原型

参数

返回

禁止SSI发送和接收

void SSIDisable(unsigned long ulBase)

ulBase:SSI模块的基址,取值SSI_BASE、SSI0_BASE或SSI1_BASE

10

1.4.2 数据收发

1. SSIDataPutNonBlocking( )

表5 函数SSIDataPutNonBlocking( )

功能

原型

参数

返回

将一个数据单元放入SSI的发送FIFO里(不等待)

long SSIDataPutNonBlocking(unsigned long ulBase , unsigned long ulData)

ulBase:SSI模块的基址,取值SSI_BASE、SSI0_BASE或SSI1_BASE

ulData:要发送的数据单元(4~16个有效位)

返回写入发送FIFO的数据单元数量(如果发送FIFO里没有可用的空间则返回0)

2. SSIDataGetNonBlocking( )

表6 函数SSIDataGetNonBlocking( )

功能

原型

参数

返回

从SSI的接收FIFO里读取一个数据单元(不等待)

long SSIDataGetNonBlocking(unsigned long ulBase , unsigned long *pulData)

ulBase:SSI模块的基址,取值SSI_BASE、SSI0_BASE或SSI1_BASE

pulData:指针,指向保存读取到的数据单元地址

返回从接收FIFO里读取到的数据单元数量(如果接收FIFO为空,则返回0)

3. SSIDataNonBlockingPut( )

表7 宏函数SSIDataNonBlockingPut( )

功能

原型

参数

返回

将一个数据单元放入SSI的发送FIFO里(不等待)

#define SSIDataNonBlockingPut(a , b) SSIDataPutNonBlocking(a , b)

参见函数SSIDataPutNonBlocking( )的描述

参见函数SSIDataPutNonBlocking( )的描述

4. SSIDataNonBlockingGet( )

表8 宏函数SSIDataNonBlockingGet( )

功能

原型

参数

返回

从SSI的接收FIFO里读取一个数据单元(不等待)

#define SSIDataNonBlockingGet(a , b) SSIDataGetNonBlocking(a , b)

参见函数SSIDataGetNonBlocking( )的描述

参见函数SSIDataGetNonBlocking( )的描述

5. SSIDataPut( )

表9 函数SSIDataPut( )

功能 将一个数据单元放入SSI的发送FIFO里

11

原型

参数

返回

void SSIDataPut(unsigned long ulBase , unsigned long ulData)

ulBase:SSI模块的基址,取值SSI_BASE、SSI0_BASE或SSI1_BASE

ucData:要发送数据单元(4~16个有效位)

6. SSIDataGet( )

表10 函数SSIDataGet( )

功能

原型

参数

返回

从SSI的接收FIFO里读取一个数据单元

void SSIDataGet(unsigned long ulBase , unsigned long *pulData)

ulBase:SSI模块的基址,取值SSI_BASE、SSI0_BASE或SSI1_BASE

pulData:指针,指向保存读取到的数据单元地址

1.4.3 中断控制

1. SSIIntEnable( )

表11 函数SSIIntEnable( )

功能

原型

使能单独的(一个或多个)SSI中断源

void SSIIntEnable(unsigned long ulBase , unsigned long ulIntFlags)

ulBase:SSI模块的基址,取值SSI_BASE、SSI0_BASE或SSI1_BASE

ulIntFlags:指定的中断源,应当取下列值之一或者它们之间的任意“或运算”组合形式:

参数

SSI_TXFF // 发送FIFO半空或不足半空

SSI_RXFF // 接收FIFO半满或超过半满

SSI_RXTO // 接收超时(接收FIFO已有数据但未半满,而后续数据长时间不来)

SSI_RXOR // 接收FIFO溢出

返回 无

2. SSIIntDisable( )

表12 函数SSIIntDisable( )

功能

原型

参数

返回

禁止单独的(一个或多个)SSI中断源

void SSIIntDisable(unsigned long ulBase , unsigned long ulIntFlags)

参见函数SSIIntEnable( )的描述

3. SSIIntStatus( )

表13 函数SSIIntStatus( )

功能 获取SSI当前的中断状态

12

原型

unsigned long SSIIntStatus(unsigned long ulBase , tBoolean bMasked)

ulBase:SSI模块的基址,取值SSI_BASE、SSI0_BASE或SSI1_BASE

参数 bMasked:如果需要获取原始的中断状态,则取值false

如果需要获取屏蔽的中断状态,则取值true

当前中断的状态,参见函数SSIIntEnable( )里参数ulIntFlags的描述 返回

4. SSIIntClear( )

表14 函数SSIIntClear( )

功能

原型

参数

返回

清除SSI的中断

void SSIIntClear(unsigned long ulBase , unsigned long ulIntFlags)

参见函数SSIIntEnable( )的描述

5. SSIIntRegister( )

表15 函数SSIIntRegister( )

功能

原型

参数

返回

注册一个SSI中断服务函数

void SSIIntRegister(unsigned long ulBase , void (*pfnHandler)(void))

ulBase:SSI模块的基址,取值SSI_BASE、SSI0_BASE或SSI1_BASE

pfnHandler:指针,指向SSI中断出现时被调用的函数

6. SSIIntUnregister( )

表16 函数SSIIntUnregister( )

功能

原型

参数

返回

注销SSI的中断服务函数

void SSIIntUnregister(unsigned long ulBase)

ulBase:SSI模块的基址,取值SSI_BASE、SSI0_BASE或SSI1_BASE

13

本文标签: 数据发送中断接收传输