• 279查看
  • 0回复

[芯片硬件] 电子技术(十一)——VADC

[复制链接]

  • TA的每日心情
    无聊
    1-7-2015 18:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 9-1-2024 19:57:53 | 显示全部楼层 |阅读模式

    汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师



    一、VADC概述


    电子技术(十一)——VADCw1.jpg

    添加图片注释,不超过 140 字(可选)

    模数转换器VADC使用逐次逼近原理将模拟电压信号转换为数字信号,并将转换完成的结果存入特定的结果寄存器,以供用户读取。如上图所示为VADC架构原理图:VADC模块具有两个转换器组,每个转换器组都有属于自身的仲裁器以及转换器。其中,仲裁器用于对扫描请求源、队列请求源以及背景请求源提出的转换请求进行仲裁,当三个请求源同时发生时,只对优先级最高的请求源进行响应。而对于转换器,顾名思义,使用逐次逼近原理将模拟电压信号转换为数字信号值,并将结果放入响应的结果寄存器。

    1.清除ENDINIT保护,然后使能VADC模块时钟,最后打开ENDINIT保护。

    2.配置VADC模块,由于VADC模块中包含有多个转换器组,所以本步骤对所有转换器组有效。

    3.配置模数转换器组G0以及相应的转换通道,并启用同步采样,选择转换器组G0作为从机。

    4.配置模数转换器组G1,启用同步采样,选择转换器组G1作为主机。

    二、VADC示例


    本节提供了 VADC 模块的代码示例,以概述核心功能。 代码示例实现了事件触发的模数转换。 结果存储为 12 位数字值并触发结果服务请求。VADC 包含多个 ADC 组 (G0 … G3)。 每组通过一个多路复用器连接到多达 8 个模拟输入通道。 以下代码示例初始化其中一组并使用一个静态分配的模拟通道作为输入。

    代码示例通过使用后台源实现模数转换。 转换可以在自动扫描模式下连续运行,也可以由事件触发,如下例所示。 如果需要在特定时间执行转换,这很有用。 最近一次转换的结果在全局结果寄存器 GLOBRES 中是可接受的。 每次转换后都会激活结果服务请求。 初始化按以下顺序进行: 1. 加载全局 VADC 模块寄存器 2. 使能模数转换器 0 (G0) 3. 选择 G0 的通道 0 作为模拟输入 4. 初始化转换结果服务请求 5. 启动 第一次转换

    初始化 VADC 模块的步骤描述:

      (第 1 行)重置 ENDINIT 以访问受 ENDINIT 保护的寄存器。  (另请参阅 SCU 一章中的 ENDINIT 保护)。

      (第 2 行)模块的使能控制,在时钟控制寄存器 CLC 中。

      (第 3 行)读回(必须定义虚拟变量)。 读取过程确保完成第 2 行的写入过程。

      (第 4 行)设置 ENDINIT 以再次锁定受保护的寄存器。

      (第 5 行)将组 0 设置为正常操作模式。 这将激活组 0 的转换器。

      (第 6 行)将模拟内部时钟的分频因子加载到全局配置寄存器 GLOBCFG 中(另请参见图 27-7)。 设置 DIVWC[15] 以启用写访问并通过设置 SUCAL[31] 启动启动校准。 校准是获得精确转换所必需的。

      (第 7 行)该行启用仲裁槽 2,即示例使用的后台扫描源槽。  (另请参阅仲裁优先级寄存器 GxARBPR (x = 0 - 3) )

      (第 8 行)此行设置 RESTBS[20],因此组 0 输入通道 0 的每个转换结果现在都存储在全局结果寄存器 GLOBRES 中。  (另见 GxCHCTRy)

      (第 9 行)该行选择组 0 的输入通道 0 作为背景扫描序列的一部分。  (另见 BRSSELx (x = 0 - 3) )。

      (第 10 行)通过设置 ENGT[0..1]=01,可以为第 10 行中启用的每个通道发出转换请求。这里只有通道 0。(另见 BRSMR)(第 11 行)此行启用组 0 服务请求控制寄存器 SRC_VADCG0SR0 中的服务请求并将中断优先级设置为 VADC0INT (1...255) (第 12 行) 调用interruptHandlerInstall 函数(必须先编写该函数,请参阅IR 章节中的中断处理程序示例) 更多细节)。 该函数将中断服务程序 (ISR) 入口地址安装在优先级为 VADC0INT 的中断向量数组中。

      (第 13 行)此命令启用结果中断。 它发生在结果事件之后。

      (第 14 行)等到启动校准(第 6 行开始)完成。

      (第 15 行)设置 LDEV=1 会生成启动转换的加载事件。

       注意:转换结果 ISR 函数原型为: void VADC_SCAN_irq (void); 这可能是您的 ISR 代码;

    Basic Initialization of the VADC: //=========================> Load global module registers

    (1) SCU_vResetENDINIT (0); // Access to ENDINIT-prot. reg.

    (2) VADC_CLC = 0x0000; // Enable module clock and ctrl.

    (3) dummy = VADC_CLC; // Read back ensures write oper.

    (4) SCU_vSetENDINIT (0); // Lock ENDINIT-protected reg.

    //=========================> Enable converter for group 0

    (5) VADC_G0ARBCFG = 0x3; // ANONC = 11, analog converter ON

    (6) VADC_GLOBCFG = (1<<31) /* SUCAL = 1, start-up calib. */ \ |(1<<15) /* DIVWC = 1, enable write */ \ | 0x9; // DIVA = 9 (clock prescaler)

    (7) VADC_G0ARBPR = (1<<26); // AREN2 = 1, enable arb. slot 2 // (= background source)

    (8) VADC_G0CHCTR0 = (1<<20); // RESTBS = 1, global result reg.

    (9) VADC_BRSSEL0 = 0x1; // Select CH0 of group 0 for scan

    (10) VADC_BRSMR = 0x1; // ENGT = 10B, enable conv. req.

    //=========================> Init and install service request

    (11) SRC_VADCCG0SR0 = (1<<10) /* Enable SR node 0, group 0 */ \ |VADC0INT; // Set prio to <VADC0INT>(1..255)

    (12) interruptHandlerInstall (VADC0INT, & VADC_SCAN_irq);

    (13) VADC_GLOBRCR = (1<<31); // SRGEN = 1, result service requ.

    //=========================> Wait for completion of startup cal.

    (14) while((VADC_G0ARBCFG.U & 0x30000000) != 0x20000000); // CALS = 1, CAL = 0: calibr. done //=========================> Start a conversion

    (15) VADC_BRSMR |= (1<<9); // LDEV = 1, generate a load event
    

    该用户从未签到

    发表于 15-3-2025 21:27:01 | 显示全部楼层
    针对您提供的关于VADC(模数转换器)的描述,以下是专业回复:

    关于“清除ENDINIT”:

    VADC中的ENDINIT状态通常表示转换器初始化完成。若要清除此状态,通常需进行复位操作,使VADC回到初始状态,以便重新进行初始化。具体复位操作方式,建议查阅相关硬件手册或开发文档,以确保正确实施。

    总体来说,VADC是汽车电子中重要的模块之一,确保其正常工作对于整车电子系统的稳定性至关重要。

    以上回复供参考,如需更深入的技术交流,欢迎继续探讨。
    回复 支持 反对

    使用道具 举报

    

    该用户从未签到

    发表于 15-3-2025 21:27:01 | 显示全部楼层
    针对您提供的关于VADC(模数转换器)的描述,以下是我的专业回复:

    关于“清除ENDINIT”,在VADC操作中,通常指的是结束初始化操作或清除某种状态标志。在VADC工作过程中,某些情况下需要重置或停止当前操作,这时就需要清除ENDINIT标志。具体步骤需参照相关手册或技术文档,确保正确操作,避免影响VADC的正常工作。建议在进行相关操作时,务必谨慎,确保理解相关原理与步骤。

    以上回复基于我对VADC的基本理解,如有更深入的专业问题,欢迎继续交流。
    回复 支持 反对

    使用道具 举报

    快速发帖

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

    GMT+8, 19-8-2025 15:48 , Processed in 0.434615 second(s), 36 queries .

    Powered by Discuz! X3.5

    © 2001-2013 Comsenz Inc.