主题中讨论的其他器件:SysConfig
Champs,
客户正在开发一种非常成本敏感且空间受限的应用、并尝试将所有功能压缩到一个更小的封装中。 我们知道 ADC 和 COMP 应该使用单独的引脚、但是它们尝试在单个引脚上对它们进行多路复用、并且这两个引脚似乎都可以正常工作。 Question:
1.我们是否看到这种使用有任何问题?
2.这些问题可能是什么? 有什么需要注意的? 完成附属品后、我看不到任何会阻止此类活动的东西(除了 SysConfig 不让我们这样做、但一切都通过编程方式工作)
更具体地说,它们使用 PA27 (A0_0和 COMP0_IN0-), ADC 以序列模式运行,对多个通道进行采样,包括一个与 COMP 共享的通道,关闭 VDDA 作为基准(3.3V )并使用 DMA。
以下是他们使用的配置代码:
静态 常量 DL_ADC12_ClockConfig gADC12_0ClockConfig ={
.clockSel = DL_ADC12_CLOCK_SYSOSC、
.diveRatio = DL_ADC12_CLOCK_Division_4、
.freqRange = DL_ADC12_CLOCK_FREQ_RANGE_24_TO_32、
};
DL_ADC12_RESET (ADC12_0_INST);
DL_ADC12_enablePower (ADC12_0_INST);
DL_ADC12_setClockConfig (ADC12_0_INST、(DL_ADC12_ClockConfig *)&gADC12_0ClockConfig);
DL_ADC12_initSeqSample (ADC12_0_INST、
DL_ADC12_REPEATE_MODE_DISABLED、DL_ADC12_SAMPLING_SOURCE_AUTO、DL_ADC12_TRIG_SRC_SOFTWARE
DL_ADC12_SEQ_START_ADDR_00、DL_ADC12_SEQ_END_ADDR_03、DL_ADC12_SAMP_CONV_RES_12_BIT、
DL_ADC12_SAMP_CONV_DATA_FORMAT_UNsigned);
DL_ADC12_configConversionMem (ADC12_0_INST、ADC12_0_ADCMEM_0、
DL_ADC12_INPUT_CHAN_2、DL_ADC12_REFERY_VOLTAGE_VDDA、DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0、DL_ADC12_AVERAGE_MODE_DISABLED
DL_ADC12_BURN_OUT_SOURCE_DISABLED、DL_ADC12_TRIGGER_MODE_AUTO_NEXT、DL_ADC12_Windows_COMP_MODE_DISABLED);
DL_ADC12_configConversionMem (ADC12_0_INST、ADC12_0_ADCMEM_1、
DL_ADC12_INPUT_CHAN_3、DL_ADC12_REFERY_VOLTAGE_VDDA、DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0、DL_ADC12_AVERAGE_MODE_DISABLED
DL_ADC12_BURN_OUT_SOURCE_DISABLED、DL_ADC12_TRIGGER_MODE_AUTO_NEXT、DL_ADC12_Windows_COMP_MODE_DISABLED);
DL_ADC12_configConversionMem (ADC12_0_INST、ADC12_0_ADCMEM_2、
DL_ADC12_INPUT_CHAN_7、DL_ADC12_REFERY_VOLTAGE_VDDA、DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0、DL_ADC12_AVERAGE_MODE_DISABLED
DL_ADC12_BURN_OUT_SOURCE_DISABLED、DL_ADC12_TRIGGER_MODE_AUTO_NEXT、DL_ADC12_Windows_COMP_MODE_DISABLED);
DL_ADC12_configConversionMem (ADC12_0_INST、ADC12_0_ADCMEM_3、
DL_ADC12_INPUT_CHAN_0、DL_ADC12_REFERY_VOLTAGE_VDDA、DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0、DL_ADC12_AVERAGE_MODE_DISABLED
DL_ADC12_BURN_OUT_SOURCE_DISABLED、DL_ADC12_TRIGGER_MODE_AUTO_NEXT、DL_ADC12_Windows_COMP_MODE_DISABLED);
DL_ADC12_setPowerDownMode (ADC12_0_INST、DL_ADC12_POWER_DOWN_MODE_MANUAL);
DL_ADC12_setSampleTime0 (ADC12_0_INST、160);
DL_ADC12_enableDMA (ADC12_0_INST);
DL_ADC12_setDMASamplesCnt (ADC12_0_INST、4);
DL_ADC12_enableDMATrigger (ADC12_0_INST、DL_ADC12_DMA_MEM3_RESULT_LOADED);
DL_ADC12_clearInterruptStatus (ADC12_0_INST、(DL_ADC12_INTERRUPT_DMA_DONE));
DL_ADC12_enableInterrupt (ADC12_0_INST、(DL_ADC12_INTERRUPT_DMA_DONE));
DL_ADC12_enableConversions (ADC12_0_INST);
比较器初始化代码:
/* COMP 的定义*/
#定义 COMP_INST COMP0
#定义 COMP_INST_INT_IRQN COMP0_INT_IRQn
/* COMP DACCODE0的定义*/
#定义 COMP_DACCODE0 (144)
/* COMP 的 GPIO 配置*/
#定义 GPIO_COMP_IN0N_PORT (GPIOA)
#定义 GPIO_COMP_IN0N_PIN (DL_GPIO_PIN_27)
#定义 GPIO_COMP_IOMUX_IN0N (IOMUX_PINCM60)
#定义 GPIO_COMP_IOMUX_IN0N_FUNC (IOMUX_PINCM60_PF_UNCONNECTED)
/* COMP 初始化*/
静态 常量 DL_COMP_Config gCOMPConfig ={
.channelEnable = DL_COMP_ENABLE_CHANNEG、
.mode = DL_COMP_MODE_ULP、
.negChannel = DL_COMP_IMSEL_CHANNEL_0、
.posChannel = DL_COMP_IPSEL_CHANNEL_0、
.hysteresis = DL_COMP_hysteresis_20、
.POLARITY = DL_COMP_POLICY_NON_INV
};
静态 常量 DL_COMP_RefVoltageConfig gCOMPVRefConfig ={
.mode = DL_COMP_REF_MODE_STATIC、
.source = DL_COMP_REF_SOURCE_VDDA_DAC、
.terminalSelect = DL_COMP_REF_ENTER_SELECT_POS
.controlSelect = DL_COMP_DAC_CONTROL_SW、
.inputSelect = DL_COMP_DAC_INPUT_DACCODE0
};
DL_COMP_RESET (COMP_INST);
DL_COMP_enablePower (COMP_INST);
delay_cycles (power_startup_delay);
DL_COMP_init (COMP_INST、(DL_COMP_Config *)&gCOMPConfig);
DL_COMP_refVoltageInit (COMP_INST、(DL_COMP_RefVoltageConfig *)&gCOMPVRefConfig);
DL_COMP_setDACCode0 (COMP_INST、COMP_DACCODE0);
DL_COMP_enableInterrupt (COMP_INST、(DL_COMP_INTERRUPT_OUTPUT_EDGE | DL_COMP_INTERRUPT_OUTPUT_EDGE_INV));
DL_COMP_ENABLE (COMP_INST);
谢谢!
迈克尔