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

247 lines
11 KiB
C

/*
*******************************************************************************
**
** This device driver was created by Applilet2 for 78K0/Kx2
** 8-Bit Single-Chip Microcontrollers
**
** Copyright(C) NEC Electronics Corporation 2002 - 2007
** All rights reserved by NEC Electronics Corporation.
**
** This program should be used on your own responsibility.
** NEC Electronics Corporation assumes no responsibility for any losses
** incurred by customers or third parties arising from the use of this file.
**
** Filename : Timer.h
** Abstract : This file implements device driver for Timer module.
** APIlib : Applilet2 for 78K0/Kx2 V2.10 [6 Mar. 2007]
**
** Device : uPD78F0500_30
**
** Compiler : CC78K0
**
** Creation date: 2007/07/11
**
*******************************************************************************
*/
#ifndef _MDTIMER_
#define _MDTIMER_
/*
*******************************************************************************
** Register bit define
*******************************************************************************
*/
/*
TM0n Mode Control Register(TMC0n)
*/
/* Initial Value */
#define TM0_TMC0_INITIALVALUE 0x00
/* Operating mode and clear mode selection(TMC0n.TMC0n3 & TMC0n.TMC0n2) */
#define TM0_OPERATE 0x0C /* for clear the bits */
#define TM0_OPERATE_DISABLE 0x00 /* operation stop(TM0n cleared to 0) */
#define TM0_OPERATE_FREERUNNING 0x04 /* free-running mode */
#define TM0_CLEAR_BY_TI00_EDGE 0x08 /* clear & start occurs on TI00n pin valid edge */
#define TM0_CLEAR_BY_MATCH_CR00 0x0C /* clear & start occurs on match between TM0n and CR00n */
/* Condition to reverse timer output (TO0n) TMC0n.TMC0n1 */
#define TM0_TO0n_MATCH_CR0n 0x00 /* match between TM0n and CR00n or match between TM0n and CR01n */
#define TM0_TO0n_MATCH_CR0n_TI00 0x02 /* match between TM0n and CR00n or match between TM0n and CR01n or trigger input of TI00n pin valid edge */
/* TM0n overflow detection(TMC0n.OVF0n) */
#define TM0_OVERFLOW_FLAG 0x01 /* overflow detected */
/*
Capture/Compare Control Register(CRC0n)
*/
/* Initial Value */
#define TM0_CRC0_INITIALVALUE 0x00
/* CR00n operating mode selection(CRC0n.CRC0n0) */
#define TM0_CR00_MODE 0x01
#define TM0_CR00_COMPARE 0x00 /* operates as compare register */
#define TM0_CR00_CAPTURE 0x01 /* operates as capture register */
/* CR01n operating mode selection(CRC0n.CRC0n2) */
#define TM0_CR01_MODE 0x04
#define TM0_CR01_COMPARE 0x00 /* operates as compare register */
#define TM0_CR01_CAPTURE 0x04 /* operates as capture register */
/* CR00n capture trigger selection(CRC0n.CRC0n1) */
#define TM0_CR00_CAPTURE_MODE 0x02
#define TM0_CR00_CAPTURE_TI01 0x00 /* captures on valid edge of TI01n pin */
#define TM0_CR00_CAPTURE_TI00 0x02 /* captures on valid edge of TI00n pin by reverse phase */
/*
Prescaler Mode Register(PRM0n)
*/
/* Initial Value */
#define TM0_PRM0_INITIALVALUE 0x00
/* Count clock selection(PRM0n.PRM0n1 & PRM0n.PRM0n0) */
#define TM0_COUNT_CLOCK 0x03 /* for clear the bits */
#define TM0_INTER_CLOCK_1 0x00 /* fprs */
#define TM0_INTER_CLOCK_2 0x01 /* fprs/2^2 */
#define TM0_INTER_CLOCK_3 0x02 /* fprs/2^8 */
#define TM0_EXTER_CLOCK 0x03 /* TI00n valid edge */
/* TI00n pin valid edge selection(PRM0n.ES0n1 & PRM0n.ES0n0) */
#define TM0_TI00_VALID_EDGE 0x30 /* for clear the bits */
#define TM0_TI00_VALID_EDGE_FALL 0x00 /* falling edge */
#define TM0_TI00_VALID_EDGE_RISE 0x10 /* rising edge */
#define TM0_TI00_VALID_EDGE_BOTH 0x30 /* both falling and rising edges */
/* TI01n pin valid edge selection(PRM0n.ES1n1 & PRM0n.ES1n0) */
#define TM0_TI01_VALID_EDGE 0xC0 /* for clear the bits */
#define TM0_TI01_VALID_EDGE_FALL 0x00 /* falling edge */
#define TM0_TI01_VALID_EDGE_RISE 0x40 /* rising edge */
#define TM0_TI01_VALID_EDGE_BOTH 0xC0 /* both falling and rising edges */
/*
Timer Output Control Register(TOC0n)
*/
/* Initial Value */
#define TM0_TOC0_INITIALVALUE 0x00
/* Timer output F/F status setting(TOC0n.LVSn1 & TOC0n.LVRn1) */
#define TM0_OUTPUT_INIT_LEVEL_CLR 0x0C /* for clear the bits */
#define TM0_OUTPUT_INIT_LEVEL_LOW 0x04 /* timer output F/F reset (0) */
#define TM0_OUTPUT_INIT_LEVEL_HIGH 0x08 /* timer output F/F set (1) */
/* Timer output F/F control using match of CR00n and TM0n(TOC0n.TOC0n1) */
#define TM0_CR00_OUTPUT_FF_OFF_MODE 0x00 /* disables inversion operation */
#define TM0_CR00_OUTPUT_FF_ON_MODE 0x02 /* enables inversion operation */
/* Timer output F/F control using match of CR01n and TM0n(TOC0n.TOC0n4) */
#define TM0_CR01_OUTPUT_FF_OFF_MODE 0x00 /* disables inversion operation */
#define TM0_CR01_OUTPUT_FF_ON_MODE 0x10 /* enables inversion operation */
/* One-shot pulse output trigger control via software(TOC0n.OSPT0n) */
#define TM0_SOFTWARE_TRIGGER_OFF 0x00 /* no one-shot pulse output trigger */
#define TM0_SOFTWARE_TRIGGER_ON 0x40 /* one-shot pulse output trigger */
/* One-shot pulse output operation control(TOC0#n.OSPE0n) */
#define TM0_SUCCESSIVE_MODE 0x00 /* successive pulse output mode */
#define TM0_ONESHOT_MODE 0x20 /* one-shot pulse output mode */
/* Timer output control(TOC0n.TOE0n) */
#define TM0_OUTPUT_DISABLE_BIT 0x00 /* disables output (output fixed to level 0) */
#define TM0_OUTPUT_ENABLE_BIT 0x01 /* enables output */
/*
Timer Clock Selection Register 5n (TCL5n)
*/
/* TM5 internal clock selection(TCL5n) */
#define TM5_INTER_CLOCK_1 0x02 /* internal clock = fpsr */
#define TM5_INTER_CLOCK_2 0x03 /* internal clock = fpsr/2 */
#define TM5_INTER_CLOCK_3 0x04 /* when n=0, internal clock = fpsr/2^2; when n=1, internal clock = fpsr/2^4 */
#define TM5_INTER_CLOCK_4 0x05 /* internal clock = fpsr/2^6 */
#define TM5_INTER_CLOCK_5 0x06 /* interna clock = fpsr/2^8 */
#define TM5_INTER_CLOCK_6 0x07 /* when n=0, internal clock = fpsr/2^13; when n=1, internal clock = fpsr/2^12 */
/* TM5 external clock selection(TCL5n) */
#define TM5_EXTER_CLOCK_FALLING 0x00 /* TI5n pin falling edge */
#define TM5_EXTER_CLOCK_RISING 0x01 /* TI5n pin rising edge */
/* TM5 count edge selection(in external event counter)(TCL5n) */
#define TM5_COUNT_EDGE_FALLING 0x00 /* TI5n pin falling edge */
#define TM5_COUNT_EDGE_RISING 0x01 /* TI5n pin rising edge */
/*
Timer Mode Control Register 5n (TMC5n)
*/
#define TM5_TMC5_INITIALVALUE 0x00
/* TM5 operating mode selection (TMC5n.TMC5n6)*/
#define TM5_OPT_MODE_OTHER 0x00 /* mode in which clear & start occurs on a match between TM5n and CR5n */
#define TM5_OPT_MODE_PWM 0x40 /* PWM (free-running) mode */
/* TM5 F/F control (in other than PWM mode)(TMC5n.TMC5n1)*/
#define TM5_OUTPUT_FF_ENABLE 0x02 /* inversion operation enabled */
#define TM5_OUTPUT_FF_DISABLE 0x00 /* inversion operation disabled */
/* TM5 active level selection (in PWM mode)(TMC5n.TMC5n1) */
#define TM5_OUTPUT_ACTIVE_HIGH 0x00 /* active-high */
#define TM5_OUTPUT_ACTIVE_LOW 0x02 /* active-low */
/* TM5 output F/F status setting (in other than PWM mode) (TMC5n.LVS5n & TMC5n.LVR5n) */
#define TM5_OUTPUT_INIT_CLR 0x0C /* for clear bits */
#define TM5_OUTPUT_INIT_HIGH 0x08 /* TM5 output F/F set (1) */
#define TM5_OUTPUT_INIT_LOW 0x04 /* TM5 output F/F clear (0) */
/* TM5 output control (TMC5n.TOE5n) */
#define TM5_OUTPUT_ENABLE_BIT 0x01 /* output enabled */
#define TM5_OUTPUT_DISABLE_BIT 0x00 /* output disabled (TM5n output is low level) */
/* TM5 count operation control (TMC5n.TCE5n) */
#define TM5_COUNTER_ENABLE_BIT 0x80 /* count operation start */
#define TM5_COUNTER_DISABLE_BIT 0x00 /* after clearing to 0, count operation disabled (counter stopped) */
/*
8-bit timer H mode register n (TMHMDn)
*/
#define TMH_TMHMDn_INITIALVALUE 0x00 /* TMHMDn initial value */
/* Count clock selection(TMHMDn.CKSn2~CKSn0) */
#define TMH_INTER_CLOCK_1 0x00 /* TMH0: fPRS, TMH1: fPRS */
#define TMH_INTER_CLOCK_2 0x10 /* TMH0: fPRS/2, TMH1: fPRS/2^2 */
#define TMH_INTER_CLOCK_3 0x20 /* TMH0: fPRS/2^2, TMH1: fPRS/2^4 */
#define TMH_INTER_CLOCK_4 0x30 /* TMH0: fPRS/2^6, TMH1: fPRS/2^6 */
#define TMH_INTER_CLOCK_5 0x40 /* TMH0: fPRS/2^10, TMH1: fPRS/2^12 */
#define TMH_INTER_CLOCK_6 0x50 /* TMH0: TM50 output, TMH1: fRL/2^7 */
#define TMH_INTER_CLOCK_7 0x60 /* TMH1: fRL/2^9 */
#define TMH_INTER_CLOCK_8 0x70 /* TMH1: fRL */
/* Timer operation mode(TMHMD#n.TMMDn1~TMMDn0) */
#define TMH_INTERVAL_SQUARE_MODE 0x00 /* interval/square-wave timer mode */
#define TMH_PWM_MODE 0x08 /* PWM output mode */
#define TMH1_CARRIER_MODE 0x04 /* Carrier generator mode */
/* Timer output level control (in default mode)(TMHMD#n.TOLEVn) */
#define TMH_OUTPUT_LVL_LOW 0x00 /* low level */
#define TMH_OUTPUT_LVL_HIGH 0x02 /* high level */
/*
8-bit timer H carrier control register 1 (TMCYC1)
*/
/* Remote control output in carrier mode(TMCYC1.RMC1 & NRZB1) */
#define TMH_REMOTE_LOW_LEVEL 0x00 /* low-level output */
#define TMH_REMOTE_HIGH_LEVEL 0x02 /* high-level output */
#define TMH_REMOTE_CARRIER 0x06 /* carrier pulse output */
/* Carrier pulse output status flag(TMCYC1.NRZ1) */
#define TMH1_CARRIER_OUTPUT_DISABLE 0x00 /* Carrier output disabled status (low-level status) */
/*
*******************************************************************************
** Macro define
*******************************************************************************
*/
/* 8-bit timer compare register 50 (CR50)*/
#define TM50_COMPARE_VALUE 0x7F
/* 8-bit timer compare register 51 (CR51)*/
#define TM51_COMPARE_VALUE 155
/* 8-bit timer compare register H0 (CMP00)*/
#define TMH0_CMP0_VALUE 0xFF
/* 8-bit timer compare register H0 (CMP10)*/
#define TMH0_CMP1_VALUE 0x0
/* 8-bit timer compare register H1 (CMP01)*/
#define TMH1_CMP0_VALUE 0xFF
/* 8-bit timer compare regiser H1 (CMP11)*/
#define TMH1_CMP1_VALUE 0x0
enum TMChannel { TMCHANNEL0, TMCHANNEL1 };
/*
*******************************************************************************
** Function define
*******************************************************************************
*/
void TM50_Init(void);
void TM50_Start(void);
void TM50_Stop(void);
void TM50_ChangeDuty(UCHAR ratio);
void TM51_Init(void);
void TM51_Start(void);
void TM51_Stop(void);
void TM51_ChangeTimerCondition(UCHAR value);
void TMH0_Init(void);
void TMH0_Start(void);
void TMH0_Stop(void);
MD_STATUS TMH0_ChangeTimerCondition(UCHAR* array_reg, UCHAR array_num);
void TMH0_ChangeDuty(UCHAR ratio);
void TMH1_Init(void);
void TMH1_Start(void);
void TMH1_Stop(void);
MD_STATUS TMH1_ChangeTimerCondition(UCHAR* array_reg, UCHAR array_num);
void TMH1_ChangeDuty(UCHAR ratio);
/* Start user code for definition. Do not edit comment generated here */
void TM00_Init();
void TM00_Start();
void TM00_Stop();
/* End user code for definition. Do not edit comment generated here */
#endif