# 应用示例 ## spi 作为主机 master 模式 ### spi master 初始化 通过调用 \ref gx_spi_master_init 接口初始化 spi 控制器和 spi 设备;spi 总线数据结构 \ref sflash_master,参数如下: * bus_num 为 spi 总线编号句柄,只有一个通用 spi,默认为 0; * spi 为 spi 设备; * list_head 为 spi 设备链表的头指针; spi 设备数据结构 \ref spi_device,参数如下: * master 为 spi 设备所属的主机 spi 总线指针,填 NULL; * max_speed_hz 为 spi 设备最大时钟频率; * chip_select 为 cs 片选信号,只有一个 cs 信号,因此为 0; * bits_per_word 为 spi 传输位宽,可配置 8 或 32; * data_format 为 spi 传输模式,单线模式为 0; * mode 为 0,无作用; 示例代码如下: ```c static struct sflash_master g_spi_master={ .bus_num = 0, .spi={ .master = NULL, .chip_select = 0, .max_speed_hz = 1000*1000, .mode = 0, .bits_per_word = 8, .data_format = 0, }, }; gx_spi_master_init(&g_spi_master); ``` ### spi master 发送 通过 \ref gx_spi_tx 接口发送数据,参数如下: * spi 为 spi 设备; * buf 为要发送的数据 buffer; * len 为要发送数据的长度; 示例如下: ```c uint8_t spi_test_buf[256]; uint32_t len = 0x100; if(gx_spi_tx(&spi_master->spi, spi_test_buf, len) != 0) { printf("spi master tx failed,len: %d\r\n", len); return -1; } ``` ### spi master 接收 通过 \ref gx_spi_rx 接口接收数据,参数如下: * spi 为 spi 设备; * buf 为要接收的数据 buffer; * len 为要接收数据的长度; 示例如下: ```c uint8_t spi_test_buf[256]; uint32_t len = 0x100; if(gx_spi_rx(&spi_master->spi, spi_test_buf, len) != 0) { printf("spi master rx failed,len: %d\r\n", len); return -1; } ``` ## spi 作为从机 slave 模式 ### spi slave 初始化 通过调用 \ref gx_spi_slave_init 接口初始化 spi 总线和 spi 设备,参数 \ref spi_device 如下: * master 为 spi 总线指针,填 NULL,初始化时驱动内部自动赋值; * max_speed_hz 为 spi 设备最大时钟频率; * chip_select 为 0; * bits_per_word 为 spi 传输位宽,可配置 8 或 32; * data_format 为 spi 传输模式,单线模式为 0; * mode 为 0,无作用; 示例代码如下: ```c static struct spi_device g_spi_slave={ .master = NULL, .chip_select = 0, .max_speed_hz = 1000*100, .mode = 0, .bits_per_word = 8, .data_format = 0, }; if((iRet = gx_spi_slave_init(&g_spi_slave)) != 0) { printf("gx_spi_slave_init error:%d\r\n",iRet); } ``` ### spi slave 发送 通过 \ref gx_spi_slave_tx 接口发送数据,参数如下: * spi 为 spi 设备; * buf 为要发送的数据 buffer; * len 为要发送数据的长度,如果使用异步 dma 传输模式时,len的长度需要大于 16 字节 (8bit 位宽) 或 64 字节 (32bit 位宽); * slave_completetion_cb 异步传输模式时的回调接口,为 NULL; 示例如下: ```c uint8_t spi_test_buf[256]; uint32_t len = 0x100; if(gx_spi_slave_tx(&g_spi_slave, spi_test_buf, len, NULL)) { printf("spi slave write failed,len: %d\r\n", len); return -1; } ``` ### spi slave 接收 通过 \ref gx_spi_slave_rx 接口接收数据,参数如下: * spi 为 spi 设备; * buf 为要接收的数据 buffer; * len 为要接收数据的长度; * slave_completetion_cb 异步传输模式时的回调接口,为 NULL; 示例如下: ```c uint8_t spi_test_buf[256]; uint32_t len = 0x100; if(gx_spi_slave_rx(&g_spi_slave, spi_test_buf, len, NULL)) { printf("spi slave read failed,len: %d\r\n", len); return -1; } ```