基于Autosar ADC Driver UML的理解

 ADC_Init初始化ADC硬件和驱动,从ECUM模块发送初始化到ADC模块,并等待ADC模型初始化反馈。

ADC_Deinit将所有ADCHW单元返回到与其电源重置状态相当的状态,结论同上。

 

底下的英文翻译过来就是软件触发了一次性转换,无需通知。但具体流程是怎样的呢?

首先是ADC的用户(可以这么理解ADC User)发送ADC_Startgroupconversion(Adc_GroupType)到ADC模块,而ADC_Startgroupconversion(Adc_GroupType)的定义可以在Autosar4.4.0的文档里,SWS的ADC Driver里面查到,就是启动所请求的ADC通道组的所有通道的转换。ADC模块(也就是ADC Module)收到命令后就给外围的转换器(也就是ADC Conversion Unit)发出开始转换的指令,在这期间不需要等待外围转换器的反馈,这个时候ADC 模块指令发出以后,给ADC用户发送反馈,让用户确认指令已经发出。

此时进行下一个指令,LOOP相当于For循环,就像相当于当满足这个条件的时候,则跳出这个循环,所以后面就好理解了,当ADC_GetGroupStatus=ADC_BUSY的时候,就跳出这个循环,在循环里ADC的用户发送GetGroupStauts到ADC模块,Adc_GetGroupStatus :就是返回所请求的ADC通道组的转换状态。当ADC模块所返回的=ADC_BUSY的时候跳出这个循环。紧接着,外部的ADC转换器把转换完成的信息反馈到ADC模块。

然后ADC用户发送getgroupstatus到ADC模块,并等待反馈,ADC模块反馈ADC_GetGroupStatus=ADC_STREAM_COMPLETED()给ADC。

随后ADC用户发送ReadGroup到ADC模块并等待反馈,ADC模块反馈给用户。Adc_ReadGroup :读取请求组最后完成的转换轮的组转换结果。

 这个图是软件触发的连续的转换与通知。

ADC用户给ADC模块一个Enable的指令,对它进行唤醒,随后ADC模块返回给用户,让其确认已经被唤醒。随后ADC用户启动组转换,ADC模块收到指令后发送给外部的转换器,随后给用户反馈,直到外部转换器把转换完成的消息传递给ADC模块的时候,ADC模块发送指令通知用户随后等待接收,用户收到以后发送指令读取组的状态ADC模块进行反馈,随后ADC用户再发送指令通知模块,以此下去就是软件连续触发,最后用户发送StopGroupConversion进行停止,ADC模块收到命令后反馈给用户,随后给外部转换器发送停止的指令。

 这个图是硬件触发的一次性转换与通知

跟上面一样,一开始用户发送指令唤醒,随后ADC模块反馈。随后用户收到反馈,发送启用硬件通知,模块收到命令,发送给硬件单元启用硬件触发器。随后进入循环。由外部的硬件触发器传递给ADC的外部的转换器的开始转换的指令,再由ADC的外部转换器传递给ADC模块转换完成的指令,ADC模块把组信息通知给用户,用户再读取ADC的组状态,ADC模块进行反馈,随后用户发送指令通知模块,随后继续自己的活动。

用户发送指令到ADC模块,来禁用群组通知,ADC模块收到指令,反馈给ADC user ,由此进入loop触发器事件,也就是loop HW Trigger Event-Notification Disabled。由此等完成硬件触发器的开始转换传递给ADC外部转换器,再由外部转换器传递转换完成的指令给模块的时候,跳出循环。

最后用户禁用硬件触发,模块接收到指令以后发送禁用硬件源触发器给外部的硬件触发器,再由模块进行反馈,由此结束流程。

 硬件触发一次性转换-线性流。

跟之前一样,启动通知,反馈,随后启动硬件,模块收到以后发送给硬件触发器,随后反馈。硬件触发器触发,发送指令给转换器,转换器转换完成,发送指令给ADC模块,ADC模块收到发送的东西,通知用户,于是用户开始获取组的状态,随后ADC模块反馈ADC_GetGroupStatus=ADC_COMPLETED(),用户接收到后通知Group_1,由此填充了第一轮转换结果的流式缓冲区。

