pAttr.subMode = SpiSubMode_0;
pAttr.speed = SpiSpeed_10MHz;
pAttr.bitOrder = SpiBitOrder_MSBFirst;
SPIInit(SpiNum_HSPI, &pAttr);
}
void Send_cmd(uint8 command)
{
SpiData pDat;
pDat.cmd = command; ///< Command value
pDat.cmdLen = 1; ///< Command byte length
pDat.addr = NULL; ///< Point to address value
pDat.addrLen = 0; ///< Address byte length
pDat.data = NULL; ///< Point to data buffer
pDat.dataLen = 0; ///< Data byte length.
SPIMasterSendData(SpiNum_HSPI, &pDat);
}
/******************************************************************************
-
FunctionName : user_init
-
Description : entry of user application, init user function here
-
Parameters : none
-
Returns : none
*******************************************************************************/
void user_init(void)
{
uint8 cmd = 0xaa;
uint32 addr = 0xbbcc;
uint32 data[2] = { 0x11223344, 0x55667788 };
spi_initialize();
printf(“Starting SPI Communication\n”);
while (1) {
Send_cmd(0x34);
SpiData pDat;
pDat.cmd = cmd; ///< Command value
pDat.cmdLen = 1; ///< Command byte length
pDat.addr = &addr; ///< Point to address value
pDat.addrLen = 2; ///< Address byte length
pDat.data = data; ///< Point to data buffer
pDat.dataLen = sizeof(data); ///< Data byte length.
SPIMasterSendData(SpiNum_HSPI, &pDat);
vTaskDelay(100);
}
}
二. 软件SPI
软件SPI可能速度较慢,我自己测试了IO口速度大概是1.75翻转一次,也就是570k,比串口速度好多了。
用例:
LOCAL void spi_task(void *pvParameters)
{
SOFT_SPI_INIT();
while(1){
softspi_write_byte(0x08);
softspi_write_byte(0x03);
softspi_write_
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
byte(0x04);
softspi_write_byte(0x0A);
vTaskDelay(5);
//printf(“spi test\n”);
}
vTaskDelete(NULL);
}
驱动代码 :
/*
-
soft spi.c
-
Created on: 2018年8月10日
-
Author: Hynson
*/
#include “soft_spi.h”
/* spi write one byte */
void ICACHE_FLASH_ATTR softspi_write_byte(u8 data)
{
u8 i;
CS_0();
for(i = 0; i < 8; i++){
if (data & 0x80){
MOSI_1();
}else{
MOSI_0();
}
SCK_0();
data <<= 1;
SCK_1();
}
CS_1();
}
/* spi read one byte */
u8 ICACHE_FLASH_ATTR softspi_read_byte(void)
{
u8 read = 0;
u8 i;
CS_0();
for (i = 0; i < 8; i++){
SCK_0();
read = read<<1;
if (MISO_IS_HIGH()){
read++;
}
SCK_1();
}
CS_1();
return read;
}
/*
-
soft_spi.h
-
Created on: 2018年11月24日
-
Author: Hynson
*/
#ifndef _SOFT_SPI_H
#define _SOFT_SPI_H
#include “c_types.h”
#include “gpio.h”
#include “esp8266/gpio_register.h”
#include “esp8266/eagle_soc.h”
#include “esp8266/pin_mux_register.h”
#include “esp8266/ets_sys.h”
#define SPI_MISO 12
#define SPI_MOSI 13