twl_mcu/Timer.c
2024-12-17 04:24:29 -05:00

142 lines
4.7 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "macrodriver.h"
#include "Timer.h"
/* Start user code for include definition. Do not edit comment generated here */
/* End user code for include definition. Do not edit comment generated here */
#include "user_define.h"
/* Start user code for global definition. Do not edit comment generated here */
/*
タイマーはイベントループを駆動するのと、
TM51 : イベントループ用
LEDのPWM制御に使ってます。
TM50 : wifi LED
TMH0 : PowR
TMH1 : PowG
*/
/******************************************************************************
イベントタイマ
******************************************************************************/
void TM51_Init(){
TCE51 = 0; /* TM51 counter disable */
TMMK51 = 1; /* INTTM51 interrupt disabled */
TMIF51 = 0; /* clear interrupt flag */
// TMPR51 = 1; /* set low priority level */
TCL51 = TM5_INTER_CLOCK_5; // 2^8 分周 = 31.25kHz
/* TM51 interval mode */
CR51 = TM51_COMPARE_VALUE; // 155 -> 4.975ms
TMC51 = TM5_TMC5_INITIALVALUE | TM5_OPT_MODE_OTHER | TM5_OUTPUT_FF_DISABLE;
}
void TM51_Start(){
TMMK51 = 0; /* INTTM51 interrupt enabled */
TCE51 = 1; /* count operation start */
}
void TM51_Stop(){
TCE51 = 0; /* TM51 counter disable */
TMMK51 = 1; /* INTTM51 interrupt disabled */
TMIF51 = 0; /* clear interrupt flag */
}
/******************************************************************************
TM00 使いません。
CAM LED はソフトで点滅します。しくしく。
******************************************************************************/
/******************************************************************************
TM50 WiFi LED
Duty は CR50 (0(1/256) 254(255/256))
******************************************************************************/
void TM50_Init(){
TCE50 = 0; /* TM50 counter disable */
TMMK50 = 1; /* INTTM50 interrupt disabled */
TMIF50 = 0; /* clear interrupt flag */
TCL50 = TM5_INTER_CLOCK_2;
/* TM50 PWM output mode */
/* Set TM50 output pin */
PM1 &= 0x7F;
P1 &= 0x7F;
CR50 = TM50_COMPARE_VALUE;
TMC50 = TM5_TMC5_INITIALVALUE | TM5_OPT_MODE_PWM | TM5_OUTPUT_ACTIVE_HIGH;
}
void TM50_Start(){
TOE50 = 1; /* output enabled */
TCE50 = 1; /* count operation start */
}
void TM50_Stop(){
TCE50 = 0; /* TM50 counter disable */
TOE50 = 0; /* output disabled */
}
/******************************************************************************
TMH0 POW 赤
CMP0x との一致でピンをアクティブにして、カウンタをクリア
CMP1x との一致でピンをインアクティブにする。動作中に変更可能。
 → アクティブHiにしておいて、CMP1xを動かせばよし
CMP00は255にしてある。CMP1xは0254 (範囲に注意255禁止!)
******************************************************************************/
void TMH0_Init(void){
TMHE0 = 0; /* stop TimerH0 */
TMMKH0 = 1; /* INTTMH0 Interrupt servicing disabled */
TMIFH0 = 0; /* clear interrupt request flag of INTTMH0 */
TMHMD0 = TMH_TMHMDn_INITIALVALUE | TMH_INTER_CLOCK_3 | TMH_PWM_MODE | TMH_OUTPUT_LVL_LOW;
CMP00 = TMH0_CMP0_VALUE;
CMP10 = TMH0_CMP1_VALUE;
/* TMH0 pin setting */
PM1 &= ~0x20;
P1 &= ~0x20;
}
void TMH0_Start(void){
CMP10 = TMH0_CMP1_VALUE;
TOEN0 = 1; /* enable output */
TMHE0 = 1; /* start TimerH0 */
}
void TMH0_Stop(void){
TMHE0 = 0; /* stop TimerH0 */
TOEN0 = 0; /* disable output */
}
/******************************************************************************
TMH1 POW 緑
******************************************************************************/
void TMH1_Init(void){
TMHE1 = 0; /* stop TimerH1 */
TMMKH1 = 1; /* INTTMH1 Interrupt servicing disabled */
TMIFH1 = 0; /* clear interrupt request flag of INTTMH1 */
TMHMD1 = TMH_TMHMDn_INITIALVALUE | TMH_INTER_CLOCK_2 | TMH_PWM_MODE | TMH_OUTPUT_LVL_LOW;
CMP01 = TMH1_CMP0_VALUE;
CMP11 = TMH1_CMP1_VALUE;
/* TMH1 pin setting */
PM1 &= ~0x40;
P1 &= ~0x40;
}
void TMH1_Start(void){
CMP11 = TMH1_CMP1_VALUE;
TOEN1 = 1; /* enable output */
TMHE1 = 1; /* start TimerH1 */
}
void TMH1_Stop(void){
TMHE1 = 0; /* stop TimerH1 */
TOEN1 = 0; /* disable output */
}