系统下载网站源码,岑巩网站建设,哈尔滨网络公司定制开发,海洋公园网站建设方案SPI概述#xff1a;
SPI协议最初由Motorola公司#xff08;现为NXP Semiconductors的一部分#xff09;在20世纪80年代中期开发。最初是为了在其68000系列微控制器中实现高速、高效的串行通信。该协议旨在简化微控制器与外围设备之间的数据传输。 1980年代#xff1a;SPI协…SPI概述
SPI协议最初由Motorola公司现为NXP Semiconductors的一部分在20世纪80年代中期开发。最初是为了在其68000系列微控制器中实现高速、高效的串行通信。该协议旨在简化微控制器与外围设备之间的数据传输。 1980年代SPI协议迅速被其他半导体制造商采纳并逐渐成为嵌入式系统中的事实标准。尽管SPI从未被任何正式的标准组织或行业标准小组正式标准化但它在实际应用中被广泛接受。 1990年代初SPI协议被JEDEC电子设备工程联合委员会标准化这进一步推动了其在电子行业中的广泛应用。
SPISerial Peripheral Interface串行外围设备接口是一种高速的、全双工、同步的通信总线用于短距离通信主要应用在嵌入式系统中。 高速SPI的通信速率可以达到数兆比特每秒Mbps具体速率取决于硬件设计和应用场景。 全双工SPI支持同时发送和接收数据这意味着主设备和从设备可以在同一时间进行数据交换。 同步串行通信SPI使用时钟信号来同步数据的传输。数据在时钟信号的控制下逐位传输确保数据的准确性和同步性。
SPI信号线
SPI协议通常使用四根线SCLK、MOSI、MISO、SS。 SCLK时钟线由主设备提供时钟信号用于同步数据传输。 MOSI主设备数据输出从设备数据输入主设备向从设备发送数据。 MISO主设备数据输入从设备数据输出从设备向主设备发送数据。 CS/SS片选线用于选择特定的从设备。一个主设备可以通过多条CS线连接多个从设备。 SCLKSerial Clock MOSIMaster Out Slave In MISOMaster In Slave Out CS/SSChip Select / Slave Select SPI协议也可以根据需要简化为三根线。 半双工模式合并MOSI/MISO为单一数据线SDIO通过方向控制切换传输方向。
SPI时序
SPI协议定义了四种工作模式Mode 0、Mode 1、Mode 2、Mode 3这些模式主要区别在于时钟信号的极性CPOL/POL和相位CPHA/PHA。 (POL1, PHA1)时钟空闲状态为高电平数据在第一个时钟下降沿之后采样。 (POL1, PHA0)时钟空闲状态为高电平数据在第一个时钟上升沿之后采样。 (POL0, PHA1)时钟空闲状态为低电平数据在第一个时钟上升沿之后采样。 (POL0, PHA0)时钟空闲状态为低电平数据在第一个时钟下降沿之后采样。 i.MX6ull SPI介绍 i.MX6ull开发板提供了一种增强型可配置的SPI--Enhanced Configurable SPI (ECSPI) The Enhanced Configurable Serial Peripheral Interface (ECSPI) is a full-duplex, synchronous, four-wire serial communication block. The ECSPI contains a 64 x 32 receive buffer (RXFIFO) and a 64 x 32 transmit buffer (TXFIFO). With data FIFOs, the ECSPI allows rapid data communication with fewer software interrupts. The figure below shows a block diagram of the ECSPI. 增强型可配置串行外设接口Enhanced Configurable Serial Peripheral Interface简称ECSPI是一个全双工、同步、四线串行通信模块。 ECSPI包含一个64x32的接收缓冲器RXFIFO和一个64x32的发送缓冲器TXFIFO。通过数据FIFOECSPI允许快速数据通信减少软件中断。 ECSPI结构框图 ECSPI 关键特性 • Full-duplex synchronous serial interface 全双工同步串行接口 • Master/Slave configurable 主/从可配置 • Four Chip Select (SS) signals to support multiple peripherals 四个片选SS信号以支持多个外设 • Transfer continuation function allows unlimited length data transfers 传输继续功能允许不限长度的数据传输 • 32-bit wide by 64-entry FIFO for both transmit and receive data 32位宽、64项的发送和接收数据FIFO先进先出缓冲区 • Polarity and phase of the Chip Select (SS) and SPI Clock (SCLK) are configurable 片选SS和SPI时钟SCLK的极性和相位可配置 • Direct Memory Access (DMA) support 直接内存访问DMA支持 • Max operation frequency up to the reference clock frequency. 最高操作频率可达参考时钟频率 ECSPI 时钟 ECSPI 模式
ECSPI支持三种模式Master Mode 主机模式Slave Mode 从机模式Low Power Modes 低功耗模式
本文只介绍i.MX6ull开发板ECSPI的Master Mode 主机模式Slave Mode 从机模式和Low Power Modes 低功耗模式可参考i.MX6ull开发板的数据手册
Master Mode 主机模式 When the ECSPI is configured as a master, it uses a serial link to transfer data between the ECSPI and an external slave device. 当ECSPI增强型可配置串行外设接口被配置为主设备时它使用串行链路在ECSPI和外部从设备之间传输数据。 One of the Chip Select (SS) signals and the clock signal (SCLK) are used to transfer data between two devices. If the external device is a transmit-only device, the ECSPI masters output port can be ignored and used for other purposes. In order to use the internal TXFIFO and RXFIFO, two auxiliary output signals, Chip Select (SS) and SPI_RDY, are used for data transfer rate control. Software can also configure the sample period control register to a fixed data transfer rate. 片选SS信号之一和时钟信号SCLK被用来在两个设备之间传输数据。如果外部设备仅为发送设备可以忽略ECSPI主设备的输出端口并将其用于其他目的。为了使用内部的发送FIFOTXFIFO和接收FIFORXFIFO两个辅助输出信号片选SS和SPI_RDY被用于数据传输速率控制。软件也可以配置采样周期控制寄存器以设定一个固定的数据传输速率。 When the ECSPI is in Master mode the SS, SCLK, and MOSI are output signals, and the MISO signal is an input 当ECSPI处于主模式时SS、SCLK和MOSI是输出信号而MISO是输入信号。 The Chip Select (SS) signal enables the selected external SPI device, and the SCLK synchronizes the data transfer. 片选SS信号用于启用选定的外部SPI设备而SCLK时钟信号则同步数据传输。 Master Mode with SPI_RDY SPI_RDY信号是一个辅助控制信号它在SPI通信中用于流量控制和数据传输同步。在某些情况下SPI_RDY信号可以指示从机是否准备好接收数据或者帮助主设备控制数据的发送节奏避免从设备因过载而无法处理过多的数据。在数据传输速率较高的应用中RDY允许主设备控制数据的发送节奏。如果多个设备连接到同一个SPI总线上RDY信号可以帮助主设备分批次向各设备发送数据提高了系统效率。 在ECSPI增强型可配置串行外设接口中DRCTL位用于设置SPI_RDY信号为0的话不关心SPI_RDY信号为1的话SPI_RDY信号为边沿触发为2的话SPI_DRY是电平触发。如果SPI Data Ready Control (ECSPI_CONREG[DRCTL])位包含01或10SPI_RDY信号控制SPI突发的开始。如果ECSPI_CONREG[DRCTL]被设置为01则只有在检测到SPI_RDY信号的下降沿时SPI突发才能被触发。如果SPI Data Ready Control (ECSPI_CONREG[DRCTL])被设置为10则只有在SPI_RDY信号为低时SPI突发才能被触发。 SPI突发传输 一种在SPI通信协议下进行数据传输的方式它允许在单个传输事务中连续传输多个数据字从而提高数据传输效率。在这种模式下主设备首先发送一个选择信号然后可以连续发送多个数据字节而从设备则可以在不发送响应信号的情况下接收这些数据字节。在传输完成后主设备发送一个停止信号以结束通信。 Master Mode with SS_CTL[3:0] Control SS_CTL[3:0]决定了当前操作是单次突发还是多次突发。当SPI片选波形选择SS_CTL[3:0]被设置时当前操作是多次突发传输。当SPI片选波形选择SS_CTL[3:0]位被清除时当前操作是单次突发传输。一个SPI突发可以包含多个字如ECSPI_CONREG寄存器中BURST LENGTH字段所定义。 Master Mode with Phase Control The Phase Control (ECSPI_CONREG[PHA]) bit controls how the transmit data shifts out and the receive data shifts in. 相位控制ECSPI_CONREG[PHA]位决定了传输数据的移出方式和接收数据的移入方式。 When the Phase control (ECSPI_CONREG[PHA]) bit is set, the transmit data will shift out on the rising edge of SCLK, and the receive data is latched on the falling edge of SCLK. The most-significant bit is output on the first rising SCLK edge. When ECSPI_CONREG[PHA] is cleared, the transmit data is shifted out on the falling edge of SCLK and the receive data is latched on the rising edge of SCLK. The MSB is output when the host processor loads the transmitted data. 当相位控制ECSPI_CONREG[PHA]位被设置时传输数据将在SCLK时钟的上升沿移出接收数据在SCLK的下降沿被锁存。最高有效位MSB在第一个SCLK上升沿被输出。 当ECSPI_CONREG[PHA]被清除时传输数据在SCLK的下降沿移出接收数据在SCLK的上升沿被锁存。MSB在主处理器加载要传输的数据时输出。 Inverting the SCLK polarity does not impact the edge-triggered operations because they are internal to the serial peripheral interface master. 反转SCLK极性不会影响边沿触发操作因为这些操作是串行外设接口主设备内部的。 ECSPI Reset Whenever a device reset occurs, a reset is performed on the ECSPI, resetting all registers to their default values. Software can reset the block using the CONREG[EN] bit; 每当发生设备复位时ECSPI增强型可配置串行外设接口也会执行复位操作将其所有寄存器重置为默认值。 软件可以通过设置CONREG寄存器中的[EN]位来复位ECSPI模块。 ECSPI Initialization This section provides initialization information for ECSPI. To initialize the block: 1. Clear the EN bit in ECSPI_CONREG to reset the block. 复位模块清除ECSPI_CONREGECSPI控制寄存器中的EN位以复位该模块 2. Enable the clocks for ECSPI within the CCM. 使能时钟在CCM时钟控制模块内为ECSPI使能时钟。 3. Configure the Control Register and then set the EN bit in the ECSPI_CONREG to put ECSPI out of reset. 配置控制寄存器并退出复位配置控制寄存器然后在ECSPI_CONREG中设置EN位使ECSPI退出复位状态。 4. Configure corresponding IOMUX for ECSPI external signals. 配置IOMUX为ECSPI的外部信号配置相应的IOMUX输入/输出多路复用器。 5. Configure registers of ECSPI properly according to the specifications of the external SPI device. 正确配置ECSPI寄存器根据外部SPI设备的技术规格正确配置ECSPI的寄存器。 ECSPI重点寄存器
Receive Data Register (ECSPIx_RXDATA) The Receive Data register (ECSPI_RXDATA) is a read-only register that forms the top word of the 64 x 32 receive FIFO. This register holds the data received from an external SPI device during a data transaction. Only word-sized read operations are allowed. 接收数据寄存器ECSPI_RXDATA是一个只读寄存器它构成了64x32接收FIFO先进先出缓冲区的顶部字。该寄存器保存了在数据事务期间从外部SPI设备接收到的数据。只允许进行字大小的读取操作。 Transmit Data Register (ECSPIx_TXDATA) The Transmit Data (ECSPI_TXDATA) register is a write-only data register that forms the bottom word of the 64 x 32 TXFIFO. The TXFIFO can be written to as long as it is not full, even when the SPI Exchange bit (XCH) in ECSPI_CONREG is set. This allows software to write to the TXFIFO during a SPI data exchange process. Writes to this register are ignored when the ECSPI is disabled (ECSPI_CONREG[EN] bit is cleared). 发送数据ECSPI_TXDATA寄存器是一个只写的数据寄存器它构成了64x32发送FIFO先进先出缓冲区的底部字。只要发送FIFO未满就可以对其进行写入操作即使在ECSPI_CONREG中的SPI数据交换位XCH被设置的情况下也是如此。这允许软件在SPI数据交换过程中向发送FIFO写入数据。当ECSPI被禁用ECSPI_CONREG[EN]位被清除时对该寄存器的写入操作将被忽略。 Config Register (ECSPIx_CONFIGREG) The Config Register (ECSPI_CONFIGREG) allows software to configure each SPI channel, configure its operating modes, specify the phase and polarity of the clock, configure the Chip Select (SS), and define the HT transfer length. Note, HT mode is not supported by this product. 配置寄存器ECSPI_CONFIGREG允许软件配置每个SPI通道设置其工作模式指定时钟的相位和极性配置芯片选择SS以及定义HT高吞吐量传输长度。请注意本产品不支持HT模式。 SCLK_CTL23-20位控制每个SPI通道的SCLK时钟非活动状态 0表示保持低电平。1表示保持高电平。 DATA_CTL19-16位控制每个SPI通道数据线的非活动状态 0表示保持高电平。1表示保持低电平。 SS_POL15-12位SPI SS片选极性选择 在主模式和从模式下此字段选择Chip Select (SS)信号的极性。 0表示保持低电平。1表示保持高电平。 SS_CTL11-8位SPI SS波形选择 在主模式下当SMC开始模式控制位被清除时此字段控制Chip Select (SS)信号的输出波形。如果设置了SMC位则忽略SS_CTL。 在从模式下此位控制SPI突发完成的时机。 0表示主模式下只传输一个SPI突发。1表示主模式下在SPI突发之间否定Chip Select (SS)信号传输多个SPI突发。 SCLK_POL7-4位SPI时钟极性控制 0表示活动高极性0空闲。1表示活动低极性1空闲。 SCLK_PHA7-4位SPI时钟/数据相位控制 0表示相位0操作。1表示相位1操作。 Control Register (ECSPIx_CONREG) The Control Register (ECSPI_CONREG) allows software to enable the ECSPI , configure its operating modes, specify the divider value, and SPI_RDY control signal, and define the transfer length. 控制寄存器ECSPI_CONREG允许软件启用ECSPI增强型串行外设接口配置其工作模式指定分频值和SPI_RDY控制信号并定义传输长度。 BURST_LENGTH31-20位定义了要传输的SPI突发的长度 在主模式下它控制每个SPI突发的位数。由于移位寄存器总是从传输FIFO加载32位数据因此只有n个最低有效位n BURST_LENGTH 1将被移出其余位将被忽略。最大可以传输2^12位。 CHANNEL_SELECT19-18位SPI通道选择位 在主模式下通过断言Chip Select (SSn) 输出来选择外部从设备。一次只能激活选定的Chip Select (SSn) 信号其余三个信号将被否定。 DRCTL17-16位SPI数据就绪控制 此字段选择在主模式下使用SPI_RDY信号。ECSPI在开始SPI突发之前会检查此字段。 10突发将由SPI_RDY信号的低电平触发电平触发。01突发将由SPI_RDY信号的下降沿触发边沿触发。00SPI_RDY信号不关心。 PRE_DIVIDER15-12位SPI预分频器 ECSPI使用两级分频器生成SPI时钟。 POST_DIVIDER11-8位SPI后分频器 ECSPI使用两级分频器生成SPI时钟。 CHANNEL_MODE7-4位用于为每个SPI通道选择模式 CHANNEL_MODE[3]对应SPI通道3。CHANNEL_MODE[2]对应SPI通道2。CHANNEL_MODE[1]对应SPI通道1。CHANNEL_MODE[0]对应SPI通道0。0从模式Slave mode。1主模式Master mode。 SMC开始模式控制位 仅适用于配置为主模式的通道CHANNEL_MODE1。控制ECSPI如何启动SPI突发可以通过SPI交换位或立即在TXFIFO写入时启动。 0SPI交换位XCH控制何时可以启动SPI突发。设置XCH位将启动一个或多个SPI突发由SPI SS波形选择SS_CTL控制。1当数据写入TXFIFO时立即启动SPI突发。 XCHSPI交换位 仅适用于配置为主模式的通道CHANNEL_MODE1。如果开始模式控制SMC位被清除向此位写入1将根据SPI SS波形选择SS_CTL启动一个或多个SPI突发。XCH位在数据交换进行中或ECSPI等待活动输入如果通过DRCTL启用了SPIRDY时保持设置。当TXFIFO和移位寄存器中的所有数据都被移出后此位会自动清除。 0空闲。 1启动交换写入或忙读取。 EN0位SPI使能控制位 此位启用ECSPI。在写入其他寄存器或启动交换之前必须设置此位。向此位写入零将禁用块并重置内部逻辑ECSPI_CONREG除外。模块被禁用时其内部时钟将被关闭。 0禁用。1启用。 Status Register (ECSPIx_STATREG) The ECSPI Status Register (ECSPI_STATREG) reflects the status of the ECSPIs operating condition. If the ECSPI is disabled, this register reads 0x0000_0003. ECSPI状态寄存器ECSPI_STATREG反映了ECSPI增强型可配置串行外设接口的运行状态。 如果ECSPI被禁用该寄存器的读数为0x0000_0003。 TC传输完成状态位 写入1可以清除。 0传输正在进行中。1传输已完成。 RORXFIFO溢出位 当该位被设置时表示RXFIFO已溢出。写入1可以清除。 0RXFIFO没有溢出。1RXFIFO已溢出。 RFRXFIFO满位 当RXFIFO满时该位被设置。 0未满。1已满。 RDRRXFIFO数据请求位 1.当RXTDE被清除时 0RXFIFO中的数据条目数不大于RX_THRESHOLD。1RXFIFO中的数据条目数大于RX_THRESHOLD。 2.当RXTDE被设置时 0RXFIFO中的数据条目数不大于RX_THRESHOLD。1RXFIFO中的数据条目数大于RX_THRESHOLD或存在DMA TAIL DMA条件。 RRRXFIFO就绪位 当RXFIFO中存储了一个或多个字时该位被设置。 0RXFIFO中没有有效数据。1RXFIFO中有多个字。 TFTXFIFO满位 当TXFIFO满时该位被设置。 TDRTXFIFO数据请求位。 1TXFIFO中的有效数据槽数不大于TX_THRESHOLD。0TXFIFO中的有效数据槽数大于TX_THRESHOLD。 TETXFIFO空位 如果TXFIFO为空该位被设置。 1TXFIFO为空。0TXFIFO包含一个或多个字。 Test Control Register (ECSPIx_TESTREG) The Test Control Register (ECSPI_TESTREG) provides software a mechanism to internally connect the receive and transmit devices of the ECSPI, and monitor the contents of the receive and transmit FIFOs. 测试控制寄存器ECSPI_TESTREG为软件提供了一种机制可以内部连接ECSPI的接收和发送设备并监控接收和发送FIFO的内容。这使得开发者能够在调试过程中检查数据流确保数据正确地在发送和接收设备之间传输同时也可以用来测试ECSPI接口的功能是否正常工作。 LBC31位回环控制位。 此位仅在主模式下使用。当设置此位时ECSPI内部连接发送器和接收器部分移位寄存器中最高位的数据被回环到移位寄存器的最低位。这样可以对完整的发送/接收路径进行自检。输出引脚不受影响输入引脚被忽略。 0未连接。1发送器和接收器部分内部连接以进行回环。 RXCNT14-8位RXFIFO计数器。指示RXFIFO中的字数。 TXCNT6-0位TXFIFO计数器。指示TXFIFO中的字数。 示例代码
下面代码只是对i.MX6ull开发板中ECSPI模块的基础应用
#include spi.h//管脚初始化
void spi_gpio_init()
{/*IOMUXC_SW_MUX_CTL_PAD_UART2_TX_DATAGPIO1_IO20 ECSPI3_SS01000 ALT8 — Select mux mode: ALT8 mux port: ECSPI3_SS0 of instance: ecspi3*/IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO20 ~(0xf0);IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO20 | (0x80);/*IOMUXC_SW_MUX_CTL_PAD_UART2_RX_DATAGPIO1_IO21 ECSPI3_SCLK1000 ALT8 — Select mux mode: ALT8 mux port: ECSPI3_SCLK of instance: ecspi3*/IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO21 ~(0xf0);IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO21 | (0x80);/*IOMUXC_SW_MUX_CTL_PAD_UART2_CTS_BGPIO1_IO22 ECSPI3_MOSI1000 ALT8 — Select mux mode: ALT8 mux port: ECSPI3_MOSI of instance: ecspi3*/IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO22 ~(0xf0);IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO22 | (0x80);/*IOMUXC_SW_MUX_CTL_PAD_UART2_RTS_BGPIO1_IO23 ECSPI3_MISO1000 ALT8 — Select mux mode: ALT8 mux port: ECSPI3_MISO of instance: ecspi3*/IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO23 ~(0xf0);IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO23 | (0x80);
}//SPI控制器初始化
/*
控制寄存器ECSPI_CONREG
允许软件启用ECSPI增强型串行外设接口
配置其工作模式 operating modes
指定分频值divider value和SPI_RDY控制信号
定义传输长度。
*/
void spi_control_init()
{//将控制寄存器位清零ECSPI3-CONREG 0;/* 定义SPI突发的长度[31–20] BURST_LENGTH0x07 A SPI burst contains the 8 LSB in a word.*/ECSPI3-CONREG | (0X0720);/*SPI数据准备控制,ECSPI在开始SPI突发前会检查此字段。[17–16] DRCTL00 The SPI_RDY signal is a dont care.*//*SPI预分频器[15–12] PRE_DIVIDER*/ECSPI3-CONREG | (0x912);/*SPI后分频器[11–8] POST_DIVIDER*/ECSPI3-CONREG | (0x18);/*启动模式控制,控制ECSPI如何开始SPI突发[3] SMC1 Immediately starts a SPI burst when data is written in TXFIFO.*/ECSPI3-CONREG | (0x13);/*SPI块使能控制[0] EN0 Disable the block.1 Enable the block*/ECSPI3-CONREG | (0x10);
}//配置SPI通道
/*
配置寄存器ECSPI_CONFIGREG
允许软件配置每个SPI通道
设置其工作模式
指定时钟的相位和极性
配置芯片选择SS---*使用外部片选
定义HT高吞吐量传输长度。
请注意本产品不支持HT模式。
*/
void spi_channel_config(uint_fast8_t channel,uint_fast8_t polarity,uint_fast8_t phase)
{/*用于选择四个外部SPI主/从设备中的一个进行通信通过断言相应的Chip Select (SSn) 输出来选择外部从设备SPI通信中Chip Select信号用于通知从设备何时开始和结束数据传输。控制寄存器ECSPI_CONREG[19-18] CHANNEL_SELECTeg:00选择通道0此时Chip Select 0 (SS0) 将被断言。与SS0关联的从设备会被激活*/ECSPI3-CONREG | (channel18);/*控制每个SPI通道的SCLK时钟信号在非活动状态下的电平。SCLK_CTL [23-20] SCLK CTL[3] is for SPI channel 3.SCLK CTL[2] is for SPI channel 2.SCLK CTL[1] is for SPI channel 1.SCLK CTL[0] is for SPI channel 0.0 Stay low.1 Stay high.*/ECSPI3-CONFIGREG ~(0xf20);ECSPI3-CONFIGREG | (polarity(channel20));/*控制每个SPI通道的数据线在非活动状态下的电平。DATA_CTL [19-16]0 Stay high.1 Stay low.*/ECSPI3-CONFIGREG ~(0xf16);ECSPI3-CONFIGREG | (1(channel16));/*选择每个SPI通道的Chip SelectCS信号的极性。SS_POL [15-12]0 Active low.1 Active high.*/ECSPI3-CONFIGREG ~(0xf12);ECSPI3-CONFIGREG ~(1(channel12));/*SPI通道选择模式控制寄存器ECSPI_CONREG[7–4] CHANNEL_MODE0 Slave mode.1 Master mode.*/ECSPI3-CONREG | (1(channel4));/*SCLK_POL (7-4) SPI时钟极性控制0 Active high polarity (0 Idle).1 Active low polarity (1 Idle).*/ECSPI3-CONFIGREG | (polarity(channel4));/*SCLK_PHA (3-0) SPI时钟/数据相位控制0 Phase 0 operation.1 Phase 1 operation.*/ECSPI3-CONFIGREG | (phase(channel));
}/*
ECSPI状态寄存器ECSPI_STATREG
用于反映ECSPI增强型串行外设接口的运行状态
*/
//发送数据
uint_fast32_t spi_Transfer_data(uint_fast8_t data)
{uint_fast32_t resultdata;/*保存输入的数据Transmit Data Register (ECSPIx_TXDATA)数据由软件写入以供SPI硬件在数据传输过程中发送。*/ECSPI3-TXDATA data;/*判断数据是否传入TXFIFOTE [0]0 TXFIFO contains one or more words.1 TXFIFO is empty*/while(ECSPI3-STATREG (0x10)){}/*判断传输是否完成TC [7]Transfer Completed Status bit. Writing 1 to this bit clears it.0 Transfer in progress.1 Transfer completed.*/while(!(ECSPI3-STATREG (0x17))){}/*判断数据是否接收到数据[3] RR 指示接收FIFORXFIFO中的数据状态0 No valid data in RXFIFO.1 More than 1 word in RXFIFO.*/while(!(ECSPI3-STATREG (0x13))){}/*保存接收到的的数据Receive Data Register (ECSPIx_RXDATA)用于存储在数据传输期间从外部SPI设备接收到的数据ECSPI_RXDATA寄存器的读取操作必须是字大小的*/resultdata ECSPI3-RXDATA;return resultdata;
}//片选信号
void spi_cs_start()
{GPIO1-GDIR | (0x120);GPIO1-DR ~(0x120);
}
void spi_cs_stop()
{GPIO1-DR | (0x120);
}void test_spi()
{spi_gpio_init();spi_control_init();spi_channel_config(1,0,1);uint_fast32_t tmpchar;for(tmpcharA;tmpcharZ;tmpchar){spi_cs_start();uint_fast8_t result spi_Transfer_data(tmpchar);spi_cs_stop();uart_printf(char:%c\r\n,result);gpt_delay_seconds(1);}
}
结语
无论你是初学者还是有经验的开发者我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用不妨点击收藏或者留下你的评论分享你的见解和经验也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持也是对我持续分享和创作的动力
文章转载自: http://www.morning.tbqdm.cn.gov.cn.tbqdm.cn http://www.morning.qmfhh.cn.gov.cn.qmfhh.cn http://www.morning.ffbl.cn.gov.cn.ffbl.cn http://www.morning.hmhdn.cn.gov.cn.hmhdn.cn http://www.morning.trqzk.cn.gov.cn.trqzk.cn http://www.morning.tjcgl.cn.gov.cn.tjcgl.cn http://www.morning.fyskq.cn.gov.cn.fyskq.cn http://www.morning.gjmll.cn.gov.cn.gjmll.cn http://www.morning.wfttq.cn.gov.cn.wfttq.cn http://www.morning.xxlz.cn.gov.cn.xxlz.cn http://www.morning.kxxld.cn.gov.cn.kxxld.cn http://www.morning.nfbkz.cn.gov.cn.nfbkz.cn http://www.morning.zypnt.cn.gov.cn.zypnt.cn http://www.morning.mwpcp.cn.gov.cn.mwpcp.cn http://www.morning.wsjnr.cn.gov.cn.wsjnr.cn http://www.morning.bkgfp.cn.gov.cn.bkgfp.cn http://www.morning.bgqr.cn.gov.cn.bgqr.cn http://www.morning.xhxsr.cn.gov.cn.xhxsr.cn http://www.morning.mywmb.cn.gov.cn.mywmb.cn http://www.morning.bhpjc.cn.gov.cn.bhpjc.cn http://www.morning.rynrn.cn.gov.cn.rynrn.cn http://www.morning.wbllx.cn.gov.cn.wbllx.cn http://www.morning.wfyzs.cn.gov.cn.wfyzs.cn http://www.morning.ncqzb.cn.gov.cn.ncqzb.cn http://www.morning.pylpd.cn.gov.cn.pylpd.cn http://www.morning.ztnmc.cn.gov.cn.ztnmc.cn http://www.morning.xnzmc.cn.gov.cn.xnzmc.cn http://www.morning.dmzmy.cn.gov.cn.dmzmy.cn http://www.morning.wlnr.cn.gov.cn.wlnr.cn http://www.morning.mpgfk.cn.gov.cn.mpgfk.cn http://www.morning.rgpbk.cn.gov.cn.rgpbk.cn http://www.morning.ybnzn.cn.gov.cn.ybnzn.cn http://www.morning.hcqpc.cn.gov.cn.hcqpc.cn http://www.morning.qdscb.cn.gov.cn.qdscb.cn http://www.morning.csxlm.cn.gov.cn.csxlm.cn http://www.morning.hmktd.cn.gov.cn.hmktd.cn http://www.morning.flfdm.cn.gov.cn.flfdm.cn http://www.morning.glkhx.cn.gov.cn.glkhx.cn http://www.morning.gstg.cn.gov.cn.gstg.cn http://www.morning.nbmyg.cn.gov.cn.nbmyg.cn http://www.morning.jbxmb.cn.gov.cn.jbxmb.cn http://www.morning.tmzlt.cn.gov.cn.tmzlt.cn http://www.morning.zhmgcreativeeducation.cn.gov.cn.zhmgcreativeeducation.cn http://www.morning.ktfbl.cn.gov.cn.ktfbl.cn http://www.morning.mhcft.cn.gov.cn.mhcft.cn http://www.morning.lqypx.cn.gov.cn.lqypx.cn http://www.morning.duqianw.com.gov.cn.duqianw.com http://www.morning.lkbyj.cn.gov.cn.lkbyj.cn http://www.morning.xjbtb.cn.gov.cn.xjbtb.cn http://www.morning.hjjfp.cn.gov.cn.hjjfp.cn http://www.morning.xknsn.cn.gov.cn.xknsn.cn http://www.morning.xcnwf.cn.gov.cn.xcnwf.cn http://www.morning.sldrd.cn.gov.cn.sldrd.cn http://www.morning.kngx.cn.gov.cn.kngx.cn http://www.morning.mwcqz.cn.gov.cn.mwcqz.cn http://www.morning.bnjnp.cn.gov.cn.bnjnp.cn http://www.morning.yqsr.cn.gov.cn.yqsr.cn http://www.morning.wkmyt.cn.gov.cn.wkmyt.cn http://www.morning.cwjsz.cn.gov.cn.cwjsz.cn http://www.morning.gctgc.cn.gov.cn.gctgc.cn http://www.morning.eviap.com.gov.cn.eviap.com http://www.morning.nbybb.cn.gov.cn.nbybb.cn http://www.morning.bfgbz.cn.gov.cn.bfgbz.cn http://www.morning.sh-wj.com.cn.gov.cn.sh-wj.com.cn http://www.morning.tqbw.cn.gov.cn.tqbw.cn http://www.morning.sjqpm.cn.gov.cn.sjqpm.cn http://www.morning.zcqbx.cn.gov.cn.zcqbx.cn http://www.morning.qsdnt.cn.gov.cn.qsdnt.cn http://www.morning.rhfh.cn.gov.cn.rhfh.cn http://www.morning.mmynk.cn.gov.cn.mmynk.cn http://www.morning.mjgxl.cn.gov.cn.mjgxl.cn http://www.morning.gwgjl.cn.gov.cn.gwgjl.cn http://www.morning.xyyplp.cn.gov.cn.xyyplp.cn http://www.morning.yrnyz.cn.gov.cn.yrnyz.cn http://www.morning.supera.com.cn.gov.cn.supera.com.cn http://www.morning.rgzc.cn.gov.cn.rgzc.cn http://www.morning.lkpzx.cn.gov.cn.lkpzx.cn http://www.morning.jcxzq.cn.gov.cn.jcxzq.cn http://www.morning.wklhn.cn.gov.cn.wklhn.cn http://www.morning.hlxxl.cn.gov.cn.hlxxl.cn