MCF52235 FlexCan Initialization

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

MCF52235 FlexCan Initialization

1,848 Views
admin
Specialist II
I've been using ColdfireInit to write some FlexCan initialization code.. Whenever i run the debugger i get an error of "Exception Vector Name: Bus Error" I can't figure this out...
 
I was wondering if anyone out there could either shed some light on the error.. or if they had working FlexCan initialization code if they could share...
 
Thanks
~Tim
Labels (1)
0 Kudos
1 Reply

253 Views
mjbcswitzerland
Specialist V
Hi Tim

Below is the initialisation in the uTasker project (it may give you some ideas).
Check out also the following - it is the description of the CAN driver support ( http://www.utasker.com/docs/uTasker/uTaskerCAN.PDF )

If your work is non-commercial, the complete project is available free at www.uTasker.com

Regards

Mark Butcher

www.mjbc.ch / www.uTasker.com




****************************************************************************
// Hardware configuration of CAN controller
//
void fnConfigCAN(QUEUE_HANDLE DriverID, CANTABLE *pars)
{
    int i;
    CANQUE *ptrCanQue = can_queue;
    COLDFIRE_CAN_BUF *ptrMessageBuffer = MBUFF0_ADD;                     // the first of 16 message buffers in the FlexCan module

    for (i = 0; i  NUMBER_CAN_MESSAGE_BUFFERS; i++) {                   // Initialise the requested number of transmit buffers
        if (pars->ucTxBuffers == 0) {
            break;
        }
        if (!(ptrCanQue->DriverID)) {                                    // Not yet allocated
            ptrCanQue->DriverID = DriverID;
            ptrCanQue->cTaskToWake = pars->cTask_to_wake;
            ptrCanQue->ucMode = (CAN_TX_BUF | CAN_TX_BUF_FREE);
            if (pars->ulTxID & CAN_EXTENDED_ID) {
                ptrCanQue->ulPartnerID = pars->ulTxID;                   // Enter default destination ID
                ptrMessageBuffer->ulCode_Len_TimeStamp = (MB_TX_INACTIVE | IDE); // enable extended ID transmission
            }
            else {
                ptrCanQue->ulPartnerID = ((pars->ulTxID  CAN_STANDARD_SHIFT) & CAN_STANDARD_BITMASK); // enter reception ID for the buffer
                ptrMessageBuffer->ulCode_Len_TimeStamp = MB_TX_INACTIVE;
            }
            pars->ucTxBuffers--;
        }
        ptrMessageBuffer++;
        ptrCanQue++;
    }

    ptrMessageBuffer = MBUFF15_ADD;
    ptrCanQue = &can_queue[NUMBER_CAN_MESSAGE_BUFFERS-1];
    for (i = 0; i  NUMBER_CAN_MESSAGE_BUFFERS; i++) {                   // Initialise the requested number of receive buffers
        if (pars->ucRxBuffers == 0) {
            break;
        }
        if (!(ptrCanQue->DriverID)) {                                    // Not yet allocated
            pars->ucRxBuffers--;
            ptrCanQue->DriverID = DriverID;
            ptrCanQue->cTaskToWake = pars->cTask_to_wake;
            if (pars->ulRxID & CAN_EXTENDED_ID) {
                if (MBUFF15_ADD == ptrMessageBuffer) {
                    RX15MASK = pars->ulRxIDMask;                         // first allocated receiver buffer has special mask
                }
                else if (MBUFF14_ADD == ptrMessageBuffer) {
                    RX14MASK = pars->ulRxIDMask;                         // second allocated receiver buffer has special mask
                }
                else {
                    RXGMASK = pars->ulRxIDMask;                          // Initialise general acceptance mask for use with subsequent buffers
                }
                ptrMessageBuffer->ulID = (pars->ulRxID & CAN_EXTENDED_MASK); // enter reception ID for the buffer
                ptrMessageBuffer->ulCode_Len_TimeStamp = (MB_RX_EMPTY | IDE);// enable extended ID reception
            }
            else {
                unsigned long ulMask = ((pars->ulRxIDMask  CAN_STANDARD_SHIFT) & CAN_STANDARD_BITMASK);
                if (MBUFF15_ADD == ptrMessageBuffer) {
                    RX15MASK = ulMask;                                   // first allocated receiver buffer has special mask
                }
                else if (MBUFF14_ADD == ptrMessageBuffer) {
                    RX14MASK = ulMask;                                   // second allocated receiver buffer has special mask
                }
                else {
                    RXGMASK = ulMask;                                    // Initialise general acceptance mask for use with subsequent buffers
                }
                ptrMessageBuffer->ulID = ((pars->ulRxID  CAN_STANDARD_SHIFT) & CAN_STANDARD_BITMASK); // enter reception ID for the buffer
                ptrMessageBuffer->ulCode_Len_TimeStamp = MB_RX_EMPTY;    // enable reception
            }
        }
        ptrMessageBuffer--;
        ptrCanQue--;
    }
}

0 Kudos