Description
Source
Call Graph
Start Line: 568
void CAN_BasicTestSuiteWithoutInterrupt(void)
{
#if defined AT91C_BASE_CAN1
unsigned int status;
unsigned int tick=0;
TRACE_INFO("Without Interrupt ");
TRACE_INFO("CAN0 Mailbox 0 transmitting to CAN1 Mailbox 0\n\r");
// Init CAN0 Mailbox 0, transmit
CAN_ResetTransfer( pCAN0Transfer );
pCAN0Transfer->can_number = 0;
pCAN0Transfer->mailbox_number = 0;
pCAN0Transfer->mode_reg = AT91C_CAN_MOT_TX | AT91C_CAN_PRIOR;
pCAN0Transfer->acceptance_mask_reg = 0x00000000;
pCAN0Transfer->identifier = AT91C_CAN_MIDvA & (0x07<<18);
pCAN0Transfer->data_low_reg = 0x11223344;
pCAN0Transfer->data_high_reg = 0x01234567;
pCAN0Transfer->control_reg = (AT91C_CAN_MDLC & (0x8<<16));
CAN_InitMailboxRegisters( pCAN0Transfer );
// Init CAN1 Mailbox 0, receive,
CAN_ResetTransfer( pCAN1Transfer );
pCAN1Transfer->can_number = 1;
pCAN1Transfer->mailbox_number = 0;
pCAN1Transfer->mode_reg = AT91C_CAN_MOT_RX;
pCAN1Transfer->acceptance_mask_reg = AT91C_CAN_MIDvA | AT91C_CAN_MIDvB;
pCAN1Transfer->identifier = AT91C_CAN_MIDvA & (0x07<<18);
pCAN1Transfer->data_low_reg = 0x00000000;
pCAN1Transfer->data_high_reg = 0x00000000;
pCAN1Transfer->control_reg = 0x00000000;
CAN_InitMailboxRegisters( pCAN1Transfer );
// Transfer Request for Mailbox 0
AT91C_BASE_CAN0->CAN_TCR = AT91C_CAN_MB0;
tick = 0;
do {
// CAN Message Status Register
status = AT91C_BASE_CAN0_MB0->CAN_MB_MSR;
}
while( !(status & AT91C_CAN_MRDY) && (++tick < AT91C_CAN_TIMEOUT) );
if (tick == AT91C_CAN_TIMEOUT) {
TRACE_ERROR("Test FAILED\n\r");
}
else {
TRACE_DEBUG("Transfer completed: CAN1 Mailbox 0 MRDY flag has raised\n\r");
if( AT91C_BASE_CAN0_MB0->CAN_MB_MDL != AT91C_BASE_CAN1_MB0->CAN_MB_MDL ) {
TRACE_ERROR("Data Corrupted\n\r");
}
else if( AT91C_BASE_CAN0_MB0->CAN_MB_MDH != AT91C_BASE_CAN1_MB0->CAN_MB_MDH ) {
TRACE_ERROR("Data Corrupted\n\r");
}
else {
TRACE_INFO("Test passed\n\r");
}
}
CAN_ResetAllMailbox();
TRACE_INFO("Without Interrupt ");
TRACE_INFO("CAN0 Mailboxes 1 & 2 transmitting to CAN1 Mailbox 15\n\r");
// Init CAN0 Mailbox 1, transmit
CAN_ResetTransfer( pCAN0Transfer );
pCAN0Transfer->can_number = 0;
pCAN0Transfer->mailbox_number = 1;
pCAN0Transfer->mode_reg = AT91C_CAN_MOT_TX | AT91C_CAN_PRIOR;
pCAN0Transfer->acceptance_mask_reg = 0x00000000;
pCAN0Transfer->identifier = AT91C_CAN_MIDvA & (0x09<<18); // ID 9
pCAN0Transfer->data_low_reg = 0xAABBCCDD;
pCAN0Transfer->data_high_reg = 0xCAFEDECA;
pCAN0Transfer->control_reg = (AT91C_CAN_MDLC & (0x8<<16)); // Mailbox Data Length Code
CAN_InitMailboxRegisters( pCAN0Transfer );
// Init CAN0 Mailbox 2, transmit
pCAN0Transfer->can_number = 0;
pCAN0Transfer->mailbox_number = 2;
pCAN0Transfer->mode_reg = AT91C_CAN_MOT_TX | (AT91C_CAN_PRIOR-(1<<16));
pCAN0Transfer->acceptance_mask_reg = 0x00000000;
pCAN0Transfer->identifier = AT91C_CAN_MIDvA & (0x0A<<18); // ID 10
pCAN0Transfer->data_low_reg = 0x55667788;
pCAN0Transfer->data_high_reg = 0x99AABBCC;
pCAN0Transfer->control_reg = (AT91C_CAN_MDLC & (0x8<<16)); // Mailbox Data Length Code
CAN_InitMailboxRegisters( pCAN0Transfer );
// Init CAN1 Mailbox 15, reception with overwrite
CAN_ResetTransfer( pCAN1Transfer );
pCAN1Transfer->can_number = 1;
pCAN1Transfer->mailbox_number = 15;
pCAN1Transfer->mode_reg = AT91C_CAN_MOT_RXOVERWRITE;
pCAN1Transfer->acceptance_mask_reg = 0;
pCAN1Transfer->identifier = 0x0;
pCAN1Transfer->data_low_reg = 0x00000000;
pCAN1Transfer->data_high_reg = 0x00000000;
pCAN1Transfer->control_reg = 0x00000000;
CAN_InitMailboxRegisters( pCAN1Transfer );
// Ask Transmissions on Mailbox 1 & 2 --> AT91C_CAN_MRDY & AT91C_CAN_MMI raises for Mailbox 15 CAN_MB_SR
AT91C_BASE_CAN0->CAN_TCR = AT91C_CAN_MB1 | AT91C_CAN_MB2;
// Wait for Last Transmit Mailbox
tick = 0;
do {
status = AT91C_BASE_CAN1_MB15->CAN_MB_MSR;
}
while( !(status & AT91C_CAN_MMI) && (++tick < AT91C_CAN_TIMEOUT) );
if (tick == AT91C_CAN_TIMEOUT) {
}
else {
TRACE_DEBUG("Transfer completed: CAN1 Mailbox 15 MRDY and MMI flags have raised\n\r");
if( AT91C_BASE_CAN0_MB1->CAN_MB_MDL != AT91C_BASE_CAN1_MB15->CAN_MB_MDL ) {
TRACE_ERROR("Data Corrupted\n\r");
}
else if( AT91C_BASE_CAN0_MB1->CAN_MB_MDH != AT91C_BASE_CAN1_MB15->CAN_MB_MDH ) {
TRACE_ERROR("Data Corrupted\n\r");
}
else {
TRACE_INFO("Test passed\n\r");
}
}
CAN_ResetAllMailbox();
TRACE_INFO("Without Interrupt ");
TRACE_INFO("CAN0 Mailboxes 1 & 2 transmitting to CAN1 Mailbox 15\n\r");
// Init CAN0 Mailbox 1, transmit
CAN_ResetTransfer( pCAN0Transfer );
pCAN0Transfer->can_number = 0;
pCAN0Transfer->mailbox_number = 1;
pCAN0Transfer->mode_reg = AT91C_CAN_MOT_TX | AT91C_CAN_PRIOR;
pCAN0Transfer->acceptance_mask_reg = 0x00000000;
pCAN0Transfer->identifier = AT91C_CAN_MIDvA & (0x09<<18); // ID 9
pCAN0Transfer->data_low_reg = 0xAABBCCDD;
pCAN0Transfer->data_high_reg = 0xCAFEDECA;
pCAN0Transfer->control_reg = (AT91C_CAN_MDLC & (0x8<<16)); // Mailbox Data Length Code
CAN_InitMailboxRegisters( pCAN0Transfer );
// Init CAN0 Mailbox 2, transmit
pCAN0Transfer->can_number = 0;
pCAN0Transfer->mailbox_number = 2;
pCAN0Transfer->mode_reg = AT91C_CAN_MOT_TX | (AT91C_CAN_PRIOR-(1<<16));
pCAN0Transfer->acceptance_mask_reg = 0x00000000;
pCAN0Transfer->identifier = AT91C_CAN_MIDvA & (0x0A<<18); // ID 10
pCAN0Transfer->data_low_reg = 0x55667788;
pCAN0Transfer->data_high_reg = 0x99AABBCC;
pCAN0Transfer->control_reg = (AT91C_CAN_MDLC & (0x8<<16)); // Mailbox Data Length Code
CAN_InitMailboxRegisters( pCAN0Transfer );
// Init CAN1 Mailbox 15, reception with overwrite
CAN_ResetTransfer( pCAN1Transfer );
pCAN1Transfer->can_number = 1;
pCAN1Transfer->mailbox_number = 15;
pCAN1Transfer->mode_reg = AT91C_CAN_MOT_RX;
pCAN1Transfer->acceptance_mask_reg = 0;
pCAN1Transfer->identifier = 0x0;
pCAN1Transfer->data_low_reg = 0x00000000;
pCAN1Transfer->data_high_reg = 0x00000000;
pCAN1Transfer->control_reg = 0x00000000;
CAN_InitMailboxRegisters( pCAN1Transfer );
// Ask Transmissions on Mailbox 1 & 2 --> AT91C_CAN_MRDY & AT91C_CAN_MMI raises for Mailbox 15 CAN_MB_SR
AT91C_BASE_CAN0->CAN_TCR = AT91C_CAN_MB1 | AT91C_CAN_MB2;
// Wait for Last Transmit Mailbox
tick = 0;
do {
status = AT91C_BASE_CAN1_MB15->CAN_MB_MSR;
}
while( !(status & AT91C_CAN_MMI) && (++tick < AT91C_CAN_TIMEOUT) );
if (tick == AT91C_CAN_TIMEOUT) {
TRACE_ERROR("Test FAILED\n\r");
}
else {
TRACE_DEBUG("Transfer completed: CAN1 Mailbox 15 MRDY and MMI flags have raised\n\r");
TRACE_DEBUG("MB_MDL: 0x%X\n\r", AT91C_BASE_CAN1_MB15->CAN_MB_MDL);
TRACE_DEBUG("MB_MDLH: 0x%X\n\r", AT91C_BASE_CAN1_MB15->CAN_MB_MDH);
if( AT91C_BASE_CAN0_MB2->CAN_MB_MDL != AT91C_BASE_CAN1_MB15->CAN_MB_MDL ) {
TRACE_ERROR("Data Corrupted\n\r");
}
else if( AT91C_BASE_CAN0_MB2->CAN_MB_MDH != AT91C_BASE_CAN1_MB15->CAN_MB_MDH ) {
TRACE_ERROR("Data Corrupted\n\r");
}
else {
TRACE_INFO("Test passed\n\r");
}
}
CAN_ResetAllMailbox();
TRACE_INFO("Without Interrupt ");
TRACE_INFO("CAN0 Mailbox 3 asking for CAN1 Mailbox 3 transmission\n\r");
// Init CAN0 Mailbox 3, consumer mailbox
// Sends a remote frame and waits for an answer
CAN_ResetTransfer( pCAN0Transfer );
pCAN0Transfer->can_number = 0;
pCAN0Transfer->mailbox_number = 3;
pCAN0Transfer->mode_reg = AT91C_CAN_MOT_CONSUMER | AT91C_CAN_PRIOR;
pCAN0Transfer->acceptance_mask_reg = AT91C_CAN_MIDvA | AT91C_CAN_MIDvB;
pCAN0Transfer->identifier = AT91C_CAN_MIDvA & (0x0B<<18); // ID 11
pCAN0Transfer->data_low_reg = 0x00000000;
pCAN0Transfer->data_high_reg = 0x00000000;
pCAN0Transfer->control_reg = 0x00000000;
CAN_InitMailboxRegisters( pCAN0Transfer );
// Init CAN1 Mailbox 3, porducer mailbox
// Waits to receive a Remote Frame before sending its contents
CAN_ResetTransfer( pCAN1Transfer );
pCAN1Transfer->can_number = 1;
pCAN1Transfer->mailbox_number = 3;
pCAN1Transfer->mode_reg = AT91C_CAN_MOT_PRODUCER | AT91C_CAN_PRIOR;
pCAN1Transfer->acceptance_mask_reg = 0;
pCAN1Transfer->identifier = AT91C_CAN_MIDvA & (0x0B<<18); // ID 11
pCAN1Transfer->data_low_reg = 0xEEDDFF00;
pCAN1Transfer->data_high_reg = 0x34560022;
pCAN1Transfer->control_reg = (AT91C_CAN_MDLC & (0x8<<16));
CAN_InitMailboxRegisters( pCAN1Transfer );
// Ask Transmissions on Mailbox 3 --> AT91C_CAN_MRDY raises for Mailbox 3 CAN_MB_SR
AT91C_BASE_CAN1->CAN_TCR = AT91C_CAN_MB3;
AT91C_BASE_CAN0->CAN_TCR = AT91C_CAN_MB3;
// Wait for Last Transmit Mailbox
tick = 0;
do {
status = AT91C_BASE_CAN0_MB3->CAN_MB_MSR;
}
while( !(status & AT91C_CAN_MRDY) && (++tick < AT91C_CAN_TIMEOUT) );
if (tick == AT91C_CAN_TIMEOUT) {
TRACE_ERROR("Test FAILED\n\r");
}
else {
TRACE_DEBUG("Transfer Completed: CAN0 & CAN1 Mailboxes 3 MRDY flags have raised\n\r");
if( AT91C_BASE_CAN0_MB3->CAN_MB_MDL != AT91C_BASE_CAN1_MB3->CAN_MB_MDL ) {
TRACE_ERROR("Data Corrupted\n\r");
}
else if( AT91C_BASE_CAN0_MB3->CAN_MB_MDH != AT91C_BASE_CAN1_MB3->CAN_MB_MDH ) {
TRACE_ERROR("Data Corrupted\n\r");
}
else {
TRACE_INFO("Test passed\n\r");
}
}
#endif // AT91C_BASE_CAN1
return;
}