Description
Source
Call Graph
Start Line: 295
void CAN_InitMailboxRegisters(CanTransfer *pTransfer)
{
AT91PS_CAN base_can;
AT91PS_CAN_MB CAN_Mailbox;
if( pTransfer->can_number == 0 ) {
base_can = AT91C_BASE_CAN0;
CAN_Mailbox = AT91C_BASE_CAN0_MB0;
}
#ifdef AT91C_BASE_CAN1
else {
base_can = AT91C_BASE_CAN1;
CAN_Mailbox = AT91C_BASE_CAN1_MB0;
}
#endif
CAN_Mailbox = (AT91PS_CAN_MB)((unsigned int)CAN_Mailbox+(unsigned int)(0x20*pTransfer->mailbox_number));
pTransfer->mailbox_in_use |= 1<<(pTransfer->mailbox_number);
// MailBox Control Register
CAN_Mailbox->CAN_MB_MCR = 0x0;
// MailBox Mode Register
CAN_Mailbox->CAN_MB_MMR = 0x00;
// CAN Message Acceptance Mask Register
CAN_Mailbox->CAN_MB_MAM = pTransfer->acceptance_mask_reg;
// MailBox ID Register
// Disable the mailbox before writing to CAN_MIDx registers
if( (pTransfer->identifier & AT91C_CAN_MIDE) == AT91C_CAN_MIDE ) {
// Extended
CAN_Mailbox->CAN_MB_MAM |= AT91C_CAN_MIDE;
}
else {
CAN_Mailbox->CAN_MB_MAM &= ~AT91C_CAN_MIDE;
}
CAN_Mailbox->CAN_MB_MID = pTransfer->identifier;
// MailBox Mode Register
CAN_Mailbox->CAN_MB_MMR = pTransfer->mode_reg;
// MailBox Data Low Register
CAN_Mailbox->CAN_MB_MDL = pTransfer->data_low_reg;
// MailBox Data High Register
CAN_Mailbox->CAN_MB_MDH = pTransfer->data_high_reg;
// MailBox Control Register
CAN_Mailbox->CAN_MB_MCR = pTransfer->control_reg;
}