UART2_Handler不能被触发?

6个职位/ 0个新职位
最后发表
chris0409
离线
最后看到:3年11个月前
加入:2017-01-11 05:59
UART2_Handler不能被触发?

嗨,对话框的工程师,
ble_peripheral示例项目我已经做了一些修改,我可以发送数据使用arch_printf通过uart2(),但是我不能得到任何Rx中断,因为UART2_Handler从来没有被调用,我比较UART2_init uart2_async项目()的项目,他们是相同的代码,有人有一个想法吗?您的任何建议都将不胜感激

设备:
MT_dialog
离线
最后看到:3个月1周前
工作人员
加入:2015-06-08 34
嗨chris0409,

嗨chris0409,

为了得到一个中断时,你可用数据需要启用中断的UART模块UART2_IER_DLH_REG, uart2_async项目当程序读取和它使中断的调用uart2_read()函数(中断接收的数据设置在uart2_rec_data_avail_setf (1);功能)。您是否调用了该函数以获得接收到的数据可用中断?

由于MT_dialog

chris0409
离线
最后看到:3年11个月前
加入:2017-01-11 05:59
嗨,MT_dialog,

嗨,MT_dialog,
我调用uart2_read后的uart2_init,但我仍然不能得到UART2_Handler()触发?如果我从uart终端发送一个字符串,我可以得到UART2_Handler()一次。
代码是这样的

静态uint8_t buffer[2] =0;
空白periph_init(空白)
{

//打开外设的电源域
SetBits16 (PMU_CTRL_REG PERIPH_SLEEP 0);
while (GetWord16(SYS_STAT_REG) & PER_IS_UP));

SetBits16 (CLK_16M_REG XTAL16_BIAS_SH_ENABLE 1);
/ /罗补丁
patch_func ();
/ /初始化垫
set_pad_functions ();
# ifdef CFG_PRINTF_UART2
SetBits16 (CLK_PER_REG UART2_ENABLE 1);
uart2_init (UART_BAUDRATE_115K2 3);
# endif
uart2_read(缓冲,1空);
//启用pads
SetBits16 (SYS_CTRL_REG PAD_LATCH_EN 1);

还有什么需要补充的吗?我需要在任何时候从uart捕获每个字节,所以我不能在while循环中使用它。任何建议吗?

MT_dialog
离线
最后看到:3个月1周前
工作人员
加入:2015-06-08 34
嗨Chris0409,

嗨Chris0409,

没有额外的配置,以获得一个从UART接收中断,您已经粘贴的代码是应该站在我这一边,我得到的接收中断UART2_Handler()为每一个角色我发送,如果你不让这我假设你是睡眠模式下操作,这意味着您不会能中断,你想自UART模块设备是睡觉时关掉(你应该仍能中断只有发送字符出现的同时,bie是唤醒为了宣传或保持连接)。如果你切换到无睡眠模式或保持设备清醒时,你期待的数据,那么这应该工作。

由于MT_dialog

chris0409
离线
最后看到:3年11个月前
加入:2017-01-11 05:59
嗨,MT_Dialog,

嗨,MT_Dialog,
ble_peripheral示例项目使用了ARCH_SLEEP_OFF的睡眠模式,所以它不会休眠,现在我使用main_func()中的uart2_read(),它工作得很好。

MT_dialog
离线
最后看到:3个月1周前
工作人员
加入:2015-06-08 34
嗨chris0409,

嗨chris0409,

很高兴这个适合你,但是为了给你一些更多的信息,当你调用的参数read2_read大小为1,你只会得到1中断,因为这个尺寸你已经宣布(错过了一点你提到你得到只有一个中断,我的印象是,你不能得到任何中断在你的第一个端口提到)。因此,在接收中断可用之后,uart2_rec_data_avail_isr()将减少已声明的大小,最终当由于大小为零而不需要其他数据时,该函数将禁用该中断。现在你可以做的是声明一个回调函数,无论大小,你想(uart2_read()函数的第三个参数是一个回调时调用接收的数据的大小达到用户声明)的值,这个回调重置你的中断(调用uart2_read()从内部回调)与相同或任何类型的大小,您想要的。

由于MT_dialog