芯片SPI资源分配情况
从资源上看,板卡端最终可以使用的SPI接口有两个,一个是接wifi模块的SPIB,另一个是接在PMOD接口上的SPIA。查阅资料,发现野火板卡配套的ESP8266并未实现对应的SPI功能,若需开发,还需要对应的编写esp8266固件,因此优先匹配PMOD接口的SPIA。
配置过程
RTT配置添加
KConfig添加SPI配置:

drv_spi.c中是直接引用RASC生成的文件,因此不需要在drv_config.h中添加SPI相关头文件。
配置代码
在emu中运行menuconfig,打开SPI配置

运行scons --target=mdk5,把dac部分导入工程

配置SPI
打开新生成的keil工程后运行RASC,增加SPI相关配置



由于PMOD接口所使用的cs脚与硬件对应脚不一致,因此只能以gpio的方式实现cs脚,所以还需要配置P301为CS脚

生成代码配置

修改代码
由于spi暂无命令行测试命令,因此需要手动编写测试脚本。
/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author        Notes
 * 2021-10-10     Sherman       first version
 */
#include <rtthread.h>
#include "hal_data.h"
#include <rtdevice.h>
void hal_entry(void)
{
    rt_err_t res;
    static struct rt_spi_device spi_dev; 
    uint8_t sendbuf[6]={0,1,2,3,4,5};
    static rt_uint32_t spi_cs = BSP_IO_PORT_03_PIN_01;
    res = rt_spi_bus_attach_device_cspin(&spi_dev,"spi00", "spi0", spi_cs, (void*)spi_cs);
    if (res != RT_EOK)
    {
        rt_kprintf("rt_spi_bus_attach_device!\r\n");
    }
    struct rt_spi_configuration cfg;
    cfg.data_width = 8;
    cfg.max_hz = 100000; // 由于暂时手上的逻辑分析仪速率只能到24M,因此只能抓低速的spi通信
    cfg.mode = RT_SPI_MODE_1 | RT_SPI_MSB;
    spi_dev.bus->owner = &spi_dev; 
    rt_spi_configure(&spi_dev,&cfg);
    while (1)
    {
        rt_spi_send(&spi_dev, sendbuf, sizeof(sendbuf));
        rt_thread_mdelay(1000);
    }
}编译固件
结果验证
由于此次验证不再通过msh敲命令的方式去验证,因此不再抓串口数据,而是直接采用逻辑分析仪抓取波形并分析数据的方式来验证结果。

从逻辑分析仪抓到的数据来看,与预期的数据一致。
			
			
			
						
			
 我要赚赏金
