我尝试合并两个不同的示例代码。 我打算测量我的传感器值,因此我使用了 ADC 示例代码(msp430x09x_apol_adc_07.c )。 它工作正常。 读取传感器值后、我想测量内置的温度传感器值。 尽管我使用了示例代码(msp430x09x_apol_adc_06.c apol_adc、采样温度并转换为 oC)、但无法测量温度传感器值。 我认为 在测量传感器值后清除 ADC 寄存器 APINT = 0x00;//清除 ADC-DAC-REG,但没有变化。 我得到的温度传感器结果 为 degC=3或5。 首先、我要分别测量我的传感器值和内置温度传感器值。
我不想同时测量我的传感器值和内置温度传感器值。
我已经尝试通过 MSP-FET 闪存仿真工具和 MSP-TS430L092 目标板使用 IAR Embedded Workbench 进行调试。
我将我的代码放在下面。
#include
int ChannelA2;
INT 结果;
挥发性短整型 degC;
int main (空)
{
WDTCTL = WDTPW + WDTHOLD;//停止 WDT
//开始配置 A-POOL 寄存器
APCTL = 0;//清除 APCTL 寄存器
APCNF = CMPON+DBON+CONVON+EOCBU+APREFON+CLKSEL_MCLK;//配置 A-POOL 元素,选择 MCLK 作为 A-POOL 时钟源
APINT = 0x00;//清除 ADC-DAC-REG
APVDIV=A2DIV_1;
APIE |= EOCIE;//为转换结束启用中断
APTRIM = REFTSEL;
APVDIV = TMPSEN;//启用温度传感器
P1DIR|=BIT4;
while (1)
{
APIE = EOCIE;//为转换结束启用中断
APINT = 0x00;//清除 ADC-DAC-REG
APCTL = OSEL+CBSTP+RUNSTOP+APNSEL_2+APPSEL_5;//设置通道并开始转换
_bis_SR_register (LPM0_bits + GIE);//启用中断后进入 LPM0
ChannelA2 = APINT;//获取 A2的结果
if (ChannelA2 >85){
APCTL = OSEL+oden+OSWP+APPSEL_4+APNSEL_5;//设置通道并开始转换-+oden+
APINT = 0x00;//清除 ADC-DAC-REG
APIFG = 0;
APCTL |= CBSTP+SBSTP+RUNSTOP;
_bis_SR_register (LPM0_bits + GIE);//启用中断后进入 LPM0
结果= APINT;
degC =(((Result-179)*125)/58)+ 30;//请参阅数据表以了解精度和偏移规格
if (degC>18 & degC<30){
P1OUT|=BIT4;
}
}
否则{
}
__no_operation();//在此处放置断点
}
}
//a_pool 中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=APOOL_vector
_interrupt void a_pool (void)
#Elif defined (_GNU_)
void __attribute__((interrupt (APOL_vector)) a_pool (void)
其他
错误编译器不受支持!
#endif
{
APIFG = 0;//清除中断标志
_BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出活动状态以对下一个通道进行采样
}
请帮助我修复错误