主题中讨论的其他器件:C2000WARE
工具/软件:Code Composer Studio
我有一个新项目、正在使用 F280049C LaunchPad。 我也不熟悉 C2000微控制器。 我的 ADC 测量有问题。 它始终返回4095作为原始 ADC 值(来自此函数- ADC_readResult (ADCBRESULT_base、ADC_SOC_NUMBER0);)。 当我测量一系列通道以及来自板载温度传感器的通道时、我会得到这种结果。
我的代码是基于 ADC_ex3_temp_sensensor 示例的位、该示例位于我的系统的 C2000 ware 文件夹(C:\ti\C2000Ware_2_00_00_02_Software\driverlib\f28004x\examples\ADC)。 此示例还会在每次运行时提供相同的值。 我查看了我的所有代码、但未找到原因。
温度测量的初始化代码如下:
/**< ADC 测量器件温度*/
SYSCTL_resetPeripheral (SYSCTL_PERIPH_RES_ADCB);
ADC_DisableConverter (ADCB_BASE);
/**<此示例中使用的中断被重新映射到此文件中的 ISR 函数。 *
interrupt_register (INT_ADCB1、&adcBIISR);
/**<将 VREF 设置为内部*/
ADC_setVREF (ADCB_BASE、ADC_reference_external、ADC_reference_3_3V);
/**<将 ADCCLK 分频器设置为/4 */
ADC_setPrescaler (ADCB_BASE、ADC_CLK_DIV_4_0);
/**<将脉冲位置设置为晚期*/
ADC_setInterruptPulseMode (ADCB_BASE、ADC_PULSE_END_of _CONV);
/**<启动 ADC、然后延迟1ms *
ADC_enableConverter (ADCB_BASE);
DEVICE_DELAY_US (1000);
/**<配置 ADCB 的 SOC */
/**<SOC0将转换引脚 C0、C1、C2、C3、其采样窗口为10个 SYSCLK 周期。 *
ADC_setupSOC (ADCB_BASE、ADC_SOC_NUMBER0、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN14、45);
/**<设置 SOC1以设置中断1标志。 启用中断并使*/
/**<确保其标志已清除。 *
ADC_setInterruptSource (ADCB_BASE、ADC_INT_NUMBER1、ADC_SOC_NUMBER0);
ADC_enableInterrupt (ADCB_BASE、ADC_INT_NUMBER1);
ADC_clearInterruptStatus (ADCB_BASE、ADC_INT_NUMBER1);
ADC_enableContinuousMode (ADCB_BASE、ADC_INT_NUMBER1);
//
//启用温度传感器并为其加电500us
//
ASysCtl_enableTemperatureSensor();
DEVICE_DELAY_US (500);
INTERRUPT_ENABLE (INT_ADCB1);
ADC_setInterruptSOCtrigger (ADCB_BASE、ADC_SOC_NUMBER14、ADC_INT_SOC_TRIGGER_NONE);
ADC_forceSOC (ADCB_BASE、ADC_SOC_NUMBER0);
测量 ADC 通道序列的初始化代码如下:
/**<模块 c 上电压和电流的 ADC 测量值*
SYSCTL_resetPeripheral (SYSCTL_PERIPH_RES_ADCC);
ADC_DisableConverter (ADCC_BASE);
/**<将 VREF 设置为内部*/
ADC_setVREF (ADCC_BASE、ADC_reference_internal、ADC_reference_3_3V);
/**<将 ADCCLK 分频器设置为/4 */
ADC_setPrescaler (ADCC_BASE、ADC_CLK_DIV_4_0);
/**<将脉冲位置设置为晚期*/
ADC_setInterruptPulseMode (ADCC_BASE、ADC_PULSE_END_of _CONV);
/**<配置 ADCA 的 SOC */
/**<SOC0将转换引脚 C0、C1、C2、C3、C4、 C5、采样窗口为10个 SYSCLK 周期。 *
ADC_setupSOC (ADCC_BASE、ADC_SOC_NUMBER0、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN0、10);
ADC_setupSOC (ADCC_BASE、ADC_SOC_number1、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN1、10);
ADC_setupSOC (ADCC_BASE、ADC_SOC_number2、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN2、10);
ADC_setupSOC (ADCC_BASE、ADC_SOC_Number3、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN3、10);
ADC_setupSOC (ADCC_BASE、ADC_SOC_Number4、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN4、10);
ADC_setupSOC (ADCC_BASE、ADC_SOC_Number5、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN5、10);
ADC_setSOCPriPriority (ADCC_BASE、ADC_PRI_All_ROUND);
/**<设置 SOC1以设置中断1标志。 启用中断并使*/
/**<确保其标志已清除。 *
ADC_enableContinuousMode (ADCC_BASE、ADC_INT_NUMBER1);
ADC_setInterruptSource (ADCC_BASE、ADC_INT_NUMBER1、ADC_SOC_Number5);
ADC_clearInterruptStatus (ADCC_BASE、ADC_INT_NUMBER1);
ADC_enableInterrupt (ADCC_BASE、ADC_INT_NUMBER1);
/**<此示例中使用的中断被重新映射到此文件中的 ISR 函数。 *
interrupt_register (INT_ADCC1、&adcCIR);
INTERRUPT_ENABLE (INT_ADCC1);
ADC_setInterruptSOCtrigger (ADCC_BASE、ADC_SOC_Number5、ADC_INT_SOC_TRIGGER_NONE);
/**<启动 ADC、然后延迟1ms *
ADC_enableConverter (ADCC_BASE);
DEVICE_DELAY_US (1000);
ADC_forceSOC (ADCC_BASE、ADC_SOC_NUMBER0);
ADC_forceSOC (ADCC_BASE、ADC_SOC_number1);
ADC_forceSOC (ADCC_BASE、ADC_SOC_number2);
ADC_forceSOC (ADCC_BASE、ADC_SOC_Number3);
ADC_forceSOC (ADCC_BASE、ADC_SOC_Number4);
ADC_forceSOC (ADCC_BASE、ADC_SOC_Number5);
我还没有将我的硬件连接到 LaunchPad。
请注意问题可能是什么、解决方案是什么。
谢谢