text: /*""FILE COMMENT""*******************************************************
  * System Name	: Timer TMR API for RX62Nxx
  * File Name		: r_pdl_tmr_RX62Nxx.h
  * Version		: 1.02
  * Contents		: Timer TMR API header
  * Customer		: 
  * Model			: 
  * Order			: 
  * CPU			: RX
  * Compiler		: RXC
  * OS			: Nothing
  * Programmer	: 
  * Note			: 
  ************************************************************************
  * Copyright, 2011. Renesas Electronics Corporation
  * and Renesas Solutions Corporation
  ************************************************************************
  * History		: 2011.04.08
  *				: Ver 1.02
  *				: CS-5 release.
  *""FILE COMMENT END""**************************************************/
  
  #ifndef R_PDL_TMR_RX62Nxx_H
  #define R_PDL_TMR_RX62Nxx_H
  
  #define TMR_UNITS 				2
  #define TMR_CHANNELS_PER_UNIT	2
  #define TMR_CHANNELS (uint8_t)(TMR_UNITS * TMR_CHANNELS_PER_UNIT)
  
  /* One-shot modes */
  #define CHANNEL_MODE	0x01u
  #define UNIT_MODE		0x02u
  
  /* Callback function storage */
  extern VoidCallBackFunc rpdl_TMR_Overflow_callback_func[TMR_CHANNELS];
  extern VoidCallBackFunc rpdl_TMR_CMA_callback_func[TMR_CHANNELS];
  extern VoidCallBackFunc rpdl_TMR_CMB_callback_func[TMR_CHANNELS];
  
  /* Global variables */
  extern volatile  uint8_t rpdl_TMR_tcsr_setting[TMR_CHANNELS];
  extern volatile  uint8_t rpdl_TMR_tccr8_setting[TMR_CHANNELS];
  extern volatile uint16_t rpdl_TMR_tccr16_setting[TMR_UNITS];
  extern volatile  uint8_t rpdl_TMR_one_shot[TMR_CHANNELS];
  
  /* Library prototypes */
  bool R_TMR_SetAll(
  	const uint8_t
  );
  bool R_TMR_CreateChannelAll(
  	const uint8_t,
  	const uint32_t,
  	const uint8_t,
  	const uint8_t,
  	const uint8_t,
  	const uint8_t,
  	VoidCallBackFunc const,
  	VoidCallBackFunc const,
  	VoidCallBackFunc const,
  	const uint8_t
  );
  bool R_TMR_CreateUnitAll(
  	const uint8_t,
  	const uint32_t,
  	const uint8_t,
  	const uint16_t,
  	const uint16_t,
  	const uint16_t,
  	VoidCallBackFunc const,
  	VoidCallBackFunc const,
  	VoidCallBackFunc const,
  	const uint8_t
  );
  bool R_TMR_CreatePeriodicChannelAll(
  	const uint8_t,
  	const uint32_t,
  	const float,
  	const float,
  	VoidCallBackFunc const,
  	VoidCallBackFunc const,
  	const uint8_t
  );
  bool R_TMR_CreatePeriodicUnitAll(
  	const uint8_t,
  	const uint32_t,
  	const float,
  	const float,
  	VoidCallBackFunc const,
  	VoidCallBackFunc const,
  	const uint8_t
  );
  bool R_TMR_CreateOneShotChannelAll(
  	const uint8_t,
  	const uint32_t,
  	const float,
  	VoidCallBackFunc const,
  	const uint8_t
  );
  bool R_TMR_CreateOneShotUnitAll(
  	const uint8_t,
  	const uint32_t,
  	const float,
  	VoidCallBackFunc const,
  	const uint8_t
  );
  bool R_TMR_DestroyAll(
  	const uint8_t
  );
  bool R_TMR_ControlChannelAll(
  	const uint8_t,
  	const uint32_t,
  	const uint8_t,
  	const uint8_t,
  	const uint8_t
  );
  bool R_TMR_ControlUnitAll(
  	const uint8_t,
  	const uint32_t,
  	const uint16_t,
  	const uint16_t,
  	const uint16_t
  );
  bool R_TMR_ControlPeriodicChannelAll(
  	const uint8_t,
  	const uint32_t,
  	const float,
  	const float
  );
  bool R_TMR_ControlPeriodicUnitAll(
  	const uint8_t,
  	const uint32_t,
  	const float,
  	const float
  );
  bool R_TMR_ReadChannelAll(
  	const uint8_t,
  	volatile uint8_t * const,
  	volatile uint8_t * const,
  	volatile uint8_t * const,
  	volatile uint8_t * const
  );
  bool R_TMR_ReadUnitAll(
  	const uint8_t,
  	volatile uint8_t * const,
  	volatile uint16_t * const,
  	volatile uint16_t * const,
  	volatile uint16_t * const
  );
  bool ReturnFalse(void);
  
  /* Macro definitions */
  
  #if defined (DEVICE_PACKAGE_LFBGA_176) || defined (DEVICE_PACKAGE_TFLGA_145) || \
  	defined (DEVICE_PACKAGE_LQFP_144)
  #define R_TMR_Set(a) \
  ( R_TMR_SetAll( (a) ) )
  #else
  #define R_TMR_Set(a) \
  ( ReturnFalse() )
  #endif
  
  #define R_TMR_CreateChannel(a, b, c, d, e, f, g, h, i, j) \
  ( \
  ( ((a) < TMR_CHANNELS) && ((j) <= IPL_MAX) ) ? \
  R_TMR_CreateChannelAll( (a), (b), (c), (d), (e), (f), (g), (h), (i), (j) ) : \
  ReturnFalse() \
  )
  
  #define R_TMR_CreateUnit(a, b, c, d, e, f, g, h, i, j) \
  ( \
  ( ((a) < TMR_UNITS) && ((j) <= IPL_MAX) ) ? \
  R_TMR_CreateUnitAll( (a), (b), (c), (d), (e), (f), (g), (h), (i), (j) ): \
  ReturnFalse() \
  )
  
  #define R_TMR_CreatePeriodic(a, b, c, d, e, f, g) \
  ( \
  ( ((a) > PDL_TMR_UNIT1) || ((g) > IPL_MAX) ) ? \
  ReturnFalse() : \
  ( (a) <= PDL_TMR_TMR3) ? \
  R_TMR_CreatePeriodicChannelAll( (a), (b), (c), (d), (e), (f), (g) ) : \
  R_TMR_CreatePeriodicUnitAll( (a - PDL_TMR_UNIT0), (b), (c), (d), (e), (f), (g) ) \
  )
  
  #define R_TMR_CreateOneShot(a, b, c, d, e) \
  ( \
  ( ((a) > PDL_TMR_UNIT1) || ((e) > IPL_MAX) ) ? \
  ReturnFalse() : \
  ( (a) <= PDL_TMR_TMR3 ) ? \
  R_TMR_CreateOneShotChannelAll( (a), (b), (c), (d), (e) ) : \
  R_TMR_CreateOneShotUnitAll( (a - PDL_TMR_UNIT0), (b), (c), (d), (e) ) \
  )
  
  #define R_TMR_Destroy(a) \
  ( \
  ( (a) < TMR_UNITS ) ? \
  R_TMR_DestroyAll( (a) ) : \
  ReturnFalse() \
  )
  
  #define R_TMR_ControlChannel(a, b, c, d, e) \
  ( \
  ( (a) < TMR_CHANNELS ) ? \
  R_TMR_ControlChannelAll( (a), (b), (c), (d), (e) ) : \
  ReturnFalse() \
  )
  
  #define R_TMR_ControlUnit(a, b, c, d, e) \
  ( \
  ( (a) < TMR_UNITS ) ? \
  R_TMR_ControlUnitAll( (a), (b), (c), (d), (e) ): \
  ReturnFalse() \
  )
  
  #define R_TMR_ControlPeriodic(a, b, c, d) \
  ( \
  ( (a) > PDL_TMR_UNIT1 ) ? \
  ReturnFalse() : \
  ( (a) <= PDL_TMR_TMR3 ) ? \
  R_TMR_ControlPeriodicChannelAll( (a), (b), (float)(c), (float)(d) ) : \
  R_TMR_ControlPeriodicUnitAll( (a - PDL_TMR_UNIT0), (b), (float)(c), (float)(d) ) \
  )
  
  #define R_TMR_ReadChannel(a, b, c, d, e) \
  ( \
  ( (a) < TMR_CHANNELS ) ? \
  R_TMR_ReadChannelAll( (a), (b), (c), (d), (uint8_t *)(e) ) : \
  ReturnFalse() \
  )
  
  #define R_TMR_ReadUnit(a, b, c, d, e) \
  ( \
  ( (a) < TMR_UNITS ) ? \
  R_TMR_ReadUnitAll( (a), (b), (c), (d), (e) ) : \
  ReturnFalse() \
  )
  
  #endif
  /* End of file */
  