您好,
似乎我把头打在墙上,试图让一个简单的程序正常工作。 我开始使用简单的FET140_ADC12_01.C程序,并为连接到2.0 ,2.1 ,2.2 ,2.4 ,2.5 和2.6 的交换机添加了port2中断处理程序。
我正在使用的主板上有连接到{\f2 3.0 },{\f2 3.1 },{\f2 3.2 },{\f2 3.4 }的LED。
我希望ADC中断能以某种频率切换WFP 3.4。 (我不知道使用SHT0_2时ADC需要多长时间)。
当3.0 2.0 ,WFP 3.1 2.1 和2.2 通过键盘短接至地面时,我期待着WFP,WFP,WFP,WFP,3.2 之间的切换。 这在端口2 ISR中完成。
当节目开始时,我预计只有WFP 3.4 的刷新率会被转换为ADC,而WFP 3.0 ,3.1 和3.2 的刷新率会被取消。
意外地,当程序首次启动时,所有P3 GPIO都很高... 目前,WFP 3.4 不能以ADC的速率进行切换。
如果我将WFP 2.0 缩短到地面,我将获得多个WFP 3.0 ,WFP 3.1 和WFP 3.2 ,它们都从高到低。 有时,这会终止程序,但有时P2中断会继续触发,再按几次键。
任何想法都非常感谢…
- Dave
#include <MSP4S.h>
内部主(无效)
{
WDTCTL = WDTPW + WDTHOLD;//停止WDT
ADC12CTL0 = SHT0_2 + ADC12ON;//设置采样时间,打开ADC12
ADC12CTL1 = SHP;//使用采样计时器
P6SEL |= 0x01;// WFP 6.0 ADC选项选择
//诊断
P1DIR |= 0x01;// WFP 1.0 输出
P3DIR |= 0xff;// WFP 3.0 .. WFP 3.3 输出到LED
P3OUT = 0;//所有调试引脚均为低电平
P2DIR &=~0xff;// P2上的所有输入输入
P2IFG &=~0xff;//清除所有标志
P2IES |= 0x77;//设置从高到低的过渡
P2IE |=0x77;//启用中断WFP 2.0 ,1,2,4,5,6
(;;)
{
如果(P2IE和0x77)== 0) // int已触发并在ISR中清除启用,则重新启用
{
P2IFG &=~0xff;//清除int标志。
P2IE |= 0x77;//启用中断
}
如果(ADC12IE & 0x01)// int被触发并在ISR中清除,则重新启用
{
ADC12IFG &=~0xff;//清除所有标志
ADC12IE |= 0x01;//启用中断
ADC12CTL0 || ENC;//已启用转换
ADC12CTL0 |= ADC12SC;//开始采样
}
__bis_sr_register(CPUOFF + GIE);// LPM0,ADC12_ISR或端口2 int将强制退出
}
}
// ADC12中断服务例程
#if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
#pragma vector=port2_vector
__interrupt void port2_isr (void)
#Elif已定义(__GMNU__)
void __attribute__((interrupt (port2_vector)) port2_isr (void)
#否则
错误编译器不受支持!
#endif
{
开关(P2IFG){//中断的原因是什么?
案例0x01://已触发了WFP 2.0
P3OUT ^= 0x01;//将WFP 3.2 LED设置为ON
中断;
案例0x02://已触发了WFP 2.1
P3OUT ^= 0x02;//将WFP 3.2 LED设置为ON
中断;
案例0x04://已触发了WFP 2.2
P3OUT ^= 0x04;//将WFP 3.2 LED设置为ON
中断;
默认值://尚未处理的任何其他中断原因?
;//然后不执行任何操作
}
P2IFG &=~0x77;//清除int标志
P2IE &=~0x77;//禁用中断
__BIC_SR_REGISTER_ON_EXIT (CPUOFF);//从0 (SR)清除CPUOFF位
}
// ADC12中断服务例程
#if defined(__TI_Compiler_version__)|| defined(__IAR_SYSTEMS _ICC__)
#pragma vector=ADC12_vector
__interrupt void ADC12_ISR (void)
#Elif已定义(__GMNU__)
void __attribute__((interrupt (ADC12_vector))) ADC12_ISR (void)
#否则
错误编译器不受支持!
#endif
{
P3OUT ^=~0x08;//扳钮引脚
ADC12CTL0 &=~ENC;//转换已禁用
ADC12IFG &=~0xff;//清除所有标志
ADC12IE &=~0x01;//禁用中断
__BIC_SR_REGISTER_ON_EXIT (CPUOFF);//从0 (SR)清除CPUOFF位
}