[技术问答] HC32F4A0 的AOS控制问题

[复制链接]
1931|11
 楼主| nczywq 发表于 2023-11-29 11:30 | 显示全部楼层 |阅读模式
我在看官方的串口DMA例子时,发现使用了AOS来触发DMA重新接受数据函数:
  1. AOS_SW_Trigger();
我发现DMA配置中配置了软件触发,在串口超时中断里,接收超时后,会调用上面的函数,来出发软中断,我看源码是会触发所有配置过AOS的事件吧?

如果这样的话,那就有问题了,如果我其他串口也配置了串口超时中断,在另一个串口传输时,触发了超时中断,那也会调用上面的函数来重置DMA接收,这样不就相互干扰了吗?
有小华的大佬,或者官方的人解释一下嘛,可能我理解的不对
只是个新人- 发表于 2023-11-30 09:27 | 显示全部楼层
看我最近一条评论
 楼主| nczywq 发表于 2023-12-1 09:49 | 显示全部楼层

评论了啥

评论

@wubangmi :AOS_DMA1_0,绑定到EVT_SRC_USART1_RI,AOS_DMA1_1绑定到EVT_SRC_USART1_TI,这些触发源肯定是单独的呀,但是绑定后AOS_SW_Trigger,会触发所有绑定的信号,导致所有的都复位吧?  发表于 2023-12-13 17:03
@nczywq :这只是一个触发源,你不能绑定多个,也就是说有且只能绑定其中一个  发表于 2023-12-13 13:36
@wubangmi :感谢你的解答,AOS_SetTriggerEventSrc函数,是在初始化UART,DMA和AOS的时候,进行绑定的,我试过,如果不进行绑定,自动接收程序将会异常,无法完整接收串口数据,我现在程序驱动了UART1,2,6,7,进行DMA数据发送和接收,按照例程如果使用函数AOS_SetTriggerEventSrc绑定触发源,AOS_SW_Trigger();将会触发所有串口复位,这是不是就有很大的问  发表于 2023-12-13 09:51
@nczywq :你说的非常对,是我搞错了,你说的这个函数只是很多触发源的其中一个。需要配合另外一个函数如下: void AOS_SetTriggerEventSrc(uint32_t u32Target, en_event_src_t enSource); 第二个形参就填 EVT_SRC_AOS_STRG ///< = 299U, /* AOS_STRG */ 然后你一调用AOS_SW_T  发表于 2023-12-12 14:45
@wubangmi :函数原型中,并没有提供行参呀如下: /** * @brief AOS software trigger. * @param None * @retval None */ __STATIC_INLINE void AOS_SW_Trigger(void) { WRITE_REG32(bC  发表于 2023-12-12 11:04
给你技术支持  发表于 2023-12-1 16:42
欢迎使用小华最新的F4A0的库V2.2.0版本,这里面貌似写明了软件触发AOS会有两个形参。 当然我大胆的猜测,你有这样的疑问应该是没有看明白AOS的东西  发表于 2023-12-1 11:13
 楼主| nczywq 发表于 2023-12-13 09:54 | 显示全部楼层
我现在使用的是如下方法,没验证多串口时,是否会发生冲突
  1. (void)DMA_ChCmd(RX_DMA_UNIT, RX_DMA_CH, DISABLE);                        //写参数时,先失能通道
  2.                         DMA_SetDestAddr(RX_DMA_UNIT, RX_DMA_CH, (uint32_t)Attitude_Rx);  //重新设置指针地址
  3.                         DMA_SetTransCount(RX_DMA_UNIT, RX_DMA_CH, Attitude_FRAME_LEN_MAX); //重新设置传输大小
  4.                         (void)DMA_ChCmd(RX_DMA_UNIT, RX_DMA_CH, ENABLE);                //开启使能通道
  5.       USART_FuncCmd(Attitude_UNIT, USART_RX, ENABLE);                        //清空标志
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

83

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部