打印
[技术问答]

HC32F4A0 的AOS控制问题

[复制链接]
1256|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nczywq|  楼主 | 2023-11-29 11:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在看官方的串口DMA例子时,发现使用了AOS来触发DMA重新接受数据函数:
AOS_SW_Trigger();
我发现DMA配置中配置了软件触发,在串口超时中断里,接收超时后,会调用上面的函数,来出发软中断,我看源码是会触发所有配置过AOS的事件吧?

如果这样的话,那就有问题了,如果我其他串口也配置了串口超时中断,在另一个串口传输时,触发了超时中断,那也会调用上面的函数来重置DMA接收,这样不就相互干扰了吗?
有小华的大佬,或者官方的人解释一下嘛,可能我理解的不对

使用特权

评论回复
沙发
只是个新人-| | 2023-11-30 09:27 | 只看该作者
看我最近一条评论

使用特权

评论回复
板凳
nczywq|  楼主 | 2023-12-1 09:49 | 只看该作者

评论了啥

使用特权

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

60

帖子

2

粉丝