mirror of
https://github.com/rvtr/twl_mcu.git
synced 2025-06-18 06:35:40 -04:00
247 lines
11 KiB
C
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
|