X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/8efef967ff91e6d5b92426ffb091842d4e54145d..7e54bce7703ee2000b67eb92629c6f1d67e7d824:/lincan/src/unican_cl2.c diff --git a/lincan/src/unican_cl2.c b/lincan/src/unican_cl2.c index 18a78e9..b576c5e 100644 --- a/lincan/src/unican_cl2.c +++ b/lincan/src/unican_cl2.c @@ -11,10 +11,7 @@ FIRMA : CVUT FEL, Dept. of Measurement DULEZITE UPOZORNENI: ARCHIVACNI INFORMACE: -$Log$ -Revision 1.1 2004/03/13 23:13:33 ppisa -Interconnected OCERA configuration options with LinCAN boardlist.c compilation. - +Log: unican_cl2.c,v 12.12.2000, J.B., cl2_receive_data - time stamp for even number of bytes corr. 26.8.1998 - cl2_buf_size - corrected, new function return code CL2_BAD_PARAM @@ -34,8 +31,11 @@ UCEL A FUNKCE: /* includes */ -#include "anctypes.h" -#include "cl2.h" +#include "../include/canmsg.h" +#include "../include/can_sysdep.h" +#include "../include/unican_types.h" +#include "../include/unican_cl2.h" +#include "linux/delay.h" /******************************************************************************* @@ -105,7 +105,9 @@ eCL2_RESULT cl2_test_card for ( i = 0; i < 10000; i++ ) { if ( isAA && is55 ) return CL2_OK; - tmpWord = *((U16*)(card->baseAddressPtr)); + tmpWord = unican_readw(card->baseAddressPtr); + /*printk("cl2_test_card: %08lx %04x\n", (long)card->baseAddressPtr, tmpWord);*/ + udelay(100); if ( (tmpWord & 0x00FF) == 0x00AA ) isAA = TRUE; if ( (tmpWord & 0x00FF) == 0x0055 ) is55 = TRUE; } @@ -131,7 +133,7 @@ eCL2_RESULT cl2_reset_card sCAN_CARD *card /* Pointer to card structure */ ) { - *((U16*)(card->baseAddressPtr + CL2_RESET_REGISTER)) = 0x0000; + unican_writew(0x0000, card->baseAddressPtr + CL2_RESET_REGISTER); return CL2_OK; } /* cl2_reset_card */ @@ -152,7 +154,7 @@ eCL2_RESULT cl2_get_version U16 *version /* returns card version */ ) { - *version = *((U16*)(card->baseAddressPtr + CL2_VERSION_REGISTER)); + *version = unican_readw(card->baseAddressPtr + CL2_VERSION_REGISTER); return CL2_OK; } /* cl2_get_version */ @@ -174,7 +176,7 @@ eCL2_RESULT cl2_gen_interrupt sCAN_CARD *card /* Pointer to card structure */ ) { - *((U16*)(card->baseAddressPtr + CL2_GEN_INT_REGISTER)) = 0x0000; + unican_writew(0x0000, card->baseAddressPtr + CL2_GEN_INT_REGISTER); return CL2_OK; } /* cl2_gen_interrupt */ @@ -196,7 +198,7 @@ eCL2_RESULT cl2_start_it sCAN_CARD *card /* Pointer to card structure */ ) { - *((U16*)(card->baseAddressPtr + CL2_START_IT_REGISTER)) = 0x0000; + unican_writew(0x0000, card->baseAddressPtr + CL2_START_IT_REGISTER); return CL2_OK; } /* cl2_start_it */ @@ -216,7 +218,7 @@ eCL2_RESULT cl2_clear_interrupt sCAN_CARD *card /* Pointer to card structure */ ) { - *((U16*)(card->baseAddressPtr + CL2_CLEAR_INT_REGISTER)) = 0x0000; + unican_writew(0x0000, card->baseAddressPtr + CL2_CLEAR_INT_REGISTER); return CL2_OK; } /* cl2_clear_interrupt */ @@ -241,10 +243,10 @@ eCL2_RESULT cl2_int_mode ) { if ( mode > INT_MODE_ALL ) return CL2_BAD_PARAM; - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; - *((U16*)card->dataPtr) = mode; - *((U16*)card->commandRegister) = ((U16)cmCL2_INT_MODE + CL2_COMMAND_VALID); + unican_writew(mode, card->dataPtr); + unican_writew(((U16)cmCL2_INT_MODE + CL2_COMMAND_VALID), card->commandRegister); return CL2_OK; } /* cl2_int_mode */ @@ -266,10 +268,10 @@ eCL2_RESULT cl2_iit_mode BOOLEAN1 onoff /* IIT mode - TRUE=on, FALSE=off */ ) { - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) return + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; - *((U16*)card->dataPtr) = (U16)onoff; - *((U16*)card->commandRegister) = ((U16)cmCL2_IIT_MODE + CL2_COMMAND_VALID); + unican_writew((U16)onoff, card->dataPtr); + unican_writew(((U16)cmCL2_IIT_MODE + CL2_COMMAND_VALID), card->commandRegister); return CL2_OK; } /* cl2_iit_mode */ @@ -291,10 +293,10 @@ eCL2_RESULT cl2_sync_mode BOOLEAN1 onoff /* Sync mode - TRUE=on, FALSE=off */ ) { - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; - *((U16*)card->dataPtr) = (U16)onoff; - *((U16*)card->commandRegister) = ((U16)cmCL2_SYNC_MODE + CL2_COMMAND_VALID); + unican_writew((U16)onoff, card->dataPtr); + unican_writew(((U16)cmCL2_SYNC_MODE + CL2_COMMAND_VALID), card->commandRegister); return CL2_OK; } /* cl2_sync_mode */ @@ -316,10 +318,10 @@ eCL2_RESULT cl2_rtr_mode BOOLEAN1 onoff /* RTR mode - TRUE=on, FALSE=off */ ) { - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; - *((U16*)card->dataPtr) = (U16)onoff; - *((U16*)card->commandRegister) = ((U16)cmCL2_RTR_MODE + CL2_COMMAND_VALID); + unican_writew((U16)onoff, card->dataPtr); + unican_writew(((U16)cmCL2_RTR_MODE + CL2_COMMAND_VALID), card->commandRegister); return CL2_OK; } /* cl2_rtr_mode */ @@ -349,10 +351,10 @@ eCL2_RESULT cl2_buf_size ) { if ( bufSize > 64 ) return CL2_BAD_PARAM; - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; - *((U16*)card->dataPtr) = bufSize; - *((U16*)card->commandRegister) = ((U16)cmCL2_BUF_SIZE + CL2_COMMAND_VALID); + unican_writew(bufSize, card->dataPtr); + unican_writew(((U16)cmCL2_BUF_SIZE + CL2_COMMAND_VALID), card->commandRegister); card->syncTxBufSize = bufSize; card->asyncTxBufSize = 64 - bufSize; card->syncTxBufPtr = card->syncTxBufBase; @@ -381,10 +383,10 @@ eCL2_RESULT cl2_set_iit U16 iit /* time period in x100 us */ ) { - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; - *((U16*)card->dataPtr) = iit; - *((U16*)card->commandRegister) = ((U16)cmCL2_SET_IIT + CL2_COMMAND_VALID); + unican_writew(iit, card->dataPtr); + unican_writew(((U16)cmCL2_SET_IIT + CL2_COMMAND_VALID), card->commandRegister); return CL2_OK; } /* cl2_set_iit */ @@ -405,10 +407,9 @@ eCL2_RESULT cl2_start_firmware sCAN_CARD *card /* Pointer to card structure */ ) { - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; - *((U16*)card->commandRegister) = ((U16)cmCL2_START_FIRMWARE + - CL2_COMMAND_VALID); + unican_writew((U16)cmCL2_START_FIRMWARE + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_start_firmware */ @@ -433,11 +434,10 @@ eCL2_RESULT cl2_set_rec_mode BOOLEAN1 mode /* Mode - TRUE=ext, FALSE=std */ ) { - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; - *((U16*)card->dataPtr) = (U16)mode; - *((U16*)card->commandRegister) = ((U16)cmCL2_SET_REC_MODE + - CL2_COMMAND_VALID); + unican_writew((U16)mode, card->dataPtr); + unican_writew((U16)cmCL2_SET_REC_MODE + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_set_rec_mode */ @@ -459,11 +459,10 @@ eCL2_RESULT cl2_clr_rx_buffer sCAN_CARD *card /* Pointer to card structure */ ) { - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; card->rxBufPtr = card->rxBufBase; - *((U16*)card->commandRegister) = ((U16)cmCL2_CLR_RX_BUFFER + - CL2_COMMAND_VALID); + unican_writew((U16)cmCL2_CLR_RX_BUFFER + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_clr_rx_buffer */ @@ -485,11 +484,10 @@ eCL2_RESULT cl2_clr_sync_buffer sCAN_CARD *card /* Pointer to card structure */ ) { - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; card->syncTxBufPtr = card->syncTxBufBase; - *((U16*)card->commandRegister) = ((U16)cmCL2_CLR_SYNC_BUFFER + - CL2_COMMAND_VALID); + unican_writew((U16)cmCL2_CLR_SYNC_BUFFER + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_clr_sync_buffer */ @@ -511,11 +509,10 @@ eCL2_RESULT cl2_clr_async_buffer sCAN_CARD *card /* Pointer to card structure */ ) { - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; card->asyncTxBufPtr = card->syncTxBufBase + card->syncTxBufSize*16; - *((U16*)card->commandRegister) = ((U16)cmCL2_CLR_ASYNC_BUFFER + - CL2_COMMAND_VALID); + unican_writew((U16)cmCL2_CLR_ASYNC_BUFFER + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_clr_async_buffer */ @@ -539,10 +536,9 @@ eCL2_RESULT cl2_send_time_sync sCAN_CARD *card /* Pointer to card structure */ ) { - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) return - CL2_COMMAND_BUSY; - *((U16*)card->commandRegister) = ((U16)cmCL2_SEND_TIME_SYNC + - CL2_COMMAND_VALID); + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) + return CL2_COMMAND_BUSY; + unican_writew((U16)cmCL2_SEND_TIME_SYNC + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_send_time_sync */ @@ -569,7 +565,7 @@ eCL2_RESULT cl2_set_time_cobid U16 cobidL, cobidH; U16 *ptr = (U16 *)card->dataPtr; - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; if ( COBID & CL2_TMP_EXHIGH ) /* standard or extended format? */ @@ -593,8 +589,7 @@ eCL2_RESULT cl2_set_time_cobid *ptr = 0; } - *((U16*)card->commandRegister) = ((U16)cmCL2_SET_TIME_COBID + - CL2_COMMAND_VALID); + unican_writew((U16)cmCL2_SET_TIME_COBID + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_set_time_cobid */ @@ -621,11 +616,10 @@ eCL2_RESULT cl2_set_receive_limit ) { if ( limit > 127 ) return CL2_BAD_PARAM; - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; - *((U16*)card->dataPtr) = limit; - *((U16*)card->commandRegister) = ((U16)cmCL2_SET_RECEIVE_LIMIT + - CL2_COMMAND_VALID); + unican_writew(limit, card->dataPtr); + unican_writew((U16)cmCL2_SET_RECEIVE_LIMIT + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_set_receive_limit */ @@ -657,7 +651,7 @@ eCL2_RESULT cl2_download_rtr_list U32 COBID; U16 cobidH, cobidL, i; - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) return + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; if ( rtrList->nb > 64 ) return CL2_BAD_PARAM; @@ -693,8 +687,7 @@ eCL2_RESULT cl2_download_rtr_list ptrRTR++; } - *((U16*)card->commandRegister) = ((U16)cmCL2_DOWNLOAD_RTR_LIST + - CL2_COMMAND_VALID); + unican_writew((U16)cmCL2_DOWNLOAD_RTR_LIST + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_download_rtrlist */ @@ -724,7 +717,7 @@ eCL2_RESULT cl2_subscribe_rtr U32 COBID; U16 cobidH, cobidL; - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; if ( RTRnumber > 9 ) return CL2_BAD_PARAM; @@ -754,8 +747,7 @@ eCL2_RESULT cl2_subscribe_rtr *ptrU16 = 0; } - *((U16*)card->commandRegister) = ((U16)cmCL2_SUBSCRIBE_RTR + - CL2_COMMAND_VALID); + unican_writew((U16)cmCL2_SUBSCRIBE_RTR + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_subscribe_rtr */ @@ -781,7 +773,7 @@ eCL2_RESULT cl2_desubscribe_rtr { U16 i; - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; for ( i = 0; i < 10; i++ ) @@ -795,9 +787,8 @@ eCL2_RESULT cl2_desubscribe_rtr if ( i >= 10 ) return CL2_BAD_PARAM; - *((U16*)card->dataPtr) = i; - *((U16*)card->commandRegister) = ((U16)cmCL2_DESUBSCRIBE_RTR + - CL2_COMMAND_VALID); + unican_writew(i, card->dataPtr); + unican_writew((U16)cmCL2_DESUBSCRIBE_RTR + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_desubscribe_rtr */ @@ -825,7 +816,7 @@ eCL2_RESULT cl2_set_sync_cobid U16 cobidL, cobidH; U16 *ptr = (U16 *)card->dataPtr; - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; if ( COBID & CL2_TMP_EXHIGH ) /* standard or extended format? */ @@ -849,7 +840,7 @@ eCL2_RESULT cl2_set_sync_cobid *ptr = 0; } - *((U16*)card->commandRegister) = ((U16)cmCL2_SET_COBID + CL2_COMMAND_VALID); + unican_writew(((U16)cmCL2_SET_COBID + CL2_COMMAND_VALID), card->commandRegister); return CL2_OK; } /* cl2_set_sync_cobid */ @@ -873,11 +864,10 @@ eCL2_RESULT cl2_set_sync_period U16 period /* period in x100 us */ ) { - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; - *((U16*)card->dataPtr) = (U16)period; - *((U16*)card->commandRegister) = ((U16)cmCL2_SET_SYNC_PERIOD + - CL2_COMMAND_VALID); + unican_writew((U16)period, card->dataPtr); + unican_writew((U16)cmCL2_SET_SYNC_PERIOD + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_set_sync_period */ @@ -901,11 +891,10 @@ eCL2_RESULT cl2_set_sync_window U16 window /* period in x100 us */ ) { - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; - *((U16*)card->dataPtr) = (U16)window; - *((U16*)card->commandRegister) = ((U16)cmCL2_SET_SYNC_WINDOW + - CL2_COMMAND_VALID); + unican_writew((U16)window, card->dataPtr); + unican_writew((U16)cmCL2_SET_SYNC_WINDOW + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_set_sync_window */ @@ -928,11 +917,10 @@ eCL2_RESULT cl2_set_bitrate U16 bitrate /* CAN bitrate */ ) { - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; - *((U16*)card->dataPtr) = bitrate; - *((U16*)card->commandRegister) = ((U16)cmCL2_SET_BITRATE + - CL2_COMMAND_VALID); + unican_writew(bitrate, card->dataPtr); + unican_writew((U16)cmCL2_SET_BITRATE + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_set_bitrate */ @@ -953,10 +941,9 @@ eCL2_RESULT cl2_bus_reset sCAN_CARD *card ) { - if ( *(U16*)card->commandRegister & CL2_COMMAND_VALID ) + if ( unican_readw(card->commandRegister) & CL2_COMMAND_VALID ) return CL2_COMMAND_BUSY; - *((U16*)card->commandRegister) = ((U16)cmCL2_BUS_RESET + - CL2_COMMAND_VALID); + unican_writew((U16)cmCL2_BUS_RESET + CL2_COMMAND_VALID, card->commandRegister); return CL2_OK; } /* cl2_bus_reset */ @@ -1041,7 +1028,7 @@ eCL2_RESULT cl2_send_sync } tmpU16 = (((U16)cobidH) & 0xFF00) | CL2_MESSAGE_VALID; - *(U16*)card->syncTxBufPtr = tmpU16; + unican_writew(tmpU16, card->syncTxBufPtr); if ( (card->syncTxBufBase + card->syncTxBufSize*16) <= (card->syncTxBufPtr += 16) ) @@ -1132,7 +1119,7 @@ eCL2_RESULT cl2_send_async } tmpU16 = (((U16)cobidH) & 0xFF00) | CL2_MESSAGE_VALID; - *(U16*)card->asyncTxBufPtr = tmpU16; + unican_writew(tmpU16, card->asyncTxBufPtr); if ( (card->asyncTxBufBase + card->asyncTxBufSize*16) <= (card->asyncTxBufPtr += 16) ) @@ -1260,7 +1247,7 @@ eCL2_RESULT cl2_receive_data { canMessage->timeStamp = *ptrU16 << 8 | *ptrU16 >> 8; } - *(U16*)card->rxBufPtr = 0x0000; + unican_writew(0x0000, card->rxBufPtr); /* increment rx-buffer pointer */ if ( (card->rxBufBase + card->rxBufSize*16 ) <= (card->rxBufPtr += 16) )