Nut/OS  5.0.5
API Reference
SJA1000

CAN Bus Controller. More...

Collaboration diagram for SJA1000:

Data Structures

struct  _CANBuffer

Defines

#define SJA1000_MODECTRL   (*(volatile uint8_t*) (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 uint8_t*) (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 uint8_t*) (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 uint8_t*) (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 uint8_t*) (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 uint8_t*) (sja_base+6))
#define SJA1000_BT1   (*(volatile uint8_t*) (sja_base+7))
#define SAM_Bit   0x80
#define SJA1000_OUTCTRL   (*(volatile uint8_t*) (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 uint8_t*) (sja_base+16))
#define SJA1000_AC1   (*(volatile uint8_t*) (sja_base+17))
#define SJA1000_AC2   (*(volatile uint8_t*) (sja_base+18))
#define SJA1000_AC3   (*(volatile uint8_t*) (sja_base+19))
#define SJA1000_AM0   (*(volatile uint8_t*) (sja_base+20))
#define SJA1000_AM1   (*(volatile uint8_t*) (sja_base+21))
#define SJA1000_AM2   (*(volatile uint8_t*) (sja_base+22))
#define SJA1000_AM3   (*(volatile uint8_t*) (sja_base+23))
#define SJA1000_RxFrameInfo   (*(volatile uint8_t*) (sja_base+16))
#define SJA1000_Rx1   (*(volatile uint8_t*) (sja_base+17))
#define SJA1000_Rx2   (*(volatile uint8_t*) (sja_base+18))
#define SJA1000_Rx3   (*(volatile uint8_t*) (sja_base+19))
#define SJA1000_Rx4   (*(volatile uint8_t*) (sja_base+20))
#define SJA1000_Rx5   (*(volatile uint8_t*) (sja_base+21))
#define SJA1000_Rx6   (*(volatile uint8_t*) (sja_base+22))
#define SJA1000_Rx7   (*(volatile uint8_t*) (sja_base+23))
#define SJA1000_Rx8   (*(volatile uint8_t*) (sja_base+24))
#define SJA1000_Rx9   (*(volatile uint8_t*) (sja_base+25))
#define SJA1000_Rx10   (*(volatile uint8_t*) (sja_base+26))
#define SJA1000_Rx11   (*(volatile uint8_t*) (sja_base+27))
#define SJA1000_Rx12   (*(volatile uint8_t*) (sja_base+28))
#define TestReg   (*(volatile uint8_t*) (sja_base+9))
#define SJA1000_TxFrameInfo   (*(volatile uint8_t*) (sja_base+16))
#define SJA1000_Tx1   (*(volatile uint8_t*) (sja_base+17))
#define SJA1000_Tx2   (*(volatile uint8_t*) (sja_base+18))
#define SJA1000_Tx3   (*(volatile uint8_t*) (sja_base+19))
#define SJA1000_Tx4   (*(volatile uint8_t*) (sja_base+20))
#define SJA1000_Tx5   (*(volatile uint8_t*) (sja_base+21))
#define SJA1000_Tx6   (*(volatile uint8_t*) (sja_base+22))
#define SJA1000_Tx7   (*(volatile uint8_t*) (sja_base+23))
#define SJA1000_Tx8   (*(volatile uint8_t*) (sja_base+24))
#define SJA1000_Tx9   (*(volatile uint8_t*) (sja_base+25))
#define SJA1000_Tx10   (*(volatile uint8_t*) (sja_base+26))
#define SJA1000_Tx11   (*(volatile uint8_t*) (sja_base+27))
#define SJA1000_Tx12   (*(volatile uint8_t*) (sja_base+28))
#define SJA1000_TxFrameInfoRd   (*(volatile uint8_t*) (sja_base+96))
#define SJA1000_TxRd1   (*(volatile uint8_t*) (sja_base+97))
#define SJA1000_TxRd2   (*(volatile uint8_t*) (sja_base+98))
#define SJA1000_TxRd3   (*(volatile uint8_t*) (sja_base+99))
#define SJA1000_TxRd4   (*(volatile uint8_t*) (sja_base+100))
#define SJA1000_TxRd5   (*(volatile uint8_t*) (sja_base+101))
#define SJA1000_TxRd6   (*(volatile uint8_t*) (sja_base+102))
#define SJA1000_TxRd7   (*(volatile uint8_t*) (sja_base+103))
#define SJA1000_TxRd8   (*(volatile uint8_t*) (sja_base+104))
#define SJA1000_TxRd9   (*(volatile uint8_t*) (sja_base+105))
#define SJA1000_TxRd10   (*(volatile uint8_t*) (sja_base+106))
#define SJA1000_TxRd11   (*(volatile uint8_t*) (sja_base+107))
#define SJA1000_TxRd12   (*(volatile uint8_t*) (sja_base+108))
#define SJA1000_ArbLostCap   (*(volatile uint8_t*) (sja_base+11))
#define SJA1000_ErrCodeCap   (*(volatile uint8_t*) (sja_base+12))
#define SJA1000_ErrWarnLimit   (*(volatile uint8_t*) (sja_base+13))
#define SJA1000_RxErrCount   (*(volatile uint8_t*) (sja_base+14))
#define SJA1000_TxErrCount   (*(volatile uint8_t*) (sja_base+15))
#define SJA1000_RxMsgCount   (*(volatile uint8_t*) (sja_base+29))
#define SJA1000_RxBufStartAdr   (*(volatile uint8_t*) (sja_base+30))
#define SJA1000_CLK_DIV   (*(volatile uint8_t*) (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 SJA_BASE   0x8800
#define CAN_BufSize   64

