我对正交解码器Pheriperal有问题。
在我的项目中,我使用唤醒功能来在按下按下按钮时实现中断。我还需要从电机编码器跟踪脉冲。所以这是periph_init的配置:
quad_dec_init_params_t quad_dec_init_param = {.chx_port_sel = quad_dec_chxa_p10_and_chxb_p11,
.chy_port_sel = quad_dec_chya_none_and_chyb_none,
.chz_port_sel = quad_dec_chza_none_and_chzb_none,
.qdec_clockdiv = 1,
.qdec_events_count_to_trigger_interrupt = 0,};
quad_decoder_init(&quad_dec_init_param);
wkupct_register_callback(app_interrupt_handler);
wkupct_enable_irq(128,128,1,0x3f);
但它不起作用,因为当电机启动时,设备仍然锁定到中断循环中。wkup_quadec_handler是constalntly调用的。
如果我为像这样定义QIAD解码器的回调函数,那么设备不会锁定但是每100个调用quad_decoder_user_callback_cunction:
quad_dec_init_params_t quad_dec_init_param = {.chx_port_sel = quad_dec_chxa_p10_and_chxb_p11,
.chy_port_sel = quad_dec_chya_none_and_chyb_none,
.chz_port_sel = quad_dec_chza_none_and_chzb_none,
.qdec_clockdiv = 1,
.qdec_events_count_to_trigger_interrupt = 0,};
quad_decoder_init(&quad_dec_init_param);
quad_decoder_register_callback((uint32_t *)quad_decoder_user_callback_function);
quad_decoder_enable_irq(100);
wkupct_register_callback(app_interrupt_handler);
wkupct_enable_irq(128,128,1,0x3f);
因此,始终需要Quad解码器的回调函数声明?
嗨guiseppe,
正交解码器和唤醒控制器是不同的模块,每个模块都可以唤醒580,以便正确设置正交解码器,您必须为此模块注册回调。鼠标项目使用车轮的正交解码器,您可以查看项目并检查其如何实现。此外,您还可以查看外围驱动程序文档UM-B-004以获取更多信息。
谢谢mt_dialog.