📄 lld_eft.c
字号:
tVoid EFT_IntTimer1 (tVoid){ tU16 tmp_sr; tU16 tmp_cntr; tmp_sr = rd16_reg(Eft1,sr); tmp_cntr = rd16_reg(Eft1,Cntr); /* Call application callback */ INT_EFT_EndTr_Mgr_Str[EFT1_GLOBAL_INT](); if(tmp_sr & INCA_MSK) /* Input Capture A set */ { wr16(Eft1,sr,icfa,0); } if(tmp_sr & INCB_MSK) /* Input Capture B set */ { wr16(Eft1,sr,icfb,0); } if(tmp_sr & TMR_OVF) /* Timer overflow set */ { wr16(Eft1,sr,tof,0); }}#endif/************************************************************************* ** FUNCTIONS ** ** EFT_IntTimer1OutCompA ** ** DESCRIPTION ** ** EFT timer 1 output compare A int control (EFT1) ** ** CALLS ** ** LLD macros ** ** INPUTS ** ** None ** ** OUTPUTS ** ** None ** *************************************************************************/#ifdef OS20_USE_TIMER1tVoid EFT_IntTimer1OutCompA (tVoid){ tU16 tmp_sr; tU16 tmp_cntr; tmp_sr = rd16_reg(Eft1,sr); tmp_cntr = rd16_reg(Eft1,Cntr); if(tmp_sr & OCFA_MSK) /* Output Compare A set */ { if (Eft_TimAccuA == 0) { /* Call application callback */ INT_EFT_EndTr_Mgr_Str[EFT1_OCA_INT](); if (Eft_TimAccuValA > EFT_MAX_TIMER_PROGRAMMATION) { Eft_TimValueA = EFT_MAX_TIMER_PROGRAMMATION; Eft_TimAccuA = Eft_TimAccuValA - EFT_MAX_TIMER_PROGRAMMATION; } else { Eft_TimValueA = Eft_TimAccuValA; Eft_TimAccuA = 0; } } else { if (Eft_TimAccuA > EFT_MAX_TIMER_PROGRAMMATION) { Eft_TimValueA = EFT_MAX_TIMER_PROGRAMMATION; Eft_TimAccuA -= EFT_MAX_TIMER_PROGRAMMATION; } else { Eft_TimValueA = Eft_TimAccuA; Eft_TimAccuA = 0; } } wr16(Eft1,sr,ocfa,0); wr16_reg(Eft1,Ocar,(Eft_TimValueA+tmp_cntr));/* Program OutputCompare Reg A */ }}#endif /************************************************************************* ** FUNCTIONS ** ** EFT_IntTimer1OutCompB ** ** DESCRIPTION ** ** EFT timer 1 output compare A int control (EFT1) ** ** CALLS ** ** LLD macros ** ** INPUTS ** ** None ** ** OUTPUTS ** ** None ** *************************************************************************/#ifdef OS20_USE_TIMER1tVoid EFT_IntTimer1OutCompB (tVoid){ tU16 tmp_sr; tU16 tmp_cntr; tmp_sr = rd16_reg(Eft1,sr); tmp_cntr = rd16_reg(Eft1,Cntr); if(tmp_sr & OCFB_MSK) /* Output Compare B set */ { /* Call application callback */ INT_EFT_EndTr_Mgr_Str[EFT1_OCB_INT](); wr16(Eft1,sr,ocfb,0); wr16_reg(Eft1,Ocbr,(Eft_TimValueB+tmp_cntr));/* Program OutputCompare Reg B (for reload value) */ }}#endif/************************************************************************* ** FUNCTIONS ** ** OS20_EFT_TimerConfig ** ** DESCRIPTION ** ** OS20 EFT timer 0 configuration ** ** INPUTS ** ** tU8 TimerId: Timer identificator ** ** OUTPUTS ** ** None ** *************************************************************************/tVoid OS20_EFT_TimerConfig (tU8 TimerId){ if (EFT0 == TimerId) { wr16_reg(Eft0,sr,0); wr16_reg(Eft0,Cr2,TIMER_PRES_VAL); wr16_reg(Eft0,Ocar,0xFFFF); wr16_reg(Eft0,Ocbr,0xFFFF); ResetCounter(Eft0); // loop to avoid first clock wrap FFFC -> 0000 EFT_TimerStart(TimerId); wr16_reg(Eft0,sr,0); wr16(Eft0,Cr2,toe,1); }}/************************************************************************* ** FUNCTIONS ** ** OS20_EFT_SetOCAR ** ** DESCRIPTION ** ** Set Output Compare A Register value ** ** INPUTS ** ** tU8 TimerId: Timer identificator ** unsigned value: output compare value ** ** OUTPUTS ** ** None ** *************************************************************************/tVoid OS20_EFT_SetOCAR(tU8 TimerId, unsigned value){ if (EFT0 == TimerId) { wr16_reg(Eft0,Ocar,value); }}/************************************************************************* ** FUNCTIONS ** ** OS20_EFT_SetOCAIE_TOE ** ** DESCRIPTION ** ** Set Output Compare A and Timer Overflow Interrupts ** ** INPUTS ** ** tU8 TimerId: Timer identificator ** ** OUTPUTS ** ** None ** *************************************************************************/tVoid OS20_EFT_SetOCAIE_TOE(tU8 TimerId){ if (EFT0 == TimerId) { tU16 temp = rd16_reg(Eft0,Cr2); temp |= (1<<14)|(1<<13); wr16_reg(Eft0,Cr2,temp); }}/************************************************************************* ** FUNCTIONS ** ** OS20_EFT_ReSetOCAIE ** ** DESCRIPTION ** ** ReSet Output Compare A Interrupt ** ** INPUTS ** ** tU8 TimerId: Timer identificator ** ** OUTPUTS ** ** None ** *************************************************************************/tVoid OS20_EFT_ReSetOCAIE(tU8 TimerId){ if (EFT0 == TimerId) { wr16(Eft0,Cr2,ocaie,0); }}/************************************************************************* ** FUNCTIONS ** ** OS20_EFT_GetSRegister ** ** DESCRIPTION ** ** Get Status Register value ** ** INPUTS ** ** tU8 TimerId: Timer identificator ** ** OUTPUTS ** ** Status Register ** *************************************************************************/tU16 OS20_EFT_GetSRegister(tU8 TimerId){ if (EFT0 == TimerId) { return rd16_reg(Eft0,sr); } else { return 0; }}/************************************************************************* ** FUNCTIONS ** ** OS20_EFT_ReSetOCFA ** ** DESCRIPTION ** ** Reset Output Compare Flag A ** ** INPUTS ** ** tU8 TimerId: Timer identificator ** ** OUTPUTS ** ** None ** *************************************************************************/tVoid OS20_EFT_ReSetOCFA(tU8 TimerId){ if (EFT0 == TimerId) { wr16(Eft0,sr,ocfa,0); }}/************************************************************************* ** FUNCTIONS ** ** OS20_EFT_ReSetTOF ** ** DESCRIPTION ** ** Reset Timer Overflow ** ** INPUTS ** ** tU8 TimerId: Timer identificator ** ** OUTPUTS ** ** None ** *************************************************************************/tVoid OS20_EFT_ReSetTOF(tU8 TimerId){ if (EFT0 == TimerId) { wr16(Eft0,sr,tof,0); }}#ifdef __cplusplus}#endif/* End of file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -