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.comRegards
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--;
}
}