![]() |
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 | SJA_BASE 0x8800 |
#define | CAN_BufSize 64 |
Typedefs | |
typedef struct _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. | |
u_char | 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. |
Definition at line 57 of file sja1000.h.
Referenced by SJAInit(), SJASetAccCode(), SJASetAccMask(), and SJASetBaudrate().
#define RM_RR_Bit 0x01 |
Definition at line 58 of file sja1000.h.
Referenced by SJAInit(), SJASetAccCode(), SJASetAccMask(), and SJASetBaudrate().
#define AFM_Bit 0x08 |
Definition at line 62 of file sja1000.h.
Referenced by SJAInit(), SJASetAccCode(), and SJASetAccMask().
#define RIE_Bit 0x01 |
#define TR_Bit 0x01 |
#define RRB_Bit 0x04 |
#define CAN_TXBUF_FULL 2 |
#define CAN_BUS_OFF 0x02 |
#define CAN_29 0x80 |
#define CAN_RTR 0x40 |
#define SJA_SIGNAL sig_INTERRUPT7 |
#define CAN_BufSize 64 |
Definition at line 152 of file sja1000.c.
References CAN_BufSize, NutHeapAlloc(), and NutSemInit().
Referenced by SJAInit().
Definition at line 166 of file sja1000.c.
References NutSemPost(), and NutSemWait().
Referenced by CAN_Tx().
Definition at line 189 of file sja1000.c.
References NutSemPost(), and NutSemWait().
Referenced by SJAOutput().
SJARxAvail | ( | NUTDEVICE * | dev | ) | [inline] |
checks if data is available in input buffer
dev | Pointer to the device structure |
Definition at line 252 of file sja1000.c.
References CAN_RX_BUF.
SJATxFree | ( | NUTDEVICE * | dev | ) | [inline] |
checks if there's still space in output buffer
dev | Pointer to the device structure |
Definition at line 264 of file sja1000.c.
References CAN_TX_BUF, and CANBufferFree().
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.
dev | Pointer to the device structure | |
frame | Pointer to the receive frame |
Definition at line 281 of file sja1000.c.
References CAN_TX_BUF, _CANINFO::can_tx_rdy, CANBufferPutMutex(), _NUTDEVICE::dev_dcb, and NutEventPostAsync().
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.
dev | Pointer to the device structure | |
frame | Pointer to the receive frame |
Definition at line 305 of file sja1000.c.
References CAN_RX_BUF, _CANINFO::can_rx_rdy, CANBufferGet(), _NUTDEVICE::dev_dcb, _NUTDEVICE::dev_icb, NutEnterCritical, NutEventWait(), NutExitCritical, RIE_Bit, and SJA1000_IEN.
Sets the acceptance code.
dev | Pointer to the device structure | |
ac | 4 byte char array with the acceptance code |
Definition at line 344 of file sja1000.c.
References AFM_Bit, _NUTDEVICE::dev_icb, memcpy(), RM_RR_Bit, SJA1000_AC0, SJA1000_AC1, SJA1000_AC2, SJA1000_AC3, and SJA1000_MODECTRL.
Sets the acceptance mask.
dev | Pointer to the device structure | |
am | 4 byte char array with the acceptance mask |
Definition at line 375 of file sja1000.c.
References AFM_Bit, _NUTDEVICE::dev_icb, memcpy(), RM_RR_Bit, SJA1000_AM0, SJA1000_AM1, SJA1000_AM2, SJA1000_AM3, and SJA1000_MODECTRL.
Sets the baudrate.
dev | Pointer to the device structure | |
baudrate | Baudrate (One of the defined baudrates. See sja1000.h) |
Definition at line 407 of file sja1000.c.
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.
SJATxFrame | ( | CANFRAME * | CAN_frame | ) |
Sends a CAN Frane.
CAN_frame | Pointer to the send frame |
Definition at line 475 of file sja1000.c.
References _CANFRAME::byte, CAN_29, CAN_RTR, _CANFRAME::ext, _CANFRAME::id, _CANFRAME::len, _CANFRAME::rtr, SJA1000_CMD, SJA1000_Tx1, SJA1000_Tx10, SJA1000_Tx11, SJA1000_Tx12, SJA1000_Tx2, SJA1000_Tx3, SJA1000_Tx4, SJA1000_Tx5, SJA1000_Tx6, SJA1000_Tx7, SJA1000_Tx8, SJA1000_Tx9, SJA1000_TxFrameInfo, and TR_Bit.
Referenced by CAN_Tx().
SJARxFrame | ( | CANFRAME * | CAN_frame | ) |
Receives a CAN Frane.
CAN_frame | Pointer to the receive frame |
Definition at line 525 of file sja1000.c.
References _CANFRAME::byte, CAN_29, CAN_RTR, _CANFRAME::ext, _CANFRAME::id, _CANFRAME::len, RRB_Bit, _CANFRAME::rtr, SJA1000_CMD, SJA1000_Rx1, SJA1000_Rx10, SJA1000_Rx11, SJA1000_Rx12, SJA1000_Rx2, SJA1000_Rx3, SJA1000_Rx4, SJA1000_Rx5, SJA1000_Rx6, SJA1000_Rx7, SJA1000_Rx8, SJA1000_Rx9, and SJA1000_RxFrameInfo.
CAN_Tx | ( | void * | arg | ) |
CAN transmitter thread.
This thread transmits data if there's some in the output buffer. It runs with high priority.
Definition at line 573 of file sja1000.c.
References CAN_TX_BUF, _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().
SJAInit | ( | NUTDEVICE * | dev | ) |
Initialize SJA1000 Canbus interface.
Applications typically do not use this function, but call NutRegisterDevice().
dev | Identifies the device to initialize. The structure must be properly set. |
Definition at line 654 of file sja1000.c.
References AFM_Bit, ifcan::can_acc_code, ifcan::can_acc_mask, ifcan::can_baudrate, CAN_BufSize, CAN_RX_BUF, 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, CAN_Tx(), CAN_TX_BUF, CANBufferInit(), CANMode_Bit, cbi, CBP_Bit, ClkOff_Bit, ClrIntEnSJA, _NUTDEVICE::dev_base, _NUTDEVICE::dev_dcb, _NUTDEVICE::dev_icb, DivBy2, DOIE_Bit, EICR, EIE_Bit, errCAN_INVALID_BAUD, memset(), NormalMode, NutEnterCritical, NutExitCritical, NutRegisterIrqHandler(), NutThreadCreate(), RIE_Bit, RM_RR_Bit, sbi, SJA1000_AC0, SJA1000_AC1, SJA1000_AC2, SJA1000_AC3, SJA1000_AM0, SJA1000_AM1, SJA1000_AM2, SJA1000_AM3, SJA1000_BT0, SJA1000_BT1, SJA1000_CLK_DIV, SJA1000_IEN, SJA1000_INT, SJA1000_MODECTRL, SJA1000_OUTCTRL, SJA_BASE, sja_base, SJA_SIGNAL, SJA_SIGNAL_BIT, TIE_Bit, Tx0PshPull, and Tx1Float.
Device information structure.
Applications must pass this structure to NutRegisterDevice() to bind this CAN device driver to the Nut/OS kernel.
Definition at line 150 of file sja1000.c.
Referenced by CAN_Tx(), SJAInit(), SJAOutput(), and SJATxFree().
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 }
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 }
Applications must pass this structure to NutRegisterDevice() to bind this CAN device driver to the Nut/OS kernel.