1 Star 0 Fork 0

mo_yq5/wifi-joystick-c

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
m_spi_no.c 3.01 KB
一键复制 编辑 原始数据 按行查看 历史
mo_yq5 提交于 2022-01-07 23:09 . 使用gpio接口模拟spi实现
#define M_SPI_SUPPORT_NO
#ifdef M_SPI_SUPPORT_NO
#include "m_spi.h"
#include "m_gpio.h"
#include "m_log.h"
#include "m_time.h"
#include "hi_gpio.h"
#define M_SPI_IDX_CSN HI_GPIO_IDX_5
#define M_SPI_IDX_CK HI_GPIO_IDX_6
#define M_SPI_IDX_MISO HI_GPIO_IDX_7
#define M_SPI_IDX_MOSI HI_GPIO_IDX_8
static unsigned char m_spi_write_read_char(unsigned char val)
{
unsigned int i;
int r;
unsigned char send[9],recv[9];
m_log_e(M_SPI_H, "write byte: 0x%02x", val);
for (i = 0; i < 8; i++) {
*(send + i) = (val & 0x80) ? '1': '0';
r = m_gpio_set_val(M_SPI_IDX_MOSI, (val & 0x80) ? M_GPIO_HIGH: M_GPIO_LOW);
if (r != 0) {
m_log_e(M_SPI_H, "error=0x%02x", r);
return val;
}
val <<= 1;
r = m_gpio_set_val(M_SPI_IDX_CK, M_GPIO_HIGH);
if (r != 0) {
m_log_e(M_SPI_H, "error=0x%02x", r);
return val;
}
*(recv + i) = (m_gpio_get_val(M_SPI_IDX_MISO) & 0x01) ? '1': '0';
val |= m_gpio_get_val(M_SPI_IDX_MISO) & 0x01;
r = m_gpio_set_val(M_SPI_IDX_CK, M_GPIO_LOW);
if (r != 0) {
m_log_e(M_SPI_H, "error=0x%02x", r);
return val;
}
}
send[8] = '\0';
recv[8] = '\0';
m_log_e(M_SPI_H, "byte send=%s, recv=%s\n", &send, &recv);
return val;
}
int m_spi_init()
{
m_gpio_set_dir(M_SPI_IDX_CSN, M_GPIO_OUT);
m_gpio_set_dir(M_SPI_IDX_CK, M_GPIO_OUT);
m_gpio_set_dir(M_SPI_IDX_MISO, M_GPIO_IN);
m_gpio_set_dir(M_SPI_IDX_MOSI, M_GPIO_OUT);
m_gpio_set_val(M_SPI_IDX_CSN, M_GPIO_LOW);
m_gpio_set_val(M_SPI_IDX_CK, M_GPIO_LOW);
m_gpio_set_val(M_SPI_IDX_MOSI, M_GPIO_LOW);
m_log_e(M_SPI_H, "dir csn ck miso mosi: %d %d %d %d",
m_gpio_get_dir(M_SPI_IDX_CSN), m_gpio_get_dir(M_SPI_IDX_CK), m_gpio_get_dir(M_SPI_IDX_MISO), m_gpio_get_dir(M_SPI_IDX_MOSI));
m_log_e(M_SPI_H, "val csn ck miso mosi: %d %d %d %d",
m_gpio_get_val(M_SPI_IDX_CSN), m_gpio_get_val(M_SPI_IDX_CK), m_gpio_get_val(M_SPI_IDX_MISO), m_gpio_get_val(M_SPI_IDX_MOSI));
m_gpio_set_val(M_SPI_IDX_CSN, M_GPIO_HIGH);
m_gpio_set_val(M_SPI_IDX_CK, M_GPIO_HIGH);
m_gpio_set_val(M_SPI_IDX_MOSI, M_GPIO_HIGH);
m_log_e(M_SPI_H, "val csn ck miso mosi: %d %d %d %d",
m_gpio_get_val(M_SPI_IDX_CSN), m_gpio_get_val(M_SPI_IDX_CK), m_gpio_get_val(M_SPI_IDX_MISO), m_gpio_get_val(M_SPI_IDX_MOSI));
return 0;
}
int m_spi_host_write_read_bak(m_spi_data *data)
{
m_gpio_set_val(M_SPI_IDX_CSN, M_GPIO_LOW);
m_spi_write_read_char(*data->sendBuf);
m_spi_write_read_char(*(data->sendBuf + 1));
m_gpio_set_val(M_SPI_IDX_CSN, M_GPIO_HIGH);
return 0;
}
int m_spi_host_write_read(m_spi_data *data)
{
m_gpio_set_val(M_SPI_IDX_CSN, M_GPIO_LOW);
for (int i = 0; i < data->recvSize; i++) {
*(data->recvBuf++) = m_spi_write_read_char(*(data->sendBuf++)) & 0xFF;
}
m_gpio_set_val(M_SPI_IDX_CSN, M_GPIO_HIGH);
return 0;
}
#endif
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/moyq5/wifi-joystick-c.git
[email protected]:moyq5/wifi-joystick-c.git
moyq5
wifi-joystick-c
wifi-joystick-c
master

搜索帮助