370 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			370 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/****************************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
							 | 
						||
| 
								 | 
							
								be copied by any method or incorporated into another program without
							 | 
						||
| 
								 | 
							
								the express written consent of Aerospace C.Power. This Information or any portion
							 | 
						||
| 
								 | 
							
								thereof remains the property of Aerospace C.Power. The Information contained herein
							 | 
						||
| 
								 | 
							
								is believed to be accurate and Aerospace C.Power assumes no responsibility or
							 | 
						||
| 
								 | 
							
								liability for its use in any way and conveys no license or title under
							 | 
						||
| 
								 | 
							
								any patent or copyright and makes no representation or warranty that this
							 | 
						||
| 
								 | 
							
								Information is free from patent or copyright infringement.
							 | 
						||
| 
								 | 
							
								****************************************************************************/
							 | 
						||
| 
								 | 
							
								/*  Copied on iot_gpio_simu_spi.c and slightly modified  */
							 | 
						||
| 
								 | 
							
								#include "os_types.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "gpio_hw.h"
							 | 
						||
| 
								 | 
							
								#include "clk.h"
							 | 
						||
| 
								 | 
							
								#include "uart.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "iot_gpio.h"
							 | 
						||
| 
								 | 
							
								#include "iot_clock.h"
							 | 
						||
| 
								 | 
							
								#include "iot_errno.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "iot_io_api.h"
							 | 
						||
| 
								 | 
							
								#include "iot_gpio_api.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "fdma_mst_protocol.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define IRQ_DISABLE()
							 | 
						||
| 
								 | 
							
								#define IRQ_ENABLE()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define USE_HAL_API      1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if !USE_HAL_API
							 | 
						||
| 
								 | 
							
								static volatile int clk_val = 0;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void cs_high(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								#if USE_HAL_API
							 | 
						||
| 
								 | 
							
								    iot_gpio_value_set(GPIO_S_CS, 1);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_CS, 1);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void cs_low(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								#if USE_HAL_API
							 | 
						||
| 
								 | 
							
								    iot_gpio_value_set(GPIO_S_CS, 0);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_CS, 0);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void clk_overturn(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								#if USE_HAL_API
							 | 
						||
| 
								 | 
							
								    int val = 0;
							 | 
						||
| 
								 | 
							
								    iot_gpio_output_value_get(GPIO_S_CLK, &val);
							 | 
						||
| 
								 | 
							
								    iot_gpio_value_set(GPIO_S_CLK, val^1);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    for (volatile uint32_t i = 0; i < 10; i++);
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_CLK, !clk_val);
							 | 
						||
