Peripheral_Init()之外的SPI初始化

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
3个帖子/ 0个新
最后发表
dlo
离线
最后看到:1个月1个星期前
加入:2017-05-26十六21
Peripheral_Init()之外的SPI初始化

我试图在On Connect中初始化SPI,并在On Disconnect中禁用它。通过下面的代码,代码挂起



} while (GetBits16(SPI_CTRL_REG, SPI_INT_BIT) == 0);//轮询等待spi传输

uint32_t spi_access(uint32_t datatsend)

下面是我的代码在连接和断开:


Void user_on_connection(uint8_t connection_idx, struct gapc_connection_req_ind const *param)

SPI_Pad_t spi_IT8951_CS_Pad;
GPIO_SetActive (IT8951_CTRL_PORT PWR_IT8951);
present_gpio_state = true;
default_app_on_connection (connection_idx参数);

conn_idx = connection_idx;

Features_timer = app_easy_timer(60, get_features);

arch_printf(“设备连接\ r \ n”);
GPIO_ConfigurePin(SPI2_GPIO_PORT, SPI2_CS_PIN, OUTPUT, PID_SPI_EN, true);
GPIO_ConfigurePin(SPI2_GPIO_PORT, SPI2_CLK_PIN, OUTPUT, PID_SPI_CLK, false);
GPIO_ConfigurePin(SPI2_GPIO_PORT, SPI2_DO_PIN, OUTPUT, PID_SPI_DO, false);
GPIO_ConfigurePin(SPI2_GPIO_PORT, SPI2_DI_PIN, INPUT, PID_SPI_DI, false);
SetBits16 (SYS_CTRL_REG PAD_LATCH_EN 1);
spi_IT8951_CS_Pad。端口= GPIO_PORT_2;
spi_IT8951_CS_Pad。销= GPIO_PIN_1;
spi_init(&spi_IT8951_CS_Pad, SPI_MODE_16BIT, SPI_ROLE_MASTER, SPI_CLK_IDLE_POL_LOW, SPI_PHA_MODE_0, SPI_MINT_DISABLE, SPI_XTAL_DIV_8);

/**
****************************************************************************************
* @brief处理断开连接事件
* @param[in] param断开连接消息的参数
* @return无效
****************************************************************************************
*/
Void user_on_disconnect(struct gapc_disconnect_ind const *param)

default_app_on_disconnect(参数);
arch_printf("设备断开连接,原因%i\r\n", (int)param->reason);
GPIO_SetInactive (IT8951_CTRL_PORT PWR_IT8951);
present_gpio_state = false;
GPIO_ConfigurePin(SPI2_GPIO_PORT, SPI2_CS_PIN, INPUT, PID_GPIO, false);
GPIO_ConfigurePin(SPI2_GPIO_PORT, SPI2_CLK_PIN, INPUT, PID_GPIO, false);
GPIO_ConfigurePin(SPI2_GPIO_PORT, SPI2_DO_PIN, INPUT, PID_GPIO, false);
GPIO_ConfigurePin(SPI2_GPIO_PORT, SPI2_DI_PIN, INPUT, PID_GPIO, false);
SetBits16 (SYS_CTRL_REG PAD_LATCH_EN 1);

请让我知道,如果我没有正确地初始化它。我不能在peripheral_init中初始化它的原因是,当我不启用它的电源轨时,从设备从GPIO引脚获取电力。因此,我正在等待一个用户连接之前,启用从设备的电源,然后初始化SPI端口进行通信。断开后,我需要禁用端口,以便从不尝试从SPI引脚提取电力。

当初始化代码放置在Peripheral_init中时,一切工作都很好,所以我知道其余的代码是功能性的。

谢谢你!
戴斯。莱纳姆:

设备:
PM_Dialog
离线
最后看到:1小时4分钟前
工作人员
加入:2018-02-08 11:03
嗨dlo,

嗨dlo,

我无法在初始化代码中找到任何错误。请说明你是否在使用任何睡眠模式配置?如果您使用睡眠模式,当设备从睡眠中醒来时,将不会执行user_on_connection()函数,因此不会配置gpio。因此,您应该在设备唤醒时或在peri_init()函数中重新配置它们,如前所述。

谢谢,PM_Dialog

dlo
离线
最后看到:1个月1个星期前
加入:2017-05-26十六21
非常感谢

非常感谢你的提示!我通过启用/禁用一个标志,并将初始化留在外围。