[讨论] 【LinkIt 7687试用体验】SPI连接发送

[复制链接]

实习生

发表于 2016-12-22 13:37:46   441 查看 2 回复 显示全部楼层 倒序浏览
分享
经过很多次调试将spi调试成功了。
fasong_data发送函数传值
jieshou_buffer接受值
也可以自主定义数据流。
spi.c
***********************************************************
#include "hal.h"
#include "system_mt7687.h"
#include "top.h"
#include "spi.h"
#include "inttypes.h"
#include "CMSIS.h"
#include "led.h"
uint32_t fasong_length=1;
uint8_t  jieshou_buffer={0x00};
uint32_t jieshou_length=2;
uint8_t  fasong_data={0x00};
void spi_send_and_receive()
{
fasong_length=1;
jieshou_length=2;
uint32_t clock_frequency = 1000000; //频率//SPI主时钟频率设置,范围从30000HZ到60000000HZ。
hal_spi_master_config_t spi_config;
log_hal_info("---spim_example begin---\r\n");
   hal_gpio_status_t ret;
                   //************
   ret = hal_gpio_init(HAL_GPIO_29);
   if (HAL_GPIO_STATUS_OK != ret)
       {
     log_hal_error("hal_gpio_init 29 failed\r\n");
     hal_gpio_deinit(HAL_GPIO_29);
     return;
       }
   ret = hal_gpio_init(HAL_GPIO_30);
   if (HAL_GPIO_STATUS_OK != ret)
       {
     log_hal_error("hal_gpio_init 30 failed\r\n");
     hal_gpio_deinit(HAL_GPIO_30);
     return;
       }
   ret = hal_gpio_init(HAL_GPIO_31);
   if (HAL_GPIO_STATUS_OK != ret)
       {
     log_hal_error("hal_gpio_init 31 failed\r\n");
     hal_gpio_deinit(HAL_GPIO_31);
     return;
       }
   ret = hal_gpio_init(HAL_GPIO_32);
   if (HAL_GPIO_STATUS_OK != ret)
       {
     log_hal_error("hal_gpio_init 32 failed\r\n");
     hal_gpio_deinit(HAL_GPIO_32);
     return;
       }
   hal_gpio_init(HAL_GPIO_28);
hal_pinmux_set_function(HAL_GPIO_29, HAL_GPIO_29_SPI_MOSI_M_CM4);
hal_pinmux_set_function(HAL_GPIO_30, HAL_GPIO_30_SPI_MISO_M_CM4);
hal_pinmux_set_function(HAL_GPIO_31, HAL_GPIO_31_SPI_SCK_M_CM4);
hal_pinmux_set_function(HAL_GPIO_32, HAL_GPIO_32_SPI_CS_0_S_CM4);
//spi初始化参数
spi_config.bit_order = HAL_SPI_MASTER_MSB_FIRST;
spi_config.slave_port = HAL_SPI_MASTER_SLAVE_0;
spi_config.clock_frequency = clock_frequency;
spi_config.phase = HAL_SPI_MASTER_CLOCK_PHASE0;
spi_config.polarity = HAL_SPI_MASTER_CLOCK_POLARITY0;
//缓存区属性赋值
hal_spi_master_send_and_receive_config_t spi_send_and_receive_config;
spi_send_and_receive_config.receive_buffer = &jieshou_buffer;
spi_send_and_receive_config.send_data = &fasong_data;
spi_send_and_receive_config.send_length = fasong_length;
spi_send_and_receive_config.receive_length = jieshou_length;
if (HAL_SPI_MASTER_STATUS_OK != hal_spi_master_init(HAL_SPI_MASTER_0, &spi_config)) {
        log_hal_info("hal_spi_master_init fail\n");
         return;
    }
         //此功能在FIFO模式下同时发送和接收数据。
          //此功能在传输完成前不会返回。
          //用户应该判断在发送命令期间接收的数据是否有效,并且此信息可以从SPI器件的数据手册获得。
           ret = hal_spi_master_send_and_receive_polling(HAL_SPI_MASTER_0, &spi_send_and_receive_config);//轮询模式同时发送和接收数据
          if (HAL_SPI_MASTER_STATUS_ERROR== ret) {
                  log_hal_info("spi master send and receive means the byte_order parameter is not configured rightly for the FIFO mode;\n");//表示byte_order参数未正确配置为FIFO模式;
                 }
          else if (HAL_SPI_MASTER_STATUS_ERROR_BUSY== ret) {
                  log_hal_info("spi master send and receive means this port of SPI master is busy and not available for use\n");//表示SPI主机的此端口正忙,不可使用;
     
                 }
          else if (HAL_SPI_MASTER_STATUS_ERROR_PORT== ret) {
                  log_hal_info("spi master send and receive means master_port parameter is an invalid port number\n");//表示master_port参数是无效的端口号;,不可使用;
         
                 }
           else if (HAL_SPI_MASTER_STATUS_INVALID_PARAMETER== ret) {
                  log_hal_info("spi master send and receive means an invalid parameter in spi_send_and_receive_config is given\n");//表示spi_send_and_receive_config中的无效参数;
      
                 }
           else{
              log_hal_info("spi master send and receive means this function return successfully\n");//表示此函数成功返回。
        
           }

          ret=hal_spi_master_deinit(HAL_SPI_MASTER_0);
          if (HAL_SPI_MASTER_STATUS_ERROR_PORT==ret ) {
  log_hal_info("spi master deinit means master_port parameter is an invalid port number\n");//表示master_port参数是无效的端口号;
  }
          else{
  log_hal_info("spi master deinit means this function return successfully. \n");//表示此函数成功返回。
  return;
  }
              hal_gpio_deinit(HAL_GPIO_29);
              hal_gpio_deinit(HAL_GPIO_30);
              hal_gpio_deinit(HAL_GPIO_31);
              hal_gpio_deinit(HAL_GPIO_32);
}

