HWBS/ECU_APP/rscan_driver/r_rl78_can_drv.h
2023-08-21 16:48:00 +08:00

159 lines
6.9 KiB
C

/*******************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only
* intended for use with Renesas products. No other uses are authorized. This
* software is owned by Renesas Electronics Corporation and is protected under
* all applicable laws, including copyright laws.
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software
* and to discontinue the availability of this software. By using this software,
* you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2013 Renesas Electronics Corporation. All rights reserved.
*******************************************************************************/
/*******************************************************************************
* File Name : r_rl78_can_drv.h
* Version : 1.0
* Description : This is header file for CAN driver code.
******************************************************************************/
/*****************************************************************************
* History : DD.MM.YYYY Version Description
* : 29.03.2013 1.00 First Release
******************************************************************************/
#ifndef R_RL78_CAN_DRV_H
#define R_RL78_CAN_DRV_H
typedef signed char CHAR;
typedef unsigned char UCHAR;
typedef signed short INT;
typedef unsigned short UINT;
typedef unsigned int Can_RtnType;
typedef UCHAR can_ch_t;
typedef UCHAR can_rxfifo_t;
typedef UCHAR can_trfifo_t;
typedef UCHAR can_txbuf_t;
/* ---- Channel ---- */
#define CAN_CH0 0U
/* ---- Rx FIFO ---- */
#define CAN_RXFIFO0 0U
#define CAN_RXFIFO1 1U
#define CAN_MAX_RXFIFO_NUM 2U
/* ---- Common (Tx/Rx) FIFO ---- */
#define CAN_TRFIFO0 0U
#define CAN_MAX_TRFIFO_NUM 1U
/* ---- Tx buffers ---- */
#define CAN_TXBUF0 0U
#define CAN_TXBUF1 1U
#define CAN_TXBUF2 2U
#define CAN_TXBUF3 3U
#define CAN_MAX_TXBUF_NUM 4U
/* ---- CAN frame ----- */
typedef struct
{
UINT IDL:16; /* ID Data (low) */
UINT IDH:13; /* ID Data (high) */
UINT THDSE :1; /* Transmit History Data Store Enable */
UINT RTR :1; /* RTR 0:Data 1:Remote */
UINT IDE :1; /* IDE 0:Standard 1:Extend */
UINT TS :16; /* Timestamp Data */
UINT LBL :12; /* Label Data */
UINT DLC :4; /* DLC Data */
UCHAR DB[8]; /* Data Byte */
} can_frame_t;
#if 0
//only for test
typedef struct _IoInput_
{
/*previous value,middle variable value , finally value of the switches,used for
cleaning up the botton's dithering*/
UINT unused : 1;
UINT swIn : 1; /* Read from I/O pin.*/
UINT in : 1; /* Used by program,related to inMode.*/
UINT preSwIn : 1; /* Previous value read from I/O pin.*/
UINT preVal : 1;
UINT curVal : 1;
UINT inMode : 2;
UINT shakeCnt : 4; /* Switch shaking counter */
UINT shakeNum : 4; /* Switvh shaking number */
} IoInput;
#endif
extern const UCHAR g_rxfifo0_use_mode;
extern const UCHAR g_rxfifo1_use_mode;
extern const UCHAR g_trfifo_use_mode;
extern const UCHAR g_fifo_lost_isr;
extern const UINT g_rxrule_table[][6];
/* ---- Configuration ---- */
#define CAN_NOUSE 0x00U
#define CAN_USE 0x80U
#define CAN_USE_RX_MODE 0x81U
#define CAN_USE_TX_MODE 0x82U
#define CAN_USE_CH_MASK 0x07U
/* ---- function return value ---- */
#define CAN_RTN_OK 0U
#define CAN_RTN_OK_WITH_LOST 1U
#define CAN_RTN_FIFO_FULL 2U
#define CAN_RTN_BUFFER_EMPTY 3U
#define CAN_RTN_MODE_WAIT 4U
#define CAN_RTN_RAM_INIT 5U
#define CAN_RTN_TRANSMITTING 0U
#define CAN_RTN_TX_ABORT_OVER 1U
#define CAN_RTN_TX_END 2U
#define CAN_RTN_TX_END_WITH_ABORT_REQ 3U
#define CAN_RTN_ERROR (0x8000U)
#define CAN_RTN_ARG_ERROR (CAN_RTN_ERROR + 0x7FFF)
#define CAN_RTN_STS_ERROR (CAN_RTN_ERROR + 0x7FFE)
#define CAN_RTN_OVERWRITE (CAN_RTN_ERROR + 0x7FFD)
#define CAN_RTN_MODE_ERROR (CAN_RTN_ERROR + 0x7FFC)
/******************************************************************************
Exported global functions (to be accessed by other files)
******************************************************************************/
extern Can_RtnType R_CAN_Init(void);
extern Can_RtnType R_CAN_GlobalStart(void);
extern Can_RtnType R_CAN_ChStart_CH0(void);
extern Can_RtnType R_CAN_TrmByTxBuf_CH0(can_txbuf_t, const can_frame_t *);
extern Can_RtnType R_CAN_AbortTrm_CH0(can_txbuf_t);
extern Can_RtnType R_CAN_CheckTxBufResult_CH0(can_txbuf_t);
extern Can_RtnType R_CAN_TrmByTRFIFO0_CH0(const can_frame_t *);
extern Can_RtnType R_CAN_ReadRxBuffer(UCHAR *, can_frame_t *);
extern Can_RtnType R_CAN_ReadRxFIFO(can_rxfifo_t, can_frame_t *);
extern Can_RtnType R_CAN_ReadTRFIFO0_CH0(can_frame_t *);
extern Can_RtnType R_CAN_ReadChStatus_CH0(void);
void enable_interrupt_request_mask(void);
#define R_CAN_ChStart(val1) (R_CAN_ChStart_CH0())
#define R_CAN_TrmByTxBuf(val1, val2, val3) (R_CAN_TrmByTxBuf_CH0(val2, val3))
#define R_CAN_AbortTrm(val1, val2) (R_CAN_AbortTrm_CH0(val2))
#define R_CAN_CheckTxBufResult(val1, val2) (R_CAN_CheckTxBufResult_CH0(val2))
#define R_CAN_TrmByTRFIFO(val1, val2, val3) (R_CAN_TrmByTRFIFO_CH0(val3))
#define R_CAN_ReadTRFIFO(val1, val2, val3) (R_CAN_ReadTRFIFO0_CH0(val3))
#define R_CAN_ReadChStatus(val1) (R_CAN_ReadChStatus_CH0())
extern void CanUserInit(void);
extern can_frame_t frame,frame1;
#endif /* R_RL78_CAN_DRV_H */