我试图在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中时,一切工作都很好,所以我知道其余的代码是功能性的。
谢谢你!
戴斯。莱纳姆:
嗨dlo,
我无法在初始化代码中找到任何错误。请说明你是否在使用任何睡眠模式配置?如果您使用睡眠模式,当设备从睡眠中醒来时,将不会执行user_on_connection()函数,因此不会配置gpio。因此,您应该在设备唤醒时或在peri_init()函数中重新配置它们,如前所述。
谢谢,PM_Dialog
非常感谢你的提示!我通过启用/禁用一个标志,并将初始化留在外围。