# 项目名称：Adc_HwTrig_Demo

---
## 功能描述

本示例用于演示 MCAL Adc 模块的配置和使用:

- **Adc**: 
  - 本示例中展示了在同一ADC中混合使用软件触发和硬件触发通道组的情况。
  - 本示例中配置了两个通道组，一个通道组为硬件触发，另一个通道组为软件触发。 各通道组的详细信息如下：
  - 
  |通道组名称|传输类型|触发类型|转换和访问模式|通道列表|
  |----|----|----|----|----|
  |SwTrigGroup|中断|软件|连续转换和循环流访问|ADC0_SE0, ADC0_SE1, PMC VREF, TEMP, VREFH|
  |HwTrigGroup|中断|硬件|单次转换和单次访问|ADC0_SE0, ADC0_SE1, PMC VREF, TEMP, VREFH|

  - PTD5配置为GPIO输出，PTB5配置为TMU_IN0用于触发ADC0硬件触发Group转换。PTD5与PTB5短接，作为硬件触发通道组的触发信号。PTB4 输出一次脉冲信号时，ADC0 硬件触发Group将进行一次转换。

- **Adc_HwTrig_Demo硬件连接需求**
  | 功能 | MCU 引脚 | EVB 插针|
  | ---- | ------- | ------ |
  | GPIO | PTB4 | H2_3P |
  | TMU_IN0 | PTB5 | H2_2P |
    **PTB4(H2_3P) and PTB5(H2_2P) short connect.**

复位后，初始化ADC模块，为所有通道组设置结果缓存区，为需要的通道组启用通知并启动所有通道组进行转换。各通道组的操作如下：
- **SwTrigGroup**：由软件触发，在while(1)中读取结果，当硬件触发组被禁用时，自动重新启动该通道组转换。
- **HwTrigGroup**：在while(1)中启用该通道组，并产生触发信号触发转换，在回调通知中读取结果并停止该通道组。
- 对各通道组的SE0_ADCH0和TEMP通道转换结果进行相互检查。

本示例代码定义了以下变量来观察采集结果和程序运行状态：

- **保存ADC转换结果的变量**
- `Adc0_SwTrigGroupResultPhys`：用于存储SwTrigGroup组的转换结果，单位为毫伏。
- `Adc0_HwTrigGroupResultPhys`：用于存储HwTrigGroup组的转换结果，单位为毫伏。
- **计数转换次数的变量**
- `Adc0_SwTrigGroupConCompCnt`：计数完成的转换次数
- `Adc0_HwTrigGroupConCompCnt`：计数完成的转换次数
- `Adc0_HwTrigGroupTrigCnt`：计数硬件触发事件的次数
- `Adc0_ResultNotMatchCnt`：计数SwTrigGroup和HwTrigGroup在同一输入通道上的转换结果不匹配的次数。
- `Adc0_HwTrigTimeNotMatch`：标志位，指示硬件触发次数是否与HwTrigGroup转换次数是否一致：0表示一致，1表示不一致。

- **各通道的转换结果预期值**（VDD供电电压为5V）：

|通道|描述|预期值 (mV)|
|----|----|----|
|ADC0_SE0~ADC0_SE1|ADC0 外部输入通道 |外部输入值  |
|PMC VREF|PMC 1.2V参考电压  |1200  |
|VREFH|VREFH电压值|5000  |
|TEMP|MCU内部温度传感器  |不确定值，与环境温度相关|

**注意**：在本示例中，MCU由5V供电。如果需要使用3.3V电源，请自行修改ADC转换结果的物理值计算。

---


## 操作步骤

+ ***步骤1***：使用 YCT 工具打开示例的配置工程文件（`Adc_HwTrig_Demo.yct`），根据您的需求配置工具链（默认使用 VS Code + GCC）。
+ ***步骤2***：生成代码，如果需要，您可以更改配置（以适应您自己的硬件设计），如果这样做，请确保所有修改都正确无误，并且在生成代码之前没有错误存在。
+ ***步骤3***：根据您的配置，使用相应的工具（VS Code/IAR/Keil IDE）打开生成的工程。
+ ***步骤4***：编译生成的工程，打开 EVB 电源并通过可用的调试器（如 J-Link 调试探针）将编译好的可执行文件下载到 EVB。
+ ***步骤5***：调试、运行示例代码。
  
---


## 硬件需求
+ **EVB**: YTM32B1MD1-EVB-Q100-Rev.A/B
+ **调试器**: J-Link HW v9 或更高版本，安装了 YUNTU `YTM32B1MD1` 补丁（支持包）。

***注意***: 请确认EVB底部的版本号，如果是***YTM32B1MD1-EVB-Q100-Rev.A***，`Icu_Demo`请使用以`_RevA`结尾的样例工程。

---

## 软件需求

+ **配置和代码生成工具**
  + **MCAL**: Yuntu Config Tool(YCT) v2.7.0 或更高版本
+ **编译器工具链**
  + **GCC**: GNU GCC v10.3 或更高版本
  + **Keil/MDK**: ARM Keil/MDK v5.36 或更高版本(编译器推荐使用`armclang v6.18.2`)
  + **IAR**: IAR v9.50 或更高版本
  + **VS Code**: Microsoft Visual Studio Code IDE v1.76 或更高版本（需要 C/C++ 支持，GNU 工具链，CMake v3.25，ninja，Cortex-Debug 扩展安装）
+ **Debugger driver**
    + **J-Link**: SEGGER J-Link v7.82 或更高版本，需要安装 YUNTU `YTM32B1MD1` 补丁（支持包）。
    + **Ozone Debugger tool**: SEGGER Ozone v3.28 或更高版本。

    ***注意***: 需要安装 **YTM32B1MD1** 补丁，补丁可通过 **YCT** 工具或联系 ***云途 销售/FAE 团队***获取.

---