Typedefs

typedef struct _CANBuffer CANBuffer

Functions

void CANBufferInit (CANBuffer *buffer, uint16_t size)
CANFRAME CANBufferGetMutex (CANBuffer *buffer)
void CANBufferPutMutex (CANBuffer *buffer, CANFRAME *data)
CANFRAME CANBufferGet (CANBuffer *buffer)
void CANBufferPut (CANBuffer *buffer, CANFRAME *data)
uint16_t CANBufferFree (CANBuffer *buffer)
uint8_t SJARxAvail (NUTDEVICE *dev)
 checks if data is available in input buffer
uint8_t 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.
uint8_t SJAInput (NUTDEVICE *dev, CANFRAME *frame)
 Reads a frame from input buffer.
void SJASetAccCode (NUTDEVICE *dev, uint8_t *ac)
 Sets the acceptance code.
void SJASetAccMask (NUTDEVICE *dev, uint8_t *am)
 Sets the acceptance mask.
uint8_t SJASetBaudrate (NUTDEVICE *dev, uint32_t 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 uint16_t sja_base = 0x0000
CANBuffer CAN_RX_BUF
CANBuffer CAN_TX_BUF
IFCAN ifc_sja1000
 Interface information structure.
NUTDEVICE devSJA1000
 Device information structure.

Detailed Description

CAN Bus Controller.


Define Documentation

#define SJA1000_MODECTRL   (*(volatile uint8_t*) (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 uint8_t*) (sja_base+4))

Referenced by SJAInit(), and SJAInput().

#define RIE_Bit   0x01

Referenced by SJAInit(), and SJAInput().

#define TIE_Bit   0x02

Referenced by SJAInit().

#define EIE_Bit   0x04

Referenced by SJAInit().

#define DOIE_Bit   0x08

Referenced by SJAInit().

#define WUIE_Bit   0x10
#define EPIE_Bit   0x20
#define ALIE_Bit   0x40
#define BEIE_Bit   0x80
#define SJA1000_CMD   (*(volatile uint8_t*) (sja_base+1))

Referenced by SJARxFrame(), and SJATxFrame().

#define TR_Bit   0x01

Referenced by SJATxFrame().

#define AT_Bit   0x02
#define RRB_Bit   0x04

Referenced by SJARxFrame().

#define CDO_Bit   0x08
#define SRR_Bit   0x10
#define SJA1000_STATUS   (*(volatile uint8_t*) (sja_base+2))

Referenced by CAN_Tx().

#define RBS_Bit   0x01
#define DOS_Bit   0x02
#define TBS_Bit   0x04

Referenced by CAN_Tx().

#define TCS_Bit   0x08
#define RS_Bit   0x10
#define TS_Bit   0x20
#define ES_Bit   0x40
#define BS_Bit   0x80
#define SJA1000_INT   (*(volatile uint8_t*) (sja_base+3))

Referenced by SJAInit().

#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 uint8_t*) (sja_base+6))

Referenced by SJAInit(), and SJASetBaudrate().

#define SJA1000_BT1   (*(volatile uint8_t*) (sja_base+7))

Referenced by SJAInit(), and SJASetBaudrate().

#define SAM_Bit   0x80
#define SJA1000_OUTCTRL   (*(volatile uint8_t*) (sja_base+8))

Referenced by SJAInit().

#define BiPhaseMode   0x00
#define NormalMode   0x02

Referenced by SJAInit().

#define ClkOutMode   0x03
#define ClkOutMode   0x03
#define OCPOL1_Bit   0x20
#define OCPOL1_Bit   0x20
#define Tx1Float   0x00

Referenced by SJAInit().

#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

Referenced by SJAInit().

#define SJA1000_AC0   (*(volatile uint8_t*) (sja_base+16))

Referenced by SJAInit(), and SJASetAccCode().

#define SJA1000_AC1   (*(volatile uint8_t*) (sja_base+17))

Referenced by SJAInit(), and SJASetAccCode().

#define SJA1000_AC2   (*(volatile uint8_t*) (sja_base+18))

Referenced by SJAInit(), and SJASetAccCode().

#define SJA1000_AC3   (*(volatile uint8_t*) (sja_base+19))

Referenced by SJAInit(), and SJASetAccCode().

#define SJA1000_AM0   (*(volatile uint8_t*) (sja_base+20))

Referenced by SJAInit(), and SJASetAccMask().

#define SJA1000_AM1   (*(volatile uint8_t*) (sja_base+21))

Referenced by SJAInit(), and SJASetAccMask().

#define SJA1000_AM2   (*(volatile uint8_t*) (sja_base+22))

Referenced by SJAInit(), and SJASetAccMask().

#define SJA1000_AM3   (*(volatile uint8_t*) (sja_base+23))

Referenced by SJAInit(), and SJASetAccMask().

#define SJA1000_RxFrameInfo   (*(volatile uint8_t*) (sja_base+16))

Referenced by SJARxFrame().

#define SJA1000_Rx1   (*(volatile uint8_t*) (sja_base+17))

Referenced by SJARxFrame().

#define SJA1000_Rx2   (*(volatile uint8_t*) (sja_base+18))

Referenced by SJARxFrame().

#define SJA1000_Rx3   (*(volatile uint8_t*) (sja_base+19))

Referenced by SJARxFrame().

#define SJA1000_Rx4   (*(volatile uint8_t*) (sja_base+20))

Referenced by SJARxFrame().

#define SJA1000_Rx5   (*(volatile uint8_t*) (sja_base+21))

Referenced by SJARxFrame().

#define SJA1000_Rx6   (*(volatile uint8_t*) (sja_base+22))

Referenced by SJARxFrame().

#define SJA1000_Rx7   (*(volatile uint8_t*) (sja_base+23))

Referenced by SJARxFrame().

#define SJA1000_Rx8   (*(volatile uint8_t*) (sja_base+24))

Referenced by SJARxFrame().

#define SJA1000_Rx9   (*(volatile uint8_t*) (sja_base+25))

Referenced by SJARxFrame().

#define SJA1000_Rx10   (*(volatile uint8_t*) (sja_base+26))

Referenced by SJARxFrame().

#define SJA1000_Rx11   (*(volatile uint8_t*) (sja_base+27))

Referenced by SJARxFrame().

#define SJA1000_Rx12   (*(volatile uint8_t*) (sja_base+28))

Referenced by SJARxFrame().

#define TestReg   (*(volatile uint8_t*) (sja_base+9))
#define SJA1000_TxFrameInfo   (*(volatile uint8_t*) (sja_base+16))

Referenced by SJATxFrame().

#define SJA1000_Tx1   (*(volatile uint8_t*) (sja_base+17))

Referenced by SJATxFrame().

#define SJA1000_Tx2   (*(volatile uint8_t*) (sja_base+18))

Referenced by SJATxFrame().

#define SJA1000_Tx3   (*(volatile uint8_t*) (sja_base+19))

Referenced by SJATxFrame().

#define SJA1000_Tx4   (*(volatile uint8_t*) (sja_base+20))

Referenced by SJATxFrame().

#define SJA1000_Tx5   (*(volatile uint8_t*) (sja_base+21))

Referenced by SJATxFrame().

#define SJA1000_Tx6   (*(volatile uint8_t*) (sja_base+22))

Referenced by SJATxFrame().

#define SJA1000_Tx7   (*(volatile uint8_t*) (sja_base+23))

Referenced by SJATxFrame().

#define SJA1000_Tx8   (*(volatile uint8_t*) (sja_base+24))

Referenced by SJATxFrame().

#define SJA1000_Tx9   (*(volatile uint8_t*) (sja_base+25))

Referenced by SJATxFrame().

#define SJA1000_Tx10   (*(volatile uint8_t*) (sja_base+26))

Referenced by SJATxFrame().

#define SJA1000_Tx11   (*(volatile uint8_t*) (sja_base+27))

Referenced by SJATxFrame().

#define SJA1000_Tx12   (*(volatile uint8_t*) (sja_base+28))

Referenced by SJATxFrame().

#define SJA1000_TxFrameInfoRd   (*(volatile uint8_t*) (sja_base+96))
#define SJA1000_TxRd1   (*(volatile uint8_t*) (sja_base+97))
#define SJA1000_TxRd2   (*(volatile uint8_t*) (sja_base+98))
#define SJA1000_TxRd3   (*(volatile uint8_t*) (sja_base+99))
#define SJA1000_TxRd4   (*(volatile uint8_t*) (sja_base+100))
#define SJA1000_TxRd5   (*(volatile uint8_t*) (sja_base+101))
#define SJA1000_TxRd6   (*(volatile uint8_t*) (sja_base+102))
#define SJA1000_TxRd7   (*(volatile uint8_t*) (sja_base+103))
#define SJA1000_TxRd8   (*(volatile uint8_t*) (sja_base+104))
#define SJA1000_TxRd9   (*(volatile uint8_t*) (sja_base+105))
#define SJA1000_TxRd10   (*(volatile uint8_t*) (sja_base+106))
#define SJA1000_TxRd11   (*(volatile uint8_t*) (sja_base+107))
#define SJA1000_TxRd12   (*(volatile uint8_t*) (sja_base+108))
#define SJA1000_ArbLostCap   (*(volatile uint8_t*) (sja_base+11))
#define SJA1000_ErrCodeCap   (*(volatile uint8_t*) (sja_base+12))
#define SJA1000_ErrWarnLimit   (*(volatile uint8_t*) (sja_base+13))
#define SJA1000_RxErrCount   (*(volatile uint8_t*) (sja_base+14))
#define SJA1000_TxErrCount   (*(volatile uint8_t*) (sja_base+15))
#define SJA1000_RxMsgCount   (*(volatile uint8_t*) (sja_base+29))
#define SJA1000_RxBufStartAdr   (*(volatile uint8_t*) (sja_base+30))
#define SJA1000_CLK_DIV   (*(volatile uint8_t*) (sja_base+31))

Referenced by SJAInit().

#define DivBy1   0x07
#define DivBy2   0x00

Referenced by SJAInit().

#define ClkOff_Bit   0x08

Referenced by SJAInit().

#define RXINTEN_Bit   0x20
#define CBP_Bit   0x40

Referenced by SJAInit().

#define CANMode_Bit   0x80

Referenced by SJAInit().

#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

Referenced by SJAInit().

#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

Referenced by SJARxFrame(), and SJATxFrame().

#define CAN_RTR   0x40

Referenced by SJARxFrame(), and SJATxFrame().

#define ClrIntEnSJA   0x00

Referenced by SJAInit().

#define SJA_SIGNAL   sig_INTERRUPT7

Referenced by SJAInit().

#define SJA_EICR   EICRB
#define SJA_SIGNAL_BIT   7

Referenced by SJAInit().

#define SJA_BASE   0x8800

Referenced by SJAInit().

#define CAN_BufSize   64

Referenced by CANBufferInit(), and SJAInit().


Typedef Documentation

typedef struct _CANBuffer CANBuffer

Function Documentation

void CANBufferInit ( CANBuffer buffer,
uint16_t  size 
)

References CAN_BufSize, _CANBuffer::dataindex, _CANBuffer::datalength, _CANBuffer::dataptr, _CANBuffer::empty, _CANBuffer::full, NutHeapAlloc, NutSemInit(), and _CANBuffer::size.

Referenced by SJAInit().

Here is the call graph for this function:

CANFRAME CANBufferGetMutex ( CANBuffer buffer)

References _CANBuffer::dataindex, _CANBuffer::datalength, _CANBuffer::dataptr, _CANBuffer::empty, _CANBuffer::full, NutSemPost(), NutSemWait(), and _CANBuffer::size.

Referenced by CAN_Tx().

Here is the call graph for this function:

void CANBufferPutMutex ( CANBuffer buffer,
CANFRAME data 
)

References _CANBuffer::dataindex, _CANBuffer::datalength, _CANBuffer::dataptr, _CANBuffer::empty, _CANBuffer::full, NutSemPost(), NutSemWait(), and _CANBuffer::size.

Referenced by SJAOutput().

Here is the call graph for this function:

void CANBufferPut ( CANBuffer buffer,
CANFRAME data 
)
uint16_t CANBufferFree ( CANBuffer buffer)

References _CANBuffer::datalength, and _CANBuffer::size.

Referenced by SJATxFree().

SJARxAvail ( NUTDEVICE dev) [inline]

checks if data is available in input buffer

Parameters:
devPointer to the device structure

References _CANBuffer::datalength.

SJATxFree ( NUTDEVICE dev) [inline]

checks if there's still space in output buffer

Parameters:
devPointer to the device structure

References CANBufferFree().

Here is the call graph for this function:

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:
devPointer to the device structure
framePointer to the receive frame

References _CANINFO::can_tx_rdy, CANBufferPutMutex(), _NUTDEVICE::dev_dcb, and NutEventPostAsync().

Here is the call graph for this function:

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:
devPointer to the device structure
framePointer to the receive frame
Returns:
1 if timeout, 0 otherwise

References _CANINFO::can_rx_rdy, CANBufferGet(), _CANBuffer::datalength, _NUTDEVICE::dev_dcb, _NUTDEVICE::dev_icb, NutEnterCritical, NutEventWait(), NutExitCritical, RIE_Bit, and SJA1000_IEN.

Here is the call graph for this function:

SJASetAccCode ( NUTDEVICE dev,
uint8_t ac 
)

Sets the acceptance code.

Parameters:
devPointer to the device structure
ac4 byte char array with the acceptance code

References AFM_Bit, _NUTDEVICE::dev_icb, memcpy(), RM_RR_Bit, SJA1000_AC0, SJA1000_AC1, SJA1000_AC2, SJA1000_AC3, and SJA1000_MODECTRL.

Here is the call graph for this function:

SJASetAccMask ( NUTDEVICE dev,
uint8_t am 
)

Sets the acceptance mask.

Parameters:
devPointer to the device structure
am4 byte char array with the acceptance mask

References AFM_Bit, _NUTDEVICE::dev_icb, memcpy(), RM_RR_Bit, SJA1000_AM0, SJA1000_AM1, SJA1000_AM2, SJA1000_AM3, and SJA1000_MODECTRL.

Here is the call graph for this function:

SJASetBaudrate ( NUTDEVICE dev,
uint32_t  baudrate 
)

Sets the baudrate.

Parameters:
devPointer to the device structure
baudrateBaudrate (One of the defined baudrates. See sja1000.h)

References CAN_SPEED_100K, CAN_SPEED_10K, CAN_SPEED_125K, CAN_SPEED_1M, CAN_SPEED_20K, CAN_SPEED_250K, CAN_SPEED_500K, CAN_SPEED_50K, CAN_SPEED_800K, _NUTDEVICE::dev_icb, RM_RR_Bit, SJA1000_BT0, SJA1000_BT1, and SJA1000_MODECTRL.

CAN_Tx ( void *  arg)

CAN transmitter thread.

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

References _CANINFO::can_tx_frames, _CANINFO::can_tx_rdy, CANBufferGetMutex(), _NUTDEVICE::dev_dcb, NUT_WAIT_INFINITE, NutEventWait(), NutThreadSetPriority(), SJA1000_STATUS, SJATxFrame(), and TBS_Bit.

Referenced by SJAInit().

Here is the call graph for this function:


Variable Documentation

Device information structure.

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

volatile uint16_t sja_base = 0x0000

Referenced by SJAInit().

Initial value:
 {
    CAN_IF_2B,                  
    CAN_SPEED_500K,             
    {0xFF, 0xFF, 0xFF, 0xFF}
    ,                           
    {0x00, 0x00, 0x00, 0x00}
    ,                           
    NUT_WAIT_INFINITE,         
    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.

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.