zyp568 发表于 2012-8-13 08:35:37

无法产生触摸屏的INT_ADC_S中断额??

本帖最后由 zyp568 于 2012-8-15 07:34 编辑

实验环境:TQ2440+Ubuntu
代码简要:
#define ADCDLY_VAL (50000)
#define ADCCON_VAL ( (1<<14) | (49<<6) )
#define ADCTSC_VAL ( 0xD3 )
void InitADC( void )
{      
                  ADCCON = ADCCON_VAL;
         ADCTSC = ADCTSC_VAL;
         ADCDLY = ADCDLY_VAL;
}

void InitInt( void )
{
       INTMOD = 0;                              //全部为IRQ模式
       INTMSK = 0x7FFFFFE8;                //开启外部中断0、1、2、4、INT_ADC
       INTSUBMSK = 0x79FF;               //开启INT_ADC_S、INT_TC
       EINTMASK &= ~( 1 << 4 );          //使能外部中断4
       EXTINT0 |= ( 2 << 16 ) | ( 2 << 8 ) | ( 2 << 4 ) | ( 2 << 0 );      //设置为下降沿触发
}

void ADCInt( void )//触摸屏中断处理函数
{
            if( SUBSRCPND & (1<<INT_ADC_S) )//ADC转换完成中断
            {
                      iTFTx = ADCDAT0;
                      iTFTy = ADCDAT1;
                     iADCFlag = 1;
                     ADCTSC = 0xD3;
                     SUBSRCPND |= (1<<INT_ADC_S);
            }
               else                              //笔起/笔落中断
               {
                     ADCTSC = 0x0C;            //启动自动转换
                     SUBSRCPND |= (1<<INT_TC);
               }
}

我将相关寄存器的值打印到串口,发现INT_TS是正常产生的,INT_ADC_S没有产生。信息如下:
触摸前:
[ SUBSRCPND = 0x0 ]
[ SRCPND = 0x2000000 ]
[ INTPND = 0x0 ]
[ ADCCON = 0x4C40 ]
[ ADCTSC = 0xD3 ]      ----------------------※
[ ADCDLY = 0xC350 ]
[ ADCDAT0 = 0xB000 ]    ----------------------※
[ ADCDAT1 = 0xB000 ]    ----------------------※
触摸后:
[ SUBSRCPND = 0x0 ]
[ SRCPND = 0x2000000 ]
[ INTPND = 0x0 ]
[ ADCCON = 0x4C40 ]
[ ADCTSC = 0xC ]      ----------------------※
[ ADCDLY = 0xC350 ]
[ ADCDAT0 = 0xC000 ]    ----------------------※
[ ADCDAT1 = 0xC000 ]    ----------------------※
从寄存器看,已经开始了自动转换过程,可是不知道为什么,就是无法产生转换完成中断。

zyp568 发表于 2012-8-15 07:35:17

本帖最后由 zyp568 于 2012-8-15 09:43 编辑

晕,自动转换模式不自动启动转换啊,还得把ADCCON置1,启动转换。
页: [1]
查看完整版本: 无法产生触摸屏的INT_ADC_S中断额??