| 
								 | 
							
								    clk_val = !clk_val;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static void spi_write_byte(unsigned char d)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    int i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (i = 15; i >= 0; i--) {
							 | 
						||
| 
								 | 
							
								        // From high 7 to low 0 written sequentially.
							 | 
						||
| 
								 | 
							
								#if USE_HAL_API
							 | 
						||
| 
								 | 
							
								        iot_gpio_value_set(GPIO_S_MS, d & (1 << i / 2));
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								        hw_gpio_api_table.set_value(GPIO_S_MS, d & (1 << i / 2));
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								        clk_overturn();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static int iot_s_spi_write_data(int dev, char* buf, int wt_size)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    int i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (i = 0; i < wt_size; i++) {
							 | 
						||
| 
								 | 
							
								        spi_write_byte(buf[i]);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return 0;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static uint8_t spi_read_byte(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    int i;
							 | 
						||
| 
								 | 
							
								    uint8_t r = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (i = 0; i <= 15; i++) {
							 | 
						||
| 
								 | 
							
								        // From high 7 to low 0 serial readout
							 | 
						||
| 
								 | 
							
								        clk_overturn();
							 | 
						||
| 
								 | 
							
								#if USE_HAL_API
							 | 
						||
| 
								 | 
							
								        r = r | ((uint8_t)iot_gpio_value_get(GPIO_S_MS) << (7 - i / 2));
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								        r = r | ((uint8_t)hw_gpio_api_table.get_value(GPIO_S_MS) << (7 - i / 2));
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return r;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static uint32_t iot_s_spi_read_data(int dev, int rd_size)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    int i;
							 | 
						||
| 
								 | 
							
								    uint32_t data = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if USE_HAL_API
							 | 
						||
| 
								 | 
							
								    iot_gpio_close(GPIO_S_MS);
							 | 
						||
| 
								 | 
							
								    iot_gpio_open_as_input(GPIO_S_MS);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_MS, 0);
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_gpio_mode(GPIO_S_MS, GPIO_INPUT);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // Read in teh data.
							 | 
						||
| 
								 | 
							
								    for (i = 0; i < rd_size; i++) {
							 | 
						||
| 
								 | 
							
								        data = data | ((uint32_t)spi_read_byte() << (8 * (rd_size - 1 - i)));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if USE_HAL_API
							 | 
						||
| 
								 | 
							
								    iot_gpio_close(GPIO_S_MS);
							 | 
						||
| 
								 | 
							
								    iot_gpio_open_as_output(GPIO_S_MS);
							 | 
						||
| 
								 | 
							
								    iot_gpio_value_set(GPIO_S_CLK, 0);
							 | 
						||
| 
								 | 
							
								    iot_gpio_value_set(GPIO_S_MS, 1);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_gpio_mode(GPIO_S_MS, GPIO_OUTPUT);
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_CLK, 1);
							 | 
						||
| 
								 | 
							
								    clk_val = 1;
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_MS, 1);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return data;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// purpose:Shake hands with slave
							 | 
						||
| 
								 | 
							
								static void spi_start(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint16_t i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if USE_HAL_API
							 | 
						||
| 
								 | 
							
								    iot_gpio_value_set(GPIO_S_CLK, 1);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_CLK, 0);
							 | 
						||
| 
								 | 
							
								    clk_val = 0;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    iot_delay_us(100);
							 | 
						||
| 
								 | 
							
								//    iot_delay_us_cpu_cycle(100);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (i = 0; i < 15; i++) {
							 | 
						||
| 
								 | 
							
								#if USE_HAL_API
							 | 
						||
| 
								 | 
							
								        iot_gpio_value_set(GPIO_S_MS, 1);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								        hw_gpio_api_table.set_value(GPIO_S_MS, 1);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								        clk_overturn();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    cs_low();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// purpose:goodbye with slave
							 | 
						||
| 
								 | 
							
								static void spi_end(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint16_t i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (i = 0; i < 14; i++) {
							 | 
						||
| 
								 | 
							
								#if USE_HAL_API
							 | 
						||
| 
								 | 
							
								        iot_gpio_value_set(GPIO_S_MS, 1);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								        hw_gpio_api_table.set_value(GPIO_S_MS, 1);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								        clk_overturn();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if USE_HAL_API
							 | 
						||
| 
								 | 
							
								    iot_gpio_value_set(GPIO_S_CLK, 1);
							 | 
						||
| 
								 | 
							
								    iot_gpio_value_set(GPIO_S_MS, 1);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_CLK, 1);
							 | 
						||
| 
								 | 
							
								    clk_val = 1;
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_MS, 1);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    cs_high();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void iot_spi_fdma_master_write(uint32_t addr, uint32_t w_lenth,
							 | 
						||
| 
								 | 
							
								                               uint32_t* w_data)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t fifo[2];
							 | 
						||
| 
								 | 
							
								    uint16_t i;
							 | 
						||
| 
								 | 
							
								    uint32_t data_temp;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    fifo[0] = NTOHL(FMST_SET_CMD(FMST_CMD_WRITE, w_lenth));
							 | 
						||
| 
								 | 
							
								    fifo[1] = NTOHL(addr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IRQ_DISABLE();
							 | 
						||
| 
								 | 
							
								    spi_start();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    iot_s_spi_write_data(INVALID_DRIVER, (char*)fifo, sizeof(fifo));
							 | 
						||
| 
								 | 
							
								    for (i = 0; i < w_lenth; i++) {
							 | 
						||
| 
								 | 
							
								        data_temp = NTOHL(w_data[i]);
							 | 
						||
| 
								 | 
							
								        iot_s_spi_write_data(INVALID_DRIVER, (char*)&data_temp,
							 | 
						||
| 
								 | 
							
								                             sizeof(uint32_t));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    spi_end();
							 | 
						||
| 
								 | 
							
								    IRQ_ENABLE();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint16_t iot_spi_fdma_master_read(uint32_t addr, uint32_t r_lenth,
							 | 
						||
| 
								 | 
							
								    uint32_t* rx_buff)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t fifo[2];
							 | 
						||
| 
								 | 
							
								    uint32_t fifo2[1];
							 | 
						||
| 
								 | 
							
								    uint16_t i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    if (!r_lenth) {
							 | 
						||
| 
								 | 
							
								        return ERR_FAIL;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    fifo[0] = NTOHL(FMST_SET_CMD(FMST_CMD_READ_ALLOCATE, r_lenth));
							 | 
						||
| 
								 | 
							
								    fifo[1] = NTOHL(addr);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IRQ_DISABLE();
							 | 
						||
| 
								 | 
							
								    spi_start();
							 | 
						||
| 
								 | 
							
								    iot_s_spi_write_data(INVALID_DRIVER, (char*)fifo, sizeof(fifo));
							 | 
						||
| 
								 | 
							
								    spi_end();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    fifo2[0] = NTOHL(FMST_SET_CMD(FMST_CMD_READ_FETCH, r_lenth));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    spi_start();
							 | 
						||
| 
								 | 
							
								    iot_s_spi_write_data(INVALID_DRIVER, (char*)fifo2, sizeof(fifo2));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (i = 0; i < r_lenth;) {
							 | 
						||
| 
								 | 
							
								        rx_buff[i] = iot_s_spi_read_data(INVALID_DRIVER, sizeof(uint32_t));
							 | 
						||
| 
								 | 
							
								        i++;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if USE_HAL_API
							 | 
						||
| 
								 | 
							
								    iot_gpio_value_set(GPIO_S_CLK, 1);
							 | 
						||
| 
								 | 
							
								    iot_gpio_value_set(GPIO_S_MS, 1);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_CLK, 1);
							 | 
						||
| 
								 | 
							
								    clk_val = 1;
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_MS, 1);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    cs_high();
							 | 
						||
| 
								 | 
							
								    IRQ_ENABLE();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return ERR_OK;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint16_t iot_spi_fdma_master_get_debuginfo(uint32_t id, uint32_t* rx_buff)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t cmd;
							 | 
						||
| 
								 | 
							
								    uint16_t i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    cmd = NTOHL(FMST_SET_CMD(FMST_CMD_MODULE_STS, id));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IRQ_DISABLE();
							 | 
						||
| 
								 | 
							
								    spi_start();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    iot_s_spi_write_data(INVALID_DRIVER, (char*)&cmd, sizeof(cmd));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (i = 0; i < 8; i++) {
							 | 
						||
| 
								 | 
							
								        rx_buff[i] = iot_s_spi_read_data(INVALID_DRIVER, sizeof(uint32_t));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if USE_HAL_API
							 | 
						||
| 
								 | 
							
								    iot_gpio_value_set(GPIO_S_CLK, 1);
							 | 
						||
| 
								 | 
							
								    iot_gpio_value_set(GPIO_S_MS, 1);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_CLK, 1);
							 | 
						||
| 
								 | 
							
								    clk_val = 1;
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_MS, 1);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    cs_high();
							 | 
						||
| 
								 | 
							
								    IRQ_ENABLE();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return ERR_OK;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void iot_spi_fdma_master_reset_cpu(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t cmd;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    cmd = NTOHL(FMST_SET_CMD(FMST_CMD_CPU_RESET, 0));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IRQ_DISABLE();
							 | 
						||
| 
								 | 
							
								    spi_start();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    iot_s_spi_write_data(INVALID_DRIVER, (char*)&cmd, sizeof(cmd));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    spi_end();
							 | 
						||
| 
								 | 
							
								    IRQ_ENABLE();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void iot_spi_fdma_master_reset_release_cpu(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t cmd;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    cmd = NTOHL(FMST_SET_CMD(FMST_CMD_CPU_RESET_RELEASE, 0));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IRQ_DISABLE();
							 | 
						||
| 
								 | 
							
								    spi_start();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    iot_s_spi_write_data(INVALID_DRIVER, (char*)&cmd, sizeof(cmd));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    spi_end();
							 | 
						||
| 
								 | 
							
								    IRQ_ENABLE();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint16_t iot_spi_fdma_master_ping(uint32_t* rx_buff)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t cmd;
							 | 
						||
| 
								 | 
							
								    uint16_t i;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    cmd = NTOHL(FMST_SET_CMD(FMST_CMD_PING, 0));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IRQ_DISABLE();
							 | 
						||
| 
								 | 
							
								    spi_start();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    iot_s_spi_write_data(INVALID_DRIVER, (char*)&cmd, sizeof(cmd));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    for (i = 0; i < 4; i++) {
							 | 
						||
| 
								 | 
							
								        rx_buff[i] = iot_s_spi_read_data(INVALID_DRIVER, sizeof(uint32_t));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if USE_HAL_API
							 | 
						||
| 
								 | 
							
								    iot_gpio_value_set(GPIO_S_CLK, 1);
							 | 
						||
| 
								 | 
							
								    iot_gpio_value_set(GPIO_S_MS, 1);
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_CLK, 1);
							 | 
						||
| 
								 | 
							
								    clk_val = 1;
							 | 
						||
| 
								 | 
							
								    hw_gpio_api_table.set_value(GPIO_S_MS, 1);
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								    cs_high();
							 | 
						||
| 
								 | 
							
								    IRQ_ENABLE();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return ERR_OK;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void iot_spi_fdma_master_nop(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    uint32_t cmd;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    cmd = NTOHL(FMST_SET_CMD(FMST_CMD_NOP, 0));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    IRQ_DISABLE();
							 | 
						||
| 
								 | 
							
								    spi_start();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    iot_s_spi_write_data(INVALID_DRIVER, (char*)&cmd, sizeof(cmd));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    spi_end();
							 | 
						||
| 
								 | 
							
								    IRQ_ENABLE();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 |