📄 can.c
字号:
// - ----------------------------------------------------------------------------
// - ATMEL Microcontroller Software Support - ROUSSET -
// - ----------------------------------------------------------------------------
// - DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
// - IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
// - DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
// - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
// - OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// - EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// - ----------------------------------------------------------------------------
// File Name : can.c
// - ----------------------------------------------------------------------------
#include "main.h"
//*----------------------------------------------------------------------------
//* \fn AT91F_InitMailbox
//* \brief Configure the Mailboxes
//*----------------------------------------------------------------------------
void AT91F_InitMailbox(void)
{
// Init CAN Mailbox 0
AT91F_InitMailboxRegisters(AT91C_BASE_CAN_MB0,
AT91C_CAN_MOT_TX | AT91C_CAN_PRIOR, // Mailbox Mode Reg
0x00000000, // Mailbox Acceptance Mask Reg
AT91C_CAN_MIDvA & (0x07<<18), // Mailbox ID Reg
0x11223344, // Mailbox Data Low Reg
0x01234567, // Mailbox Data High Reg
(AT91C_CAN_MDLC & (0x8<<16)) ); // Mailbox Control Reg
// Init CANMailbox 1
AT91F_InitMailboxRegisters(AT91C_BASE_CAN_MB1,
AT91C_CAN_MOT_RX | AT91C_CAN_PRIOR, // Mailbox Mode Reg
AT91C_CAN_MIDvA | AT91C_CAN_MIDvB | AT91C_CAN_MIDE, // Mailbox Acceptance Mask Reg
AT91C_CAN_MIDvA & (0x07<<18), // Mailbox ID Reg
0x00000000, // Mailbox Data Low Reg
0x00000000, // Mailbox Data High Reg
0x00000000); // Mailbox Control Reg
}
//*----------------------------------------------------------------------------
//* \fn AT91F_BasicTestSuite
//* \brief
//*----------------------------------------------------------------------------
void AT91F_BasicTestSuite(void)
{
unsigned int tick=0;
///////////////////////////////////////////////////////////////////////////////////////////
TRACE_INFO("\n\r--------------------------------------------------\n\r");
TRACE_INFO("1. Wait for CAN Controller Bus Synchronization...\n\r");
TRACE_INFO("--------------------------------------------------");
// Enable CAN and Wait for WakeUp Interrupt
AT91F_CAN_EnableIt(AT91C_BASE_CAN,AT91C_CAN_WAKEUP);
AT91F_CAN_CfgModeReg(AT91C_BASE_CAN,AT91C_CAN_CANEN);
// Wait for WAKEUP flag raising <=> 11-recessive-bit were scanned by the transceiver
while( (testCAN != AT91C_TEST_OK) && (++tick < AT91C_CAN_TIMEOUT) ) ;
testCAN=AT91C_TEST_NOK;
if (tick >= AT91C_CAN_TIMEOUT) {
TRACE_ERROR("\n\r-E- CAN Initialisation FAILED !\n\r");
} else {
TRACE_INFO("\n\r-I- CAN Initialisation Completed !\n\r");
}
///////////////////////////////////////////////////////////////////////////////////////////
TRACE_INFO("\n\r---------------------------------------------------\n\r");
TRACE_INFO("2. Try to send or receive CAN messages...\n\r");
TRACE_INFO("---------------------------------------------------\n\r");
TRACE_INFO("-- CAN Mailbox 0: Tx Mailbox \n\r");
TRACE_INFO("-- CAN Mailbox 1: Rx Mailbox \n\r");
TRACE_INFO("---------------------------------------------------\n\r");
// Configure Mailboxes
AT91F_InitMailbox();
// Enable Reception on Mailbox 1
AT91F_CAN_InitTransferRequest(AT91C_BASE_CAN,AT91C_CAN_MB1);
// Enable Reception Mailbox 1 interrupt
AT91F_CAN_EnableIt(AT91C_BASE_CAN,AT91C_CAN_MB1);
for (;;) {
// Ask Transmission on Mailbox 0
AT91F_CAN_InitTransferRequest(AT91C_BASE_CAN,AT91C_CAN_MB0);
// Enable Transmission Mailbox 0 interrupt
AT91F_CAN_EnableIt(AT91C_BASE_CAN,AT91C_CAN_MB0);
// Wait for Reception on Mailbox 1
while(testCAN!=AT91C_TEST_OK);
testCAN = AT91C_TEST_NOK;
TRACE_INFO("\n\rTx messages:%u , Rx messages:%u\n\r",txcounter,rxcounter);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -