uboot | fsbl中如何启动SPI或者GPIO等外设

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dzw19911024/article/details/82260046

1、条件:基于XILINX uboot。

2、使用SPI。其实SPI控制器使用,在每个步骤都可以使用,包括在fsbl等都可以。原理就是配置控制器的寄存器。

在FSBL中使用SPI:(1)、初始化SPI控制器0或者1,具体看vavido中硬件。调用

XSpiPs_Config *SpiConfig;XSpiPs Spi0

SpiConfig = XSpiPs_LookupConfig(id);ID 为控制器编号(XPAR_XSPIPS_0_DEVICE_ID)。

XSpiPs_CfgInitialize(&Spi0, SpiConfig, SpiConfig->BaseAddress); 初始化配置

XSpiPs_SetOptions //初始化其他配置

XSpiPs_SetClkPrescaler

XSpiPs_SetSlaveSelect //客户端选择。

通信:

if (up)
        spi1_set(XSPIPS_MASTER_OPTION | XSPIPS_FORCE_SSELECT_OPTION);
    else
        spi1_set(XSPIPS_MASTER_OPTION | XSPIPS_FORCE_SSELECT_OPTION|XSPIPS_CLK_ACTIVE_LOW_OPTION);

  XSpiPs_SetSlaveSelect(&Spi0, 1); //从设备选中

 XSpiPs_PolledTransfer(&Spi0, data, NULL, length);通信开始。

上述是基于FSBL中的通信,在Uboot中:

(1) static struct spi_slave* spi_inst = NULL;
(2) spi_inst = spi_setup_slave(0, 0,
                  1000000, SPI_MODE_2); //申请spi从设备

 (3) spi_inst->cs = 0; //从设备cs
 (4) spi_claim_bus(spi_inst); //选择总线 实现在xilinx_spi.c中
 (5) spi_xfer(spi_inst, 32, data, NULL, SPI_XFER_BEGIN|SPI_XFER_END); 通信开始。

猜你喜欢

转载自blog.csdn.net/dzw19911024/article/details/82260046
今日推荐