主题中讨论的其他器件: C2000WARE、 SysConfig
工具与软件:
你好。
我正在使用 TMS320F280025C 上的温度传感器。
我的理解是、以下程序在 while 语句中循环执行、直到 AD 转换完成、然后在转换完成时退出循环并开始计算。
但是、当我调试程序时、程序从不会退出 while 循环。
下面是使用温度传感器和 board.c 中 ADC 部分设置的函数
我忽视了什么吗?
提前感谢您的帮助。
函数↓
int getThermalE (SSCMGParametar* aPara){
易失性 uint16_t Tempe_ADCResult = 0;
ADC_forceMultipleSOC (ADC_2_base、ADC_FORCE_SOC0);
while (ADC_getInterruptStatus (ADC_2_base、ADC_INT_Number3)=false){
}
ADC_clearInterruptStatus (ADC_2_base、ADC_INT_Number3);
Tempe_ADCResult = ADC_readResult (ADC_2_Result_BASE、ADC_SOC_NUMBER0);
int16_t Tempe = ADC_getTemperatureC (Tempe_ADCResult、3.3f);
if (TRUE =ADC_getInterruptOverflowStatus (ADC_2_base、ADC_INT_Number3))
{
ADC_clearInterruptOverflowStatus (ADC_2_base、ADC_INT_Number3);
ADC_clearInterruptStatus (ADC_2_base、ADC_INT_Number3);
}
返回温度;
}
board.c↓
void adc_2_init (){
//
// ADC 初始化:写入 ADC 配置并为 ADC 加电
//
//设置模拟电压基准选择和 ADC 模块的失调电压修整。
//此功能将模拟电压基准设置为内部(基准电压为1.65V 或2.5V)或外部(对于 ADC)
//它与 ASysCtl API 相同。
//
ADC_setVREF (ADC_2_base、ADC_reference_internal、ADC_reference_3_3V);
//
//配置模数转换器模块预分频器。
//
ADC_setPrescaler (ADC_2_base、ADC_CLK_DIV_2_0);
//
//设置转换结束脉冲的时序
//
ADC_setInterruptPulseMode (ADC_2_base、ADC_PULSE_END_OF_CONV);
//
//为模数转换器内核加电。
//
ADC_enableConverter (ADC_2_BASE);
//
//延迟1ms 以允许 ADC 有时间上电
//
DEVICE_DELAY_US (5000);
//
// SOC 配置:设置 ADC ePWM 通道和触发设置
//
//禁用 SOC 突发模式。
//
ADC_disableBurstMode (ADC_2_base);
//
//设置 SOC 的优先级模式。
//
ADC_setSOCPriPriority (ADC_2_base、ADC_PRI_ALL_ROUND_Robin);
//
//开始转换0配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号:0
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN12
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_NUMBER0、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN12、8u);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_NUMBER0、ADC_INT_SOC_TRIGGER_NONE);
//
//开始转换1配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号:1.
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN2.
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_number1、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN2、8U);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_Number1、ADC_INT_SOC_TRIGGER_NONE);
//
//开始转换2配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号:2.
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN4.
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_number2、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN4、8U);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_Number2、ADC_INT_SOC_TRIGGER_NONE);
//
//开始转换3配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号:3
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN6
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_Number3、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN6、8U);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_Number3、ADC_INT_SOC_TRIGGER_NONE);
//
//开始转换4配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号:4
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN7.
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_Number4、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN7、8U);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_Number4、ADC_INT_SOC_TRIGGER_NONE);
//
//开始转换5配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号:5.
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN8
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_Number5、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN8、8U);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_Number5、ADC_INT_SOC_TRIGGER_NONE);
//
//开始转换6配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号:6
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN14.
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_NUMBER6、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN14、8U);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_NUMBER6、ADC_INT_SOC_TRIGGER_NONE);
//
//开始转换7配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号: 7.
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN15.
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_NUMBER7、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN15、8u);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_NUMBER7、ADC_INT_SOC_TRIGGER_NONE);
//
// ADC 中断1配置
// Source:adc_soc_NUMBER0
//中断源:已启用
//连续模式:禁用
//
//
ADC_setInterruptSource (ADC_2_base、ADC_INT_number1、ADC_SOC_NUMBER0);
ADC_clearInterruptStatus (ADC_2_base、ADC_INT_number1);
ADC_disableContinuousMode (ADC_2_base、ADC_INT_number1);
ADC_enableInterrupt (ADC_2_base、ADC_INT_number1);
}