#include "msp430x44x.h"
#include "AD7825.h"
uchar flag;
void main()
{
volatile unsigned int i;
WDTCTL=WDTPW+WDTHOLD;
/********************时钟配置set ACLK=8MHZ***************************
BCSCTL1 &=~XT2OFF; //XT2 on
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
BCSCTL2 |= SELM_2+SELS; // MCLK = SMCLK=XT2
*******************************************************************/
一般需要按照PxIES——>PxIE——>PxIFG的顺序去初始化
其次就是关于PxIFG是需要软清零的或者通过读取PxIV寄存器之后自动清零,在中断里面清零了吗?
没有程序只能作以上分析。
#include "AD7825.h"
uchar flag;
void main()
{
volatile unsigned int i;
WDTCTL=WDTPW+WDTHOLD;
/********************时钟配置set ACLK=8MHZ***************************
BCSCTL1 &=~XT2OFF; //XT2 on
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
BCSCTL2 |= SELM_2+SELS; // MCLK = SMCLK=XT2
*******************************************************************/
SCFI0|=FN_4; //时钟配置
SCFQCTL=121;
FLL_CTL0=DCOPLUS+OSCCAP1;
_DINT(); //关总中断
P2DIR&=~(chang+hang); //外部中断输入口
P2IE|=chang; //场同步中断允许
P2IES|=(chang+hang); //下降沿触发 //
Init_ADcovert(); //初始化AD
P2IFG=0x00; //清除中断标志
_EINT(); //开总中断
while(1)
{
LPM0; //进入低功耗模式0
}
}
# pragma vector=PORT2_VECTOR
__interrupt void chang_Syn() //场同步中断,开始采集一帧
{
flag=P2IFG;
switch(flag&0x03) //判断是P2.7还是P2.6发生中断
{
case 0x01 : //场中断
{
P2IE&=~chang; //!!!关闭场中断,因为只采集一场
P2IFG&=~chang; //清除场中断标志,以备下一次中断
delay_Nus(480); //消影区,延时480us,等待图像信号来临
P2IE|=hang; //行同步中断允许
}
break;
case 0x02 : //行中断
{
if(hang_num<32)
{
hang_num++;
Start_ADcovert(); //开始这一行后的第一次采集
P2IFG&=~hang; //清除行中断标志,以备下一次中断
}
}
break;
}
P2IFG=0x00;
}
一周热门 更多>