你好
我想我犯了一个错误的误,我做了靴子,所以用periph_init仍然不起作用
我试过了:
if(gpio_getpinstatus(gpio_port_0,gpio_ctrl)== false){
//下降沿
Advlen = 0;
setbits16(clk_ctrl_reg,sys_clk_sel,0);//选择xtal 16mhz
setBits16(CLK_16M_REG,RC16M_ENABLE,0);//保存来自RC 16MHz的电源
setbits16(clk_radio_reg,ble_enable,1);// BLE时钟启用
SetBits16(PMU_CTRL_REG,Radio_Sleep,0);// 充电!注意:系统必须在启动Radio_PD时为16MHz运行。
set_pad_functions();
UART_SPS_INIT(UART_SPS_BAUDRATE,3);
}
但它不起作用,我只能让它在BLE进行广告后工作,从这一刻(如你所说的SLP_Handled)UART收到数据
我试图在GPIO回调中调用这个处理程序的一些代码,但不能使其工作
在我的情况下,你会打电话给什么功能?
问候
设备:
此序列也不起作用,事件之后发出广告:
if(gpio_getpinstatus(gpio_port_0,gpio_ctrl)== false){
//下降沿
Advlen = 0;
setbits16(clk_ctrl_reg,sys_clk_sel,0);//选择xtal 16mhz
setBits16(CLK_16M_REG,RC16M_ENABLE,0);//保存来自RC 16MHz的电源
// 1.上电外围设备的电源域
periph_init();
if(app_default_sleep_mode == arch_ext_sleep_on)
ARCH_DISABLE_SLEEP();// ARCH_FORCE_ACTIVE_MODE();
//设置中断以检测GPIO_CTRL的上升沿
gpio_enableirq(gpio_port_0,gpio_ctrl,gpio0_irqn,0,1,0);
}
嗨Joanquark,
尝试调用ARCH_BLE_FORCE_WAKE_UP()以便为LP和要调用的SLP处理程序唤醒并校准晶体,不要在ISR中进行任何水晶操作,让BLE处理程序照顾。执行SLP后,您可以使用580的外围设备。
谢谢mt_dialog.
提出:
if(gpio_getpinstatus(gpio_port_0,gpio_ctrl)== false){
//下降沿
Advlen = 0;
ARCH_BLE_FORCE_WAKEUP();
if(app_default_sleep_mode == arch_ext_sleep_on)
ARCH_DISABLE_SLEEP();// ARCH_FORCE_ACTIVE_MODE();
//设置中断以检测GPIO_CTRL的上升沿
gpio_enableirq(gpio_port_0,gpio_ctrl,gpio0_irqn,0,1,0);
}
并且仍然不起作用,直到下一个广告活动发生
只是为了添加,我尝试了许多延迟,仍然不起作用,电力分布器没有表现出有效的变化,所以我假设根本没有发电。
支票连接
嗨Joanquark,
当您启动BLE核心时,您不会看到任何大规模的更改,您应该调用BLE上电的原因是修剪XTAL16以获得有效的UART数据(您现在不宣传或做任何无线电活动看到更大的力量),虽然来自你的图像,我可以看到中断点击的位置,但是当时我看不到任何禁用睡眠,似乎睡眠禁用在下一个广告活动之后就会发生,你可以放置一个ARCH_SET_PXACT_GPIO()在中断例程中,如果(GPIO_GETPINSTATUS(GPIO_PORT_0,GPIO_PORTRL)== false),请检查条件是否已执行该条件。还有DSP实现流量控制,虽然广告它会传染其RTS,以发出外部MCU发送或不发送数据,窗口使DSP允许数据发送是广告的,也许您没有看到任何数据到达的原因是这是。在DSP时,580将在广告时获取数据,因为外部MCU将看到其CTS低电平,并且将在设备唤醒时将其发送到该特定时间。
谢谢mt_dialog.