⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sja1000.h

📁 含有完整TCP/IP PPP协议的嵌入式操作系统
💻 H
字号:
/* * Copyright (C) 2004 by Ole Reinhardt <ole.reinhardt@kernelconcepts.de>, *                       Kernelconcepts http://www.kernelconcepts.de * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. Neither the name of the copyright holders nor the names of *    contributors may be used to endorse or promote products derived *    from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY EGNITE SOFTWARE GMBH AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL EGNITE * SOFTWARE GMBH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * For additional information see http://www.ethernut.de/ * *//*! * \file include/dev/sja1000.h * \brief Header for SJA1000 CAN-Bus controller driver * * * The SJA1000 controller is connected to the memory bus. It's base * address and interrupt is set by NutRegisterDevice. * * Have a look to our m-can board if you have questions. *//*! * \addtogroup xgCanSJA1000 *//*@{*/#ifndef _SJA1000_H_#define _SJA1000_H_//Register and bit definitions for the SJA1000// address and bit definitions for the Mode & Control Register#define SJA1000_MODECTRL (*(volatile u_char*) (sja_base+0))#define RM_RR_Bit   0x01        // reset mode (request) bit#define LOM_Bit     0x02        // listen only mode bit#define STM_Bit     0x04        // self test mode bit#define AFM_Bit     0x08        // acceptance filter mode bit#define SM_Bit      0x10        // enter sleep mode bit// address and bit definitions for the Interrupt Enable & Control Register#define SJA1000_IEN (*(volatile u_char*) (sja_base+4))      // PeliCAN mode#define RIE_Bit     0x01        // receive interrupt enable bit#define TIE_Bit     0x02        // transmit interrupt enable bit#define EIE_Bit     0x04        // error warning interrupt enable bit#define DOIE_Bit    0x08        // data overrun interrupt enable bit#define WUIE_Bit    0x10        // wake-up interrupt enable bit#define EPIE_Bit    0x20        // error passive interrupt enable bit#define ALIE_Bit    0x40        // arbitration lost interr. enable bit#define BEIE_Bit    0x80        // bus error interrupt enable bit// address and bit definitions for the Command Register#define SJA1000_CMD (*(volatile u_char*) (sja_base+1))#define TR_Bit      0x01        // transmission request bit#define AT_Bit      0x02        // abort transmission bit#define RRB_Bit     0x04        // release receive buffer bit#define CDO_Bit     0x08        // clear data overrun bit#define SRR_Bit     0x10        // self reception request bit// address and bit definitions for the Status Register#define SJA1000_STATUS (*(volatile u_char*) (sja_base+2))#define RBS_Bit     0x01        // receive buffer status bit#define DOS_Bit     0x02        // data overrun status bit#define TBS_Bit     0x04        // transmit buffer status bit#define TCS_Bit     0x08        // transmission complete status bit#define RS_Bit      0x10        // receive status bit#define TS_Bit      0x20        // transmit status bit#define ES_Bit      0x40        // error status bit#define BS_Bit      0x80        // bus status bit// address and bit definitions for the Interrupt Register#define SJA1000_INT (*(volatile u_char*) (sja_base+3))#define RI_Bit      0x01        // receive interrupt bit#define TI_Bit      0x02        // transmit interrupt bit#define EI_Bit      0x04        // error warning interrupt bit#define DOI_Bit     0x08        // data overrun interrupt bit#define WUI_Bit     0x10        // wake-up interrupt bit#define EPI_Bit     0x20        // error passive interrupt bit#define ALI_Bit     0x40        // arbitration lost interrupt bit#define BEI_Bit     0x80        // bus error interrupt bit// address and bit definitions for the Bus Timing Registers#define SJA1000_BT0 (*(volatile u_char*) (sja_base+6))#define SJA1000_BT1 (*(volatile u_char*) (sja_base+7))#define SAM_Bit     0x80        // sample mode bit                                //   1 == the bus is sampled 3 times                                //   0 == the bus is sampled once */// address and bit definitions for the Output Control Register#define SJA1000_OUTCTRL (*(volatile u_char*) (sja_base+8))// OCMODE1, OCMODE0#define BiPhaseMode 0x00        // bi-phase output mode#define NormalMode  0x02        // normal output mode#define ClkOutMode  0x03        // clock output mode// output pin configuration for TX1#define OCPOL1_Bit  0x20        // output polarity control bit#define Tx1Float    0x00        // configured as float#define Tx1PullDn   0x40        // configured as pull-down#define Tx1PullUp   0x80        // configured as pull-up#define Tx1PshPull  0xC0        // configured as push/pull// output configuration for TX0#define OCPOLO_Bit  0x04        // output polarity control bit#define Tx0Float    0x00        // configured as float#define Tx0PullDn   0x08        // configured as pull-down#define Tx0PullUp   0x10        // configured as pull-up#define Tx0PshPull  0x18        // configured as push/pull// address definitions of Acceptance Code & Mask Registers#define SJA1000_AC0 (*(volatile u_char*) (sja_base+16))#define SJA1000_AC1 (*(volatile u_char*) (sja_base+17))#define SJA1000_AC2 (*(volatile u_char*) (sja_base+18))#define SJA1000_AC3 (*(volatile u_char*) (sja_base+19))#define SJA1000_AM0 (*(volatile u_char*) (sja_base+20))#define SJA1000_AM1 (*(volatile u_char*) (sja_base+21))#define SJA1000_AM2 (*(volatile u_char*) (sja_base+22))#define SJA1000_AM3 (*(volatile u_char*) (sja_base+23))// address definitions of the Rx-Buffer#define SJA1000_RxFrameInfo (*(volatile u_char*) (sja_base+16))#define SJA1000_Rx1   (*(volatile u_char*) (sja_base+17))#define SJA1000_Rx2   (*(volatile u_char*) (sja_base+18))#define SJA1000_Rx3   (*(volatile u_char*) (sja_base+19))#define SJA1000_Rx4   (*(volatile u_char*) (sja_base+20))#define SJA1000_Rx5   (*(volatile u_char*) (sja_base+21))#define SJA1000_Rx6   (*(volatile u_char*) (sja_base+22))#define SJA1000_Rx7   (*(volatile u_char*) (sja_base+23))#define SJA1000_Rx8   (*(volatile u_char*) (sja_base+24))#define SJA1000_Rx9   (*(volatile u_char*) (sja_base+25))#define SJA1000_Rx10  (*(volatile u_char*) (sja_base+26))#define SJA1000_Rx11  (*(volatile u_char*) (sja_base+27))#define SJA1000_Rx12  (*(volatile u_char*) (sja_base+28))// address definitions of the Tx-Buffer/* write only addresses */#define TestReg (*(volatile u_char*) (sja_base+9))#define SJA1000_TxFrameInfo (*(volatile u_char*) (sja_base+16))#define SJA1000_Tx1   (*(volatile u_char*) (sja_base+17))#define SJA1000_Tx2   (*(volatile u_char*) (sja_base+18))#define SJA1000_Tx3   (*(volatile u_char*) (sja_base+19))#define SJA1000_Tx4   (*(volatile u_char*) (sja_base+20))#define SJA1000_Tx5   (*(volatile u_char*) (sja_base+21))#define SJA1000_Tx6   (*(volatile u_char*) (sja_base+22))#define SJA1000_Tx7   (*(volatile u_char*) (sja_base+23))#define SJA1000_Tx8   (*(volatile u_char*) (sja_base+24))#define SJA1000_Tx9   (*(volatile u_char*) (sja_base+25))#define SJA1000_Tx10  (*(volatile u_char*) (sja_base+26))#define SJA1000_Tx11  (*(volatile u_char*) (sja_base+27))#define SJA1000_Tx12  (*(volatile u_char*) (sja_base+28))/* read only addresses */#define SJA1000_TxFrameInfoRd (*(volatile u_char*) (sja_base+96))#define SJA1000_TxRd1  (*(volatile u_char*) (sja_base+97))#define SJA1000_TxRd2  (*(volatile u_char*) (sja_base+98))#define SJA1000_TxRd3  (*(volatile u_char*) (sja_base+99))#define SJA1000_TxRd4  (*(volatile u_char*) (sja_base+100))#define SJA1000_TxRd5  (*(volatile u_char*) (sja_base+101))#define SJA1000_TxRd6  (*(volatile u_char*) (sja_base+102))#define SJA1000_TxRd7  (*(volatile u_char*) (sja_base+103))#define SJA1000_TxRd8  (*(volatile u_char*) (sja_base+104))#define SJA1000_TxRd9  (*(volatile u_char*) (sja_base+105))#define SJA1000_TxRd10 (*(volatile u_char*) (sja_base+106))#define SJA1000_TxRd11 (*(volatile u_char*) (sja_base+107))#define SJA1000_TxRd12 (*(volatile u_char*) (sja_base+108))// address definitions of Other Registers#define SJA1000_ArbLostCap    (*(volatile u_char*) (sja_base+11))#define SJA1000_ErrCodeCap    (*(volatile u_char*) (sja_base+12))#define SJA1000_ErrWarnLimit  (*(volatile u_char*) (sja_base+13))#define SJA1000_RxErrCount    (*(volatile u_char*) (sja_base+14))#define SJA1000_TxErrCount    (*(volatile u_char*) (sja_base+15))#define SJA1000_RxMsgCount    (*(volatile u_char*) (sja_base+29))#define SJA1000_RxBufStartAdr (*(volatile u_char*) (sja_base+30))// address and bit definitions for the Clock Divider Register#define SJA1000_CLK_DIV (*(volatile u_char*) (sja_base+31))#define DivBy1       0x07       // CLKOUT = oscillator frequency#define DivBy2       0x00       // CLKOUT = 1/2 oscillator frequency#define ClkOff_Bit   0x08       // clock off bit, control of the CLK OUT pin#define RXINTEN_Bit  0x20       // pin TX1 used for receive interrupt#define CBP_Bit      0x40       // CAN comparator bypass control bit#define CANMode_Bit  0x80       // CAN mode definition bit#define ClkOutMode   0x03       // clock output mode// output pin configuration for TX1#define OCPOL1_Bit   0x20       // output polarity control bit#define Tx1Float     0x00       // configured as float#define Tx1PullDn    0x40       // configured as pull-down#define Tx1PullUp    0x80       // configured as pull-up#define Tx1PshPull   0xC0       // configured as push/pull// output pin configuration for TX0#define OCPOL0_Bit   0x04       // output polarity control bit#define Tx0Float     0x00       // configured as float#define Tx0PullDn    0x08       // configured as pull-down// Some sample konstants/* bus timing values for     - bit-rate : 1 MBit/s     - oscillator frequency : 16 MHz, 0,1%     - maximum tolerated propagation delay : 623 ns     - minimum requested propagation delay : 23 ns*/#define Presc_MB_16  0x00       // baud rate prescaler : 1#define SJW_MB_16    0x00       // SJW : 1#define TSEG1_MB_16  0x04       // TSEG1 : 5#define TSEG2_MB_16  0x10       // TSEG2 : 2// Error codes#define errCAN_INVALID_BAUD   7#define CAN_OK                0#define CAN_ERR               1#define CAN_INIT_SPEED_ERR    1#define CAN_NOT_INITIATED     1#define CAN_NOT_STARTED       1#define CAN_TXBUF_FULL        2#define CAN_RXBUF_EMPTY       2//  Flag bits#define CAN_LOST_FRAME        0x01#define CAN_BUS_OFF           0x02//  Frame Flag bits#define CAN_29                0x80#define CAN_RTR               0x40#define ClrIntEnSJA 	      0x00extern NUTDEVICE devSJA1000;#endif/*@}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -