2013-01-18 3 views
0

AVR AT90S2313에서 설정 중단 플래그에 문제가 있습니다. 일반적으로 인터럽트는 하드웨어 카운터를 통해 설정됩니다. 프로그래밍 방식으로이 플래그를 설정하고 싶을 때 (특정 순간에). 나는 C로 모든 코드를 작성하고있다 :언제든지 설정 중단 플래그

SEI();     //enable globall interupt 
TIMSK | = (1<<TOIE1); //enable interrupt from timer 1 
TIFR | = (1<<TOV1);  //enable interruption (setting bit) - IT DOESN"T WORKS! 

그래서 마지막 줄에는 프로그래밍 중단이 있어야하지만 아무 일도 일어나지 않고 왜 그런지 모른다. 어떤 생각? 미리 감사드립니다. 그 조금에 1을 기록하는 코멘트에 대한 응답으로 0

편집에 설정에

답변

1

TIFR 레지스터는 특별하다 :

당신은 내가 최대한 밀어 레지스터와 아무것도하지 않아야

당신이 제공 한 작은 정보로부터 알 수 있습니다. 즉, 핸들러를 실행하기 위해 인터럽트 메커니즘을 사용하지 마십시오. 코드에서 인터럽트를 트리거 할 지점에서 핸들러를 직접 호출하십시오. 동시에 활성화 비트 또는 클리어링 플래그를 조정하고 싶을 수도 있습니다 - 당신이 무엇을하려고하는지 모르겠습니다.

핸들러가 인터럽트에 응답하여 작동하는 것처럼 실행되도록하려면 먼저 인터럽트를 비활성화해야합니다. 이를 수행하는 일반적인 방법은

void function_to_trigger_handler() 
{ 
    uint8_t sreg = SREG; 
    cli(); 

    my_interrupt_handler(); 

    SREG = sreg; 
} 
+0

감사하지만 생각하지 않습니다. 당신은 더 구체적 일 수 있습니까? 이 등록기를 어떻게해야합니까? – caro