📄 timera_canal0.c
字号:
#include "Headers.h"
extern UInt16 contor;
/* Tratarea intreruperii de Timer */
#pragma interrupt saveall
void isrTimerA0_interrupt(void)
{
enterCritical(); /* intru intr-o sectiune critica, nu doresc ca aceasta intrerupere
sa fie intrerupta de o alta intrerupere mai prioritara */
asm(move.w #$4000,X:TMRA0_SCR);
asm(bfclr #$0010,X:TMRA0_COMSCR);
exitCritical(); /* activez controllerul de intreruperi, parasesc zona critica */
START_TMRA0();
}
/* Cofigurare posib. de a avea intreruperi pt.TImer A canal 0 */
void initIntrTimerA0()
{
enterCritical(); /* intru intr-o zona critica pe perioada configurarii */
asm (bfset #$C000,X:IPR7); /* setez propritatea intreruperii de TIMER A */
/* canal 0 */
asm (bfclr #$0300,SR); /* permit toate tipurile de intrerupere */
/* nu maschez nicio intr. indiferent de prioritate */
exitCritical(); /* activez controllerul de intreruperi, parasesc */
/* zona critica */
}
void Timer_A0_Config(UInt16 value)
{
enterCritical(); /* intru intr-o zona critica pe perioada configurarii */
asm(move.w #$0000,X:TMRA0_COMSCR);
asm(move.w #$0060,X:TMRA0_CTRL); //opresc toate functiile timerului
asm(move.w #$4000,X:TMRA0_SCR); //posib de a se genera intreruperi cand se ajunge la o valoare
asm(move.w #$0000,X:TMRA0_LOAD); //valoarea cu care se reinit. timerul
asm(move.w value,X:TMRA0_CMP1); //valoarea pana la care se numara
asm(move.w value,X:TMRA0_CMPLD1);//valoarea cu care se va reinitializa reg. de comparare
asm(bfset #$1000,X:TMRA0_CTRL); //setez prescallerul la 1
asm(move.w #$0000,X:TMRA0_CNTR); //valoarea initiala a timerului
asm(move.w #$0041,X:TMRA0_COMSCR);//configurez. reg comparator
exitCritical(); /* parasesc zona critica - activez cu ajutorul controllerului de
intreruperi posibilitatea de a trata intreruperile */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -