📄 timera_canal1.c
字号:
#include "Headers.h"
/* Tratarea intreruperii de Timer */
#pragma interrupt saveall
void isrTimerA1_interrupt(void)
{
//GPIOA_DR ^= 0x0002;
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:TMRA1_SCR);
asm(bfclr #$0010,X:TMRA1_COMSCR);
exitCritical(); /* activez controllerul de intreruperi, parasesc zona critica */
START_TMRA1();
}
/* Cofigurare posib. de a avea intreruperi pt.TImer A canal 1 */
void initIntrTimerA1()
{
enterCritical(); /* intru intr-o zona critica pe perioada configurarii */
asm (bfset #$0003,X:IPR8); /* setez propritatea intreruperii de TIMER A */
/* canal 1 */
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_A1_Config(UInt16 value)
{
enterCritical(); /* intru intr-o zona critica pe perioada configurarii */
asm(move.w #$0000,X:TMRA1_COMSCR);
asm(move.w #$0060,X:TMRA1_CTRL); //opresc toate functiile timerului
asm(move.w #$4000,X:TMRA1_SCR); //posib de a se genera intreruperi cand se ajunge la o valoare
asm(move.w #$0000,X:TMRA1_LOAD); //valoarea cu care se reinit. timerul
asm(move.w value,X:TMRA1_CMP1); //valoarea pana la care se numara
asm(move.w value,X:TMRA1_CMPLD1);//valoarea cu care se va reinitializa reg. de comparare
asm(bfset #$1000,X:TMRA1_CTRL); //setez prescallerul la 1
asm(move.w #$0000,X:TMRA1_CNTR); //valoarea initiala a timerului
asm(move.w #$0041,X:TMRA1_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 + -