***************************************
spi.h
**************************************************
#ifndef _SPI_H_
#define _SPI_H_
#include "hal.h"
#include "system_mt7687.h"
#include "top.h"
#include "spi.h"
#include "inttypes.h"
#include "CMSIS.h"
extern uint32_t fasong_length;
extern uint8_t  jieshou_buffer;
extern uint32_t jieshou_length;
extern uint8_t  fasong_data;
#ifdef __cplusplus
extern "C" {
  #endif
void spi_send_and_receive();
#ifdef __cplusplus
}
#endif
#endif /* __SPI433_H_ */

屏幕截图(32).png
标签:无线

实习生

发表于 2017-1-3 11:47:10  
华强PCB打样
你好,,我最近在调试这个MT7687的SPI,,,,,发现,在bit0的那一个bit上,缺少前半个CLK的输出。导致我的从设备通信有误。我用的SPI MODE0。。如图,所示。。。。不知道你有没有遇到这个。。。。
clipboard.png
回复

点赞

实习生

发表于 2017-1-18 10:24:14  
newyz 发表于 2017-1-3 11:47
你好,,我最近在调试这个MT7687的SPI,,,,,发现,在bit0的那一个bit上,缺少前半个CLK的输出。导致我的从设备通信有误。我用的SPI MODE0。。如图,所示。。。。不知道你有没有遇到这个。。。。

加我QQ帮你解答 386395277
回复

点赞

高级模式
您需要登录后才可以回帖 登录 | 注册

专家问答 查看更多>>
关闭

站长推荐 上一条 /7 下一条

小黑屋|手机版|Archiver| 电子发烧友 ( 粤ICP备14022951号-2 )     

GMT+8, 2017-3-23 08:25 , Processed in 0.089185 second(s), 16 queries , Memcache On.

微信扫描
快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

我的提问

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

单片机论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

-

硬件设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PCB设计论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

树莓派论坛

智能硬件论坛

开发快智能硬件开发平台

Intel物联网开发者专区

Waveshare

乐美客SBC专区

Arduino论坛

BeagleBone论坛

机器人论坛

创客神器NanoPi

小钢炮CANNON

比派科技banana pi专区

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

个人版区

阿东Verilog技术专版

直流马达驱动电路设计

LabVIEW英雄联盟

特权同学FPGA专区

-

厂商专区

灵动微电子 MM32

盈鹏飞嵌入式

TI论坛

TI Deyisupport社区

芯灵思嵌入式论坛

Tisan

米尔科技

庆科社区

WIZnet技术专区

Cypress技术论坛

飞凌嵌入式

Qualcomm技术论坛

英创嵌入式

机智云GoKit论坛

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区