无法产生触摸屏的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 09:43 编辑
晕,自动转换模式不自动启动转换啊,还得把ADCCON置1,启动转换。
页:
[1]