/*""FILE COMMENT""*******************************************************
* System Name	: I²C API for RX62Nxx
* File Name		: r_pdl_iic.h
* Version		: 1.02
* Contents		: I²C 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_IIC_H
#define R_PDL_IIC_H

#include "r_pdl_common_defs_RX62Nxx.h"

/* Function prototypes */
bool R_IIC_Create(
	uint8_t,
	uint32_t,
	uint32_t,
	uint16_t,
	uint16_t,
	uint16_t,
	uint32_t,
	uint32_t
);
bool R_IIC_Destroy(
	uint8_t
);
bool R_IIC_MasterSend(
	uint8_t,
	uint16_t,
	uint16_t,
	uint8_t *,
	uint16_t,
	void *,
	uint8_t
);
bool R_IIC_MasterReceive(
	uint8_t,
	uint16_t,
	uint16_t,
	uint8_t *,
	uint16_t,
	void *,
	uint8_t
);
bool R_IIC_MasterReceiveLast(
	uint8_t,
	uint8_t *
);
bool R_IIC_SlaveMonitor(
	uint8_t,
	uint16_t,
	uint8_t *,
	uint16_t,
	void *,
	uint8_t
);
bool R_IIC_SlaveSend(
	uint8_t,
	uint8_t *,
	uint16_t
);
bool R_IIC_Control(
	uint8_t,
	uint8_t
);
bool R_IIC_GetStatus(
	uint8_t,
	uint32_t *,
	uint16_t *,
	uint16_t *
);

/* Bus mode */
#define PDL_IIC_MODE_IIC				0x00000001ul
#define PDL_IIC_MODE_IIC_FMP			0x00000002ul
#define PDL_IIC_MODE_SMBUS				0x00000004ul

/* Internal reference clock */
#define PDL_IIC_INT_PCLK_DIV_1			0x00000008ul
#define PDL_IIC_INT_PCLK_DIV_2			0x00000010ul
#define PDL_IIC_INT_PCLK_DIV_4			0x00000020ul
#define PDL_IIC_INT_PCLK_DIV_8			0x00000040ul
#define PDL_IIC_INT_PCLK_DIV_16			0x00000080ul
#define PDL_IIC_INT_PCLK_DIV_32			0x00000100ul
#define PDL_IIC_INT_PCLK_DIV_64			0x00000200ul
#define PDL_IIC_INT_PCLK_DIV_128		0x00000400ul

/* Timeout detection */
#define PDL_IIC_TIMEOUT_DISABLE			0x00000800ul
#define PDL_IIC_TIMEOUT_LOW				0x00001000ul
#define PDL_IIC_TIMEOUT_HIGH			0x00002000ul
#define PDL_IIC_TIMEOUT_BOTH			0x00004000ul

/* Timeout mode */
#define PDL_IIC_TIMEOUT_LONG			0x00008000ul
#define PDL_IIC_TIMEOUT_SHORT			0x00010000ul

/* SDA output delay count */
#define PDL_IIC_SDA_DELAY_0				0x00020000ul
#define PDL_IIC_SDA_DELAY_1				0x00040000ul
#define PDL_IIC_SDA_DELAY_2				0x00080000ul
#define PDL_IIC_SDA_DELAY_3				0x00100000ul
#define PDL_IIC_SDA_DELAY_4				0x00200000ul
#define PDL_IIC_SDA_DELAY_5				0x00400000ul
#define PDL_IIC_SDA_DELAY_6				0x00800000ul
#define PDL_IIC_SDA_DELAY_7				0x01000000ul

/* SDA output delay clock source */
#define PDL_IIC_SDA_DELAY_DIV_1			0x02000000ul
#define PDL_IIC_SDA_DELAY_DIV_2			0x04000000ul

/* Noise filter control */
#define PDL_IIC_NF_DISABLE				0x08000000ul
#define PDL_IIC_NF_1					0x10000000ul
#define PDL_IIC_NF_2					0x20000000ul
#define PDL_IIC_NF_3					0x40000000ul
#define PDL_IIC_NF_4					0x80000000ul

/* NACK Transmission Arbitration Lost Detection control */
#define PDL_IIC_NTALD_DISABLE			0x00000001ul
#define PDL_IIC_NTALD_ENABLE			0x00000002ul

/* Slave Arbitration Lost Detection control */
#define PDL_IIC_SALD_DISABLE 			0x00000004ul
#define PDL_IIC_SALD_ENABLE				0x00000008ul

/* Slave address detection control */
#define PDL_IIC_SLAVE_0_DISABLE			0x00000010ul
#define PDL_IIC_SLAVE_0_ENABLE_7 		0x00000020ul
#define PDL_IIC_SLAVE_0_ENABLE_10		0x00000040ul
#define PDL_IIC_SLAVE_1_DISABLE			0x00000080ul
#define PDL_IIC_SLAVE_1_ENABLE_7		0x00000100ul
#define PDL_IIC_SLAVE_1_ENABLE_10		0x00000200ul
#define PDL_IIC_SLAVE_2_DISABLE			0x00000400ul
#define PDL_IIC_SLAVE_2_ENABLE_7		0x00000800ul
#define PDL_IIC_SLAVE_2_ENABLE_10		0x00001000ul
#define PDL_IIC_SLAVE_GCA_DISABLE 		0x00002000ul
#define PDL_IIC_SLAVE_GCA_ENABLE 		0x00004000ul

/* Device-ID detection control */
#define PDL_IIC_DEVICE_ID_DISABLE		0x00008000ul
#define PDL_IIC_DEVICE_ID_ENABLE		0x00010000ul

/* Host Address detection control */
#define PDL_IIC_HOST_ADDRESS_DISABLE	0x00020000ul
#define PDL_IIC_HOST_ADDRESS_ENABLE		0x00040000ul

/* Start / Repeated Start condition control */
#define PDL_IIC_START_ENABLE				0x0001u
#define PDL_IIC_START_DISABLE				0x0002u

/* Stop condition control */
#define PDL_IIC_STOP_ENABLE					0x0004u
#define PDL_IIC_STOP_DISABLE				0x0008u

/* Master DMAC / DTC trigger control */
#define PDL_IIC_DMAC_DTC_TRIGGER_DISABLE	0x0010u
#define PDL_IIC_DMAC_TRIGGER_ENABLE			0x0020u
#define PDL_IIC_DTC_TRIGGER_ENABLE			0x0040u

/* Slave DMAC / DTC trigger control */
#define PDL_IIC_RX_DMAC_DTC_TRIGGER_DISABLE	0x0080u
#define PDL_IIC_RX_DMAC_TRIGGER_ENABLE		0x0100u
#define PDL_IIC_RX_DTC_TRIGGER_ENABLE		0x0200u
#define PDL_IIC_TX_DMAC_DTC_TRIGGER_DISABLE	0x0400u
#define PDL_IIC_TX_DMAC_TRIGGER_ENABLE		0x0800u
#define PDL_IIC_TX_DTC_TRIGGER_ENABLE		0x1000u

/* Stop generation */
#define PDL_IIC_STOP		0x01u

/* NACK generation */
#define PDL_IIC_NACK		0x02u

/* Pin control */
#define PDL_IIC_SDA_LOW		0x04u
#define PDL_IIC_SDA_HI_Z	0x08u
#define PDL_IIC_SCL_LOW		0x10u
#define PDL_IIC_SCL_HI_Z	0x20u

/* Extra clock cycle generation */
#define PDL_IIC_CYCLE_SCL	0x40u

/* Reset control */
#define PDL_IIC_RESET		0x80u

#endif
/* End of file */