7.DAVE APP剖析
使用DAVE APP完成一个应用,还调试了一把,现在可以揭开盖子看看APP的组成了。
一个DAVE APP:
- 向用户提供API
- 被内部连接在一起的硬件资源为中心环绕
- 自行完成用例
- 或者,成为APP层级的一部分。
DAVE APP图例
图1:一个APP的剖面图
构建一个应用
图2:DAVE APP的堆叠
在上图中,BLDC马达控制APP聚合了2种硬件资源,一种用于位置检测,另一种用于inverter switches所需的PWM生成。它需要追踪实时马达数据,传送给一个分析工具。因此它使用了TRACE APP的服务。TRACE APP使用了UART APP把追踪数据传送给运行在PC上的分析工具。即:BLDC APP的API调用了TRACE APP的API,而后者调用了UART APP的API。
BLDC和UART APP都需要CLOCK APP来配置时钟资源。
在工程中添加APP后,其API并不能立即被使用,你还需要使用GUI配置它,并让DAVE生成代码。这样才能产生源代码文件,APP提供的API就位于其中。
代码生成
代码生成,就是根据你键入的配置信息生成APP源代码库的过程。
为工程加入一个APP后,DAVE创建一个基于数据模型的数据容器,来容纳该APP的所有数据。多个APP需要多个数据容器。
当你使用GUI配置APP时,你实际上是在配置APP运行所需的资源。你的配置会进入APP的数据容器。当生成代码时,DAVE的代码引擎拾取容器中的数据,使用C语言创建包含配置信息的数据结构。该数据结构将由你的应用代码传送给APP的初始化API。
从工程中移除APP
有时工程中添加了错误的APP,或者APP不再需要了。DAVE提供了如下2种选项来移除APP。
- 移除被选中的APP以及依赖树中其上的所有APP
- 移除被选中的APP以及依赖树中其上和其下的所有APP
可以通过下述方法移除APP:
- 在APP依赖树视图中选中APP,按Del键。
- 在APP依赖树视图中选中APP,点右键,选择‘Remove’
- 在APP依赖视图中选中APP,按Del键。
- 在APP依赖视图中选中APP,点右键,选择‘Remove’
移除APP时,会弹出一个窗口提示用户选择移除选项
图3:移除选项对话框
DAVE APP源代码结构
一个APP:
- 生成<app_name>_conf.c和可选的<app_name>_conf.h
- 从模板中拷贝事务逻辑,生成<app_name>.h和<app_name>.c
- 例如,gpio_conf.c(生成的),gpio_h和gpio.c(拷贝的,不是生成的)
APP信号连接-获取芯片中合适的资源
注意看下图
图4:外设之间的连接
一个CCU4外设有4个独立的定时器,图4展示了其中的2个。
Microcontroller-A把CC40的TIMER_STATUS输出连接到ADC-2的TRIGGER,把CC41的输出连接到P5.2引脚。
Microcontroller-B把CC40的TIMER_STATUS输出连接到DMA,把CC41的输出连接到ADC-0。
想象这个方案。我们有了一个实现定时器服务管理的APP,可称之为TIMER APP。类似地,可以利用ADC功能开发一个ADC APP。
这里并不指定APP使用的硬件资源,也就是说,TIMER APP只是要求一个CC4,但没有指明是CC40还是CC41.
现在,假设你想创建一个如下应用:
图5:使用未指定硬件的APP创建的应用
在Microcontroller A和B上,这个应用都可以正常运行。通配符 ’*‘ 表示 “这些APP不需要指定CC4和ADC里的哪个实例,只要选择好一个实例给它们连接上就可以”
在上面的应用中,把2个信号连接起来,就是告诉DAVE在Microcontroller 上分配一个CC4片(指CC40~CC43其中之一),用于与一个ADC的实例连接。后面会细说。
如果在Microcontroller A上做这个应用,DAVE会分配CC40和ADC2。而在Microcontroller B上,分配的可能是CC41和ADC0。根据信号连接情况,DAVE会自动分配合适的资源。
记住,如果你在一款XMC MCU上实现了一个应用,想把这个应用移植到另一款XMC MCU上,你不必再去读参考手册。你要做的只是使用DAVE的移植功能,把工程移植到另一款MCU上。DAVE会评估移植的可行性。如果可行,会自动选择适合你的应用的外设。
APP信号连接-外设之间的连接编程
这是另一幅图
图6:可编程的顶层连接
图6展示了CC40的TIMER_MATCH_EVENT信号有2个连接目标 - DMA,和一个NVIC节点。寄存器CC40EVENTSEL的TM_DEST位决定了连接目标。
现在看看这个
图7:可编程的顶层连接
把CCU APP的TIMER_MATCH_EVENT信号连接到INTERRUPT APP的INTERRUPT信号时,DAVE自动计算要赋给TM_DEST位的值。这些位域在 <app_name>_Init 接口函数中编程。<app_name>_Init 接口函数从<app_name>_conf.c中的配置数据结构中取值。
作为最终用户,你永远不用操心这些与多路复用、多路分配和切换相关的顶层内部连接的编程。DAVE和APP会精确的做好这些。
HW Connectivity视图
向工程中添加了必要的APP之后,切换到HW Connectivity视图,可以快速进行APP与硬件资源之间的连接。
让我们用生成PWM信号的APP操练一下。新建一个工程,添加PWM APP。
图8:切到HW connectivity视图
图9:HW Connectivity视图
在图9中可以看到CLOCK_XMC4、GLOBAL_CCU4和PWM这些APP的硬件资源的连接。
图9展示了PWM APP建立的连接。你可以通过编程来修改它们,从而设定你自己的“预先建立”连接。
继续。向工程添加一个INTERRUPT APP。然后把PWM APP的compare match信号连接到INTERRUPT APP的NVIC节点信号。保存。
图10:用户连接
注意观察连接线的颜色:用户建立的连接的颜色与APP自动建立的连接的颜色是不同的。