Main Page | Modules | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Related Pages | Examples

SJA1000
[Special Hardware]

Collaboration diagram for SJA1000:


Detailed Description

CAN Bus Controller.


Data Structures

struct  _CANBuffer

Defines

#define SJA1000_MODECTRL   (*(volatile u_char*) (sja_base+0))
#define RM_RR_Bit   0x01
#define LOM_Bit   0x02
#define STM_Bit   0x04
#define AFM_Bit   0x08
#define SM_Bit   0x10
#define SJA1000_IEN   (*(volatile u_char*) (sja_base+4))
#define RIE_Bit   0x01
#define TIE_Bit   0x02
#define EIE_Bit   0x04
#define DOIE_Bit   0x08
#define WUIE_Bit   0x10
#define EPIE_Bit   0x20
#define ALIE_Bit   0x40
#define BEIE_Bit   0x80
#define SJA1000_CMD   (*(volatile u_char*) (sja_base+1))
#define TR_Bit   0x01
#define AT_Bit   0x02
#define RRB_Bit   0x04
#define CDO_Bit   0x08
#define SRR_Bit   0x10
#define SJA1000_STATUS   (*(volatile u_char*) (sja_base+2))
#define RBS_Bit   0x01
#define DOS_Bit   0x02
#define TBS_Bit   0x04
#define TCS_Bit   0x08
#define RS_Bit   0x10
#define TS_Bit   0x20
#define ES_Bit   0x40
#define BS_Bit   0x80
#define SJA1000_INT   (*(volatile u_char*) (sja_base+3))
#define RI_Bit   0x01
#define TI_Bit   0x02
#define EI_Bit   0x04
#define DOI_Bit   0x08
#define WUI_Bit   0x10
#define EPI_Bit   0x20
#define ALI_Bit   0x40
#define BEI_Bit   0x80
#define SJA1000_BT0   (*(volatile u_char*) (sja_base+6))
#define SJA1000_BT1   (*(volatile u_char*) (sja_base+7))
#define SAM_Bit   0x80
#define SJA1000_OUTCTRL   (*(volatile u_char*) (sja_base+8))
#define BiPhaseMode   0x00
#define NormalMode   0x02
#define ClkOutMode   0x03
#define ClkOutMode   0x03
#define OCPOL1_Bit   0x20
#define OCPOL1_Bit   0x20
#define Tx1Float   0x00
#define Tx1Float   0x00
#define Tx1PullDn   0x40
#define Tx1PullDn   0x40
#define Tx1PullUp   0x80
#define Tx1PullUp   0x80
#define Tx1PshPull   0xC0
#define Tx1PshPull   0xC0
#define OCPOLO_Bit   0x04
#define Tx0Float   0x00
#define Tx0Float   0x00
#define Tx0PullDn   0x08
#define Tx0PullDn   0x08
#define Tx0PullUp   0x10
#define Tx0PshPull   0x18
#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))
#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))
#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))
#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))
#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))
#define SJA1000_CLK_DIV   (*(volatile u_char*) (sja_base+31))
#define DivBy1   0x07
#define DivBy2   0x00
#define ClkOff_Bit   0x08
#define RXINTEN_Bit   0x20
#define CBP_Bit   0x40
#define CANMode_Bit   0x80
#define OCPOL0_Bit   0x04
#define Presc_MB_16   0x00
#define SJW_MB_16   0x00
#define TSEG1_MB_16   0x04
#define TSEG2_MB_16   0x10
#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
#define CAN_LOST_FRAME   0x01
#define CAN_BUS_OFF   0x02
#define CAN_29   0x80
#define CAN_RTR   0x40
#define ClrIntEnSJA   0x00
#define SJA_SIGNAL   sig_INTERRUPT7
#define SJA_EICR   EICRB
#define SJA_SIGNAL_BIT   7
#define CAN_BufSize   64

Typedefs

typedef _CANBuffer CANBuffer

Functions

void CANBufferInit (CANBuffer *buffer, u_short size)
CANFRAME CANBufferGetMutex (CANBuffer *buffer)
void CANBufferPutMutex (CANBuffer *buffer, CANFRAME *data)
CANFRAME CANBufferGet (CANBuffer *buffer)
void CANBufferPut (CANBuffer *buffer, CANFRAME *data)
u_short CANBufferFree (CANBuffer *buffer)
u_char SJARxAvail (NUTDEVICE *dev)
 checks if data is available in input buffer
u_char SJATxFree (NUTDEVICE *dev)
 checks if there's still space in output buffer
void SJAOutput (NUTDEVICE *dev, CANFRAME *frame)
 Write a frame from to output buffer.
