안녕하세요.


지금 270 타이머 인터럽트를 써서 ADC를 하려고 합니다.

대략 4uS 정도 마다 ADC를 하려고 하는데요.

타이머는 4번 타이머를 쓰려고 합니다.


대략 적으로 아래와 같이 프로그램 했습니다.

그런데 4uS로 설정하면 시스템이 죽어 버립니다.

아무래도 인터럽트가 계속 걸리면서 시스템이 제대로 돌지 못하는것 같은데요.


얼마나 빠른 인터럽트 까지 처리가 가능 한지 알수 있나요?

혹시 소스에 문제가 있는지도 봐 주셨으면 합니다.

시간을 늘리면 동작되는 시간이 좀 늘어나긴 합니다.

스택이나 그런쪽으로 문제인건지 메세지도 없이 먹통되니 알수가 없네요 ㅜㅜ


#define OIER_E4        (1 << 4)    /* Interrupt enable channel 4 */
#define OSSR_M4        (1 << 4)    /* Match status channel 4 */

static irqreturn_t timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
    gAdcSeq++;
    OSSR |= OSSR_M4;                    // Timer4 인터럽트 클리어

    return IRQ_HANDLED;
}

void timer_init(void)
{
    // 인터럽트 함수 등록
    if( request_irq( IRQ_OST_4_11, timer_interrupt, IRQF_DISABLED, "PXA-270 Timer#4", NULL ) )
    {
        printk( "%s : unable to get IRQ %dn", __FILE__, IRQ_OST_4_11 );
        return;
    }
   
    // 타이머 4 초기화
    OIER &= ~OIER_E4;                    // Timer4 인터럽트 정지
    OSSR |= OSSR_M4;                    // Timer4 인터럽트 클리어
    OSMR4 = 4;                            // 시간값
    OSCR4 = 0;                            // Timer4 카운터 클리어
    OMCR4 = (3<<6) |(1<<3) | (1<<2);        // us
    OIER |= 1<<4;                        // Timer4 인터럽트 동작

    printk( "PXA-270 Timer#4\n" );
}


int __init adc_init( void )
{

    // timer interrupt
    timer_init();

}


module_init( adc_init );
module_exit( adc_exit );