触发器再次触发,发送给转换器,转换器转换完成发送给ADC模块,ADC模块禁用硬件触发器,随后模块通知用户,用户获取组状态,模块反馈获取的状态=ADC_STREAM_COMPLETED(),用户禁用群通知,模块反馈给用户,随后用户通知模块。

没有优先级机制-软件排队;

用户启动组通知,模块进行反馈(为组1,2的通知),用户开始组转换,模块指令后给ADC外部转换器发送开始组转换,随后反馈给用户,用户再次开始二组的转换,随后ADC模块对二组转换进行请求,随后给用户反馈。而在此期间,转换器一直在对一组进行转换,随后,一组转换完成,指令发送给ADC模块,ADC模块收到指令后,对转换器发送开始对2组进行转换,随后通知用户一组已经转换完成,用户反馈。

用户再次命令模块对一组进行转换,模块请求转换,反馈给用户,这个时候二组转换完毕,开始对一组进行转换,一直重复下去。

 

软硬件排队机制-软件排队;

用户给模块发送启动组一通知,模块反馈给用户。随后用户给模块发送启动组二的通知,模块反馈。随后开始转换。模块收到指令以后对转换器发送指令,开始组一的转换。然后反馈用户。随后用户发送开始组二转换的指令给ADC模块,ADC模块请求二组转换,反馈给用户,此期间一组一直在进行转换,一组转换完成,转换器将指令发送给模块,模块收到指令,发送给转换器,要求开始进行二组转换,随后通知用户,用户进行反馈。

用户命令开始进行一组转换,模块收到命令,暂停对2组的转换。开始对一组进行转换,随后请求对二组进行转换,对用户进行反馈。转换器转换完成,给模块反馈,模块重新开始对二组进行转换,随后给用户一组的通知,用户反馈,随后二组转换成功,模块收到指令后通知用户,用户反馈。

硬件优先机制,硬件队列。

用户发送启动一组启动通知指令到ADC模块,随后反馈,反馈后发送二组启动通知指令并等待反馈,模块进行反馈,反馈到用户,随后用户启动一组的硬件触发器,模块收到指令发送到硬件触发器并等待触发,随后反馈给用户。用户对模块发送开始组转换的命令,模块收到命令,对外部转换器发送开始二组转换的命令,在这个期间2组正在进行转换,随后,当硬件触发器触发一组给ADC转换器的时候,ADC转换器暂停2组的转换,开始进行一组的转换,随后重新开始2组的转换,把转换完成的一组重新发给模块,在通知用户,用户得知进项反馈,随后把转换完成的二组重新发给模块,模块通知用户,得知后反馈给模块。

软硬件优先级机制-软硬件排队

用户对模块发送启用组通知的指令,为组1,2,3,4启用组通知,随后反馈,

用户对模块发送启动硬件触发器,模块收到以后,发送启动组一的硬件触发器,随后模块反馈给用户。用户给模块发送开始组转换的命令,ADC模块接收到命令,发送开始二组的组转换命令给ADC外部转换器。随后反馈给用户。再次期间2组正在进行转换。随后用户发出组转换的指令给ADC模块,ADC模块对3组进项转换请求,此时硬件触发器一组进行触发指令给外部转换器,随后转换器暂停2组的转换开始进行一组的转换,随后用户发送开始组转换的命令给ADC模块,ADC模块收到后进行4组的转换请求,反馈给用户,随后一组转换完成的发送给ADC模块随后继续或者重启二组的转换,随后ADC模块发送通知用户,用户得知进行反馈,随后完成2组的转换开始4组的转换,随后ADC模块发送2组的状态通知给用户,用户反馈。随后完成4组的转换,开始3组的转换,随后将4组的状态发送给用户,用户进行反馈,最后完成3组的转换,3组发送给用户,用户进行反馈。

 

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值