void SJAInput (NUTDEVICE *dev, CANFRAME *frame)
 Reads a frame from input buffer.
void SJASetAccCode (NUTDEVICE *dev, u_char *ac)
 Sets the acceptance code.
void SJASetAccMask (NUTDEVICE *dev, u_char *am)
 Sets the acceptance mask.
u_char SJASetBaudrate (NUTDEVICE *dev, u_long baudrate)
 Sets the baudrate.
void SJATxFrame (CANFRAME *CAN_frame)
 Sends a CAN Frane.
void SJARxFrame (CANFRAME *CAN_frame)
 Receives a CAN Frane.
void CAN_Tx (void *arg)
 CAN transmitter thread.
int SJAInit (NUTDEVICE *dev)
 Initialize SJA1000 Canbus interface.

Variables

NUTDEVICE devSJA1000
 Device information structure.
CANINFO dcb_sja1000
volatile u_short sja_base = 0x0000
CANBuffer CAN_RX_BUF
CANBuffer CAN_TX_BUF
IFCAN ifc_sja1000
 Interface information structure.
NUTDEVICE devSJA1000
 Device information structure.


Function Documentation

SJARxAvail NUTDEVICE dev  )  [inline]
 

checks if data is available in input buffer

Parameters:
dev Pointer to the device structure

SJATxFree NUTDEVICE dev  )  [inline]
 

checks if there's still space in output buffer

Parameters:
dev Pointer to the device structure

SJAOutput NUTDEVICE dev,
CANFRAME frame
 

Write a frame from to output buffer.

This function writes a frame to the output buffer. If the output buffer is full the function will block until frames are send.

Parameters:
dev Pointer to the device structure
frame Pointer to the receive frame

SJAInput NUTDEVICE dev,
CANFRAME frame
 

Reads a frame from input buffer.

This function reads a frame from the input buffer. If the input buffer is empty the function will block unitl new frames are received.

Parameters:
dev Pointer to the device structure
frame Pointer to the receive frame

SJASetAccCode NUTDEVICE dev,
u_char ac
 

Sets the acceptance code.

Parameters:
dev Pointer to the device structure
ac 4 byte char array with the acceptance code

SJASetAccMask NUTDEVICE dev,
u_char am
 

Sets the acceptance mask.

Parameters:
dev Pointer to the device structure
am 4 byte char array with the acceptance mask

SJASetBaudrate NUTDEVICE dev,
u_long  baudrate
 

Sets the baudrate.

Parameters:
dev Pointer to the device structure
baudrate Baudrate (One of the defined baudrates. See sja1000.h)

SJATxFrame CANFRAME CAN_frame  ) 
 

Sends a CAN Frane.

Parameters:
CAN_frame Pointer to the send frame

SJARxFrame CANFRAME CAN_frame  ) 
 

Receives a CAN Frane.

Parameters:
CAN_frame Pointer to the receive frame

CAN_Tx void *  arg  ) 
 

CAN transmitter thread.

This thread transmits data if there's some in the output buffer. It runs with high priority.

SJAInit NUTDEVICE dev  ) 
 

Initialize SJA1000 Canbus interface.

Applications typically do not use this function, but call NutRegisterDevice().

Parameters:
dev Identifies the device to initialize. The structure must be properly set.


Variable Documentation

NUTDEVICE devSJA1000
 

Device information structure.

Applications must pass this structure to NutRegisterDevice() to bind this CAN device driver to the Nut/OS kernel.

IFCAN ifc_sja1000
 

Initial value:

 {
    CAN_IF_2B,                  
    CAN_SPEED_500K,             
    {0xFF, 0xFF, 0xFF, 0xFF}
    ,                           
    {0x00, 0x00, 0x00, 0x00}
    ,                           
    SJARxAvail,                 
    SJATxFree,                  
    SJAInput,                   
    SJAOutput,                  
    SJASetAccCode,              
    SJASetAccMask,              
    SJASetBaudrate              
}
Interface information structure.

This struct stores some interface parameters like bautdate and acceptance mask / code. Beside this Callback handlers are registered.

NUTDEVICE devSJA1000
 

Initial value:

 {
    0,                          
    {'s', 'j', 'a', '1', '0', '0', '0', 0, 0}
    ,                           
    IFTYP_CAN,                  
    0,                          
    0,                          
    &ifc_sja1000,               
    &dcb_sja1000,               
    SJAInit,                    
    0,                          
    0,                          
    0,                          
    0,                          
    0,                          
    0,                          
    0                           
}
Device information structure.

Applications must pass this structure to NutRegisterDevice() to bind this CAN device driver to the Nut/OS kernel.


© 2000-2006 by egnite Software GmbH - visit http://www.ethernut.de/