亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? can.c

?? at91sam9260-ek library file
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* ----------------------------------------------------------------------------
 *         ATMEL Microcontroller Software Support 
 * ----------------------------------------------------------------------------
 * Copyright (c) 2008, Atmel Corporation
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Atmel's name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * 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.
 * ----------------------------------------------------------------------------
 */

//------------------------------------------------------------------------------
//         Headers
//------------------------------------------------------------------------------

#include <board.h>
#include <pio/pio.h>
#include <utility/trace.h>
#include <aic/aic.h>
#include "can.h"

//------------------------------------------------------------------------------
//         Local definitions
//------------------------------------------------------------------------------
// CAN state
#define CAN_DISABLED       0
#define CAN_HALTED         1
#define CAN_IDLE           2
#define CAN_SENDING        3
#define CAN_RECEIVING      4

// MOT: Mailbox Object Type
#define CAN_MOT_DISABLE    0 // Mailbox is disabled
#define CAN_MOT_RECEPT     1 // Reception Mailbox
#define CAN_MOT_RECEPT_OW  2 // Reception mailbox with overwrite
#define CAN_MOT_TRANSMIT   3 // Transmit mailbox
#define CAN_MOT_CONSUMER   4 // Consumer mailbox
#define CAN_MOT_PRODUCER   5 // Producer mailbox

//------------------------------------------------------------------------------
//         Local variables
//------------------------------------------------------------------------------
#if defined (PINS_CAN_TRANSCEIVER_TXD)
static const Pin pins_can_transceiver_txd[] = {PINS_CAN_TRANSCEIVER_TXD};
#endif
#if defined (PINS_CAN_TRANSCEIVER_RXD)
static const Pin pins_can_transceiver_rxd[] = {PINS_CAN_TRANSCEIVER_RXD};
#endif
static const Pin pin_can_transceiver_rs   = PIN_CAN_TRANSCEIVER_RS;
#if defined (PIN_CAN_TRANSCEIVER_RXEN)
static const Pin pin_can_transceiver_rxen = PIN_CAN_TRANSCEIVER_RXEN;
#endif

static CanTransfer *pCAN0Transfer=NULL;
#ifdef AT91C_BASE_CAN1
static CanTransfer *pCAN1Transfer=NULL;
#endif

//------------------------------------------------------------------------------
//         Local functions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/// CAN Error Detection
/// \param status     error type
/// \param can_number can nulber
//------------------------------------------------------------------------------
static void CAN_ErrorHandling( unsigned int status, unsigned char can_number)
{
    if( (status&AT91C_CAN_ERRA) ==  AT91C_CAN_ERRA) {
        trace_LOG( trace_ERROR, "-E- (CAN) CAN is in active Error Active mode\n\r");
    }
    else if( (status&AT91C_CAN_ERRP) ==  AT91C_CAN_ERRP) {
        trace_LOG( trace_ERROR, "-E- (CAN) CAN is in Error Passive mode\n\r");
    }
    else if( (status&AT91C_CAN_BOFF) ==  AT91C_CAN_BOFF) {
        trace_LOG( trace_ERROR, "-E- (CAN) CAN is in Buff Off mode\n\r");
        // CAN reset
        trace_LOG( trace_ERROR, "-E- (CAN) CAN%d reset\n\r", can_number);
        // CAN Controller Disable
        if (can_number == 0) {
            AT91C_BASE_CAN0->CAN_MR &= ~AT91C_CAN_CANEN;
            // CAN Controller Enable
            AT91C_BASE_CAN0->CAN_MR |= AT91C_CAN_CANEN;
        }
#ifdef AT91C_BASE_CAN1
        else if (can_number == 1) {
            AT91C_BASE_CAN1->CAN_MR &= ~AT91C_CAN_CANEN;
            // CAN Controller Enable
            AT91C_BASE_CAN1->CAN_MR |= AT91C_CAN_CANEN;
        }
#endif
    }

    // Error for Frame dataframe
    // CRC error
    if( (status&AT91C_CAN_CERR) ==  AT91C_CAN_CERR) {
        trace_LOG( trace_ERROR, "-E- (CAN) CRC Error\n\r");
    }
    // Bit-stuffing error
    else if( (status&AT91C_CAN_SERR) ==  AT91C_CAN_SERR) {
        trace_LOG( trace_ERROR, "-E- (CAN) Stuffing Error\n\r");
    }
    // Bit error
    else if( (status&AT91C_CAN_BERR) ==  AT91C_CAN_BERR) {
        trace_LOG( trace_ERROR, "-E- (CAN) Bit Error\n\r");
    }
    // Form error
    else if( (status&AT91C_CAN_FERR) ==  AT91C_CAN_FERR) {
        trace_LOG( trace_ERROR, "-E- (CAN) Form Error\n\r");
    }
    // Acknowledgment error
    else if( (status&AT91C_CAN_AERR) ==  AT91C_CAN_AERR) {
        trace_LOG( trace_ERROR, "-E- (CAN) Acknowledgment Error\n\r");
    }

    // Error interrupt handler
    // Represent the current status of the CAN bus and are not latched.
    // See CAN, par. Error Interrupt Handler
    // AT91C_CAN_WARN
    // AT91C_CAN_ERRA
}

//------------------------------------------------------------------------------
// Generic CAN Interrupt handler
/// \param can_number can nulber
//------------------------------------------------------------------------------
static void CAN_Handler( unsigned char can_number ) 
{
    AT91PS_CAN base_can;
    AT91PS_CAN_MB CAN_Mailbox;

    unsigned int status;
    unsigned int can_msr;
    unsigned int* pCan_mcr;
    unsigned int message_mode;
    unsigned char numMailbox;
    unsigned char state0;
    unsigned char state1;

    if( can_number == 0 ) {
        base_can = AT91C_BASE_CAN0;
        CAN_Mailbox = AT91C_BASE_CAN0_MB0;
        state0 = pCAN0Transfer->state;
    }
#ifdef AT91C_BASE_CAN1
    else {
        base_can = AT91C_BASE_CAN1;
        CAN_Mailbox = AT91C_BASE_CAN1_MB0;
        state1 = pCAN1Transfer->state;
    }
#endif
    status = (base_can->CAN_SR) & (base_can->CAN_IMR);
    base_can->CAN_IDR = status;

    trace_LOG( trace_DEBUG, "CAN0 status=0x%X\n\r", status);
    if(status & AT91C_CAN_WAKEUP) {
        if( can_number == 0 ) {
            pCAN0Transfer->test_can = AT91C_TEST_OK;
            pCAN0Transfer->state = CAN_IDLE;
        }
#ifdef AT91C_BASE_CAN1
        else {
            pCAN1Transfer->test_can = AT91C_TEST_OK;
            pCAN1Transfer->state = CAN_IDLE;
        }
#endif
    }
    // Mailbox event ?
    else if ((status&0x0000FFFF) != 0) {
        trace_LOG( trace_DEBUG, "Mailbox event\n\r");

        // Handle Mailbox interrupts
        for (numMailbox = 0; numMailbox < NUM_MAILBOX_MAX; numMailbox++) {

            can_msr = *(unsigned int*)((unsigned int)CAN_Mailbox+(unsigned int)(0x10+(0x20*numMailbox)));
            if ((AT91C_CAN_MRDY & can_msr) == AT91C_CAN_MRDY) {
                // Mailbox object type
                message_mode =  ((*(unsigned int*)((unsigned int)CAN_Mailbox+(unsigned int)(0x00+(0x20*numMailbox))))>>24)&0x7;
                trace_LOG( trace_DEBUG, "message_mode 0x%X\n\r", message_mode);
                trace_LOG( trace_DEBUG, "numMailbox 0x%X\n\r", numMailbox);

                if( message_mode == 0 ) {
                    trace_LOG( trace_ERROR, "-E-Error in MOT\n\r");
                }
                else if( ( message_mode == CAN_MOT_RECEPT ) 
                      || ( message_mode == CAN_MOT_RECEPT_OW ) 
                      || ( message_mode == CAN_MOT_PRODUCER ) ) {
                    trace_LOG( trace_DEBUG, "Mailbox is in RECEPTION\n\r");
                    trace_LOG( trace_DEBUG, "Length 0x%X\n\r", (can_msr>>16)&0xF);
                    trace_LOG( trace_DEBUG, "CAN_MB_MID 0x%X\n\r", ((*(unsigned int*)((unsigned int)CAN_Mailbox+(unsigned int)(0x08+(0x20*numMailbox)))&AT91C_CAN_MIDvA)>>18));

                    trace_LOG( trace_DEBUG, "can_number %d\n\r", can_number);
                    if( can_number == 0 ) {
                        //CAN_MB_MDLx
                        pCAN0Transfer->data_low_reg = 
                           (*(unsigned int*)((unsigned int)CAN_Mailbox+(unsigned int)(0x14+(0x20*numMailbox))));
                        //CAN_MB_MDHx
                        pCAN0Transfer->data_high_reg = 
                           (*(unsigned int*)((unsigned int)CAN_Mailbox+(unsigned int)(0x18+(0x20*numMailbox))));
                        pCAN0Transfer->size = (can_msr>>16)&0xF;
                        pCAN0Transfer->mailbox_number = numMailbox;
                        state0 = CAN_IDLE;
                    }
#ifdef AT91C_BASE_CAN1
                    else {
                        //CAN_MB_MDLx
                        pCAN1Transfer->data_low_reg = 
                           (*(unsigned int*)((unsigned int)CAN_Mailbox+(unsigned int)(0x14+(0x20*numMailbox))));
                        //CAN_MB_MDHx
                        pCAN1Transfer->data_high_reg = 
                           (*(unsigned int*)((unsigned int)CAN_Mailbox+(unsigned int)(0x18+(0x20*numMailbox))));
                        pCAN1Transfer->size = (can_msr>>16)&0xF;
                        pCAN1Transfer->mailbox_number = numMailbox;
                        state1 = CAN_IDLE;
                    }
#endif
                    // Message Data has been received
                    pCan_mcr = (unsigned int*)((unsigned int)CAN_Mailbox+0x1C+(0x20*numMailbox));
                    *pCan_mcr = AT91C_CAN_MTCR;

                }
                else {
                    trace_LOG( trace_DEBUG, "Mailbox is in TRANSMIT\n\r");
                    trace_LOG( trace_DEBUG, "Length 0x%X\n\r", (can_msr>>16)&0xF);
                    trace_LOG( trace_DEBUG, "can_number %d\n\r", can_number);
                    if( can_number == 0 ) {
                        state0 = CAN_IDLE;
                    }
                    else {
                        state1 = CAN_IDLE;
                    }
                }
            }
        }
        if( can_number == 0 ) {
            pCAN0Transfer->state = state0;
        }
#ifdef AT91C_BASE_CAN1
        else {
            pCAN1Transfer->state = state1;
        }
#endif
    }
    if ((status&0xFFCF0000) != 0) {
        CAN_ErrorHandling(status, 0);
    }
}

//------------------------------------------------------------------------------
/// CAN 0 Interrupt handler
//------------------------------------------------------------------------------
static void CAN0_Handler(void)
{
    CAN_Handler( 0 );
}

//------------------------------------------------------------------------------
/// CAN 1 Interrupt handler
//------------------------------------------------------------------------------
#if defined AT91C_BASE_CAN1
static void CAN1_Handler(void)
{
    CAN_Handler( 1 );
}
#endif

//------------------------------------------------------------------------------
//         Global functions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/// Configure the corresponding mailbox
/// \param pTransfer can transfer structure
//------------------------------------------------------------------------------
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 != 0 ) {
        CAN_Mailbox->CAN_MB_MAM |= AT91C_CAN_MIDE;
        CAN_Mailbox->CAN_MB_MID = pTransfer->identifier;
    }
    else {
        CAN_Mailbox->CAN_MB_MAM &= ~AT91C_CAN_MIDE;
    }
    // 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;
}

//------------------------------------------------------------------------------
/// Reset the MBx
//------------------------------------------------------------------------------
void CAN_ResetAllMailbox( void )
{
    unsigned char i;
  
#if defined (AT91C_BASE_CAN0_MB0)
    CAN_ResetTransfer( pCAN0Transfer );
    for( i=0; i<8; i++ ) {
        pCAN0Transfer->can_number = 0;
        pCAN0Transfer->mailbox_number = i;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲色大大久久| 男女激情视频一区| 91免费精品国自产拍在线不卡| 国产精品视频你懂的| 风间由美一区二区av101| 国产精品视频一区二区三区不卡| 成人av片在线观看| 一区二区在线免费观看| 欧美日韩精品福利| 久久国产精品区| 国产精品久久久久久久久晋中| 欧美伊人久久久久久久久影院| 一区二区三区四区乱视频| 欧美亚洲国产一区二区三区va| 天天av天天翘天天综合网 | 视频一区国产视频| 欧美成人欧美edvon| 懂色av中文一区二区三区| 亚洲免费看黄网站| 欧美日韩国产bt| 国产99久久久精品| 午夜精品福利一区二区三区蜜桃| 日韩一区二区三区视频在线观看| 国产伦精品一区二区三区视频青涩| 中文字幕一区二区不卡| 欧美日韩aaaaa| 懂色av噜噜一区二区三区av| 一个色在线综合| 精品国产乱码久久久久久久 | 亚洲综合丁香婷婷六月香| 欧美一区二区三区在| heyzo一本久久综合| 日韩**一区毛片| 亚洲男女毛片无遮挡| 欧美精品一区二区蜜臀亚洲| 色诱视频网站一区| 韩国理伦片一区二区三区在线播放 | 亚洲最大成人网4388xx| 精品捆绑美女sm三区| 欧美亚洲国产一区二区三区va| 国产揄拍国内精品对白| 亚洲黄色在线视频| 国产亚洲一区二区三区四区 | 欧美日韩国产大片| 高清国产一区二区三区| 视频在线观看一区二区三区| 国产精品欧美久久久久一区二区| 欧美巨大另类极品videosbest | 九九视频精品免费| 亚洲高清免费观看| 国产精品国产三级国产三级人妇| 日韩欧美国产一区二区在线播放| 91电影在线观看| 国产一级精品在线| 玖玖九九国产精品| 亚洲国产欧美日韩另类综合| 国产精品丝袜黑色高跟| 久久久蜜桃精品| 91精品中文字幕一区二区三区| 97aⅴ精品视频一二三区| 狠狠色丁香久久婷婷综| 蜜桃精品在线观看| 日韩高清不卡一区二区三区| 亚洲免费高清视频在线| 中文字幕亚洲欧美在线不卡| 久久综合九色综合欧美98| 777欧美精品| 欧美日韩国产小视频| 日本高清无吗v一区| 91啪亚洲精品| 99免费精品在线| 成人深夜福利app| 国产精品911| 国产一区二区视频在线| 久久精品国内一区二区三区| 日韩不卡免费视频| 蜜臀久久99精品久久久久宅男| 日韩专区一卡二卡| 天天综合天天做天天综合| 一区二区理论电影在线观看| 亚洲欧洲国产日韩| 亚洲欧美一区二区久久| 亚洲一二三区在线观看| 亚洲电影视频在线| 午夜精品123| 日本va欧美va精品| 国内精品写真在线观看| 国产盗摄女厕一区二区三区| 国产丶欧美丶日本不卡视频| 欧美日韩成人在线| 欧美日韩成人一区二区| 日韩免费在线观看| 国产调教视频一区| 亚洲精品乱码久久久久| 五月综合激情日本mⅴ| 蜜桃视频一区二区三区| 国产成人精品影院| 91免费版pro下载短视频| 欧美在线观看视频一区二区| 日韩一级二级三级| 欧美国产激情二区三区| 伊人婷婷欧美激情| 麻豆精品一区二区三区| 成人妖精视频yjsp地址| 99re这里只有精品首页| 欧美日本韩国一区二区三区视频| 日韩欧美国产一二三区| 中文字幕在线观看不卡视频| 亚洲最大成人综合| 国产一区二区女| 一本大道久久a久久精品综合| 911精品产国品一二三产区| 26uuu精品一区二区| 亚洲精品日韩专区silk| 青青草视频一区| 99国产精品久久| 欧美大片免费久久精品三p| 亚洲欧洲国产日本综合| 日韩黄色片在线观看| 成人在线视频一区| 欧美丰满少妇xxxxx高潮对白 | 国产一区二区导航在线播放| 91麻豆精品视频| 精品免费国产二区三区| 亚洲欧美中日韩| 久久99精品网久久| 欧美日韩小视频| 国产精品网站在线播放| 卡一卡二国产精品| 欧美午夜视频网站| 国产精品久久久久久亚洲毛片| 免费成人深夜小野草| 色噜噜久久综合| 国产欧美精品一区| 免费xxxx性欧美18vr| 欧美专区在线观看一区| 国产女主播视频一区二区| 日本不卡视频在线观看| 精品视频免费在线| 国产精品久久久久久亚洲伦 | 亚洲超碰97人人做人人爱| 成人免费三级在线| 久久午夜色播影院免费高清| 视频一区中文字幕国产| 欧美亚洲一区二区在线观看| 中文字幕中文字幕一区二区| 国内精品免费**视频| 日韩欧美国产成人一区二区| 亚洲丶国产丶欧美一区二区三区| 99久久精品免费看| 日本一区二区免费在线观看视频| 蜜桃av一区二区| 日韩一区二区电影| 丝瓜av网站精品一区二区| 欧美日韩国产一二三| 亚洲第一久久影院| 欧美午夜免费电影| 亚洲综合偷拍欧美一区色| 色婷婷狠狠综合| 亚洲视频中文字幕| 在线播放91灌醉迷j高跟美女 | 69堂成人精品免费视频| 夜夜夜精品看看| 欧美亚州韩日在线看免费版国语版| 欧美国产丝袜视频| 国产成人精品一区二区三区四区| 久久视频一区二区| 国内外成人在线视频| 久久色在线观看| 粉嫩欧美一区二区三区高清影视| 久久精品一区二区| 成人性生交大合| 国产精品私人自拍| 色综合天天狠狠| 亚洲在线一区二区三区| 欧美日韩国产a| 蜜臀91精品一区二区三区| 久久品道一品道久久精品| 成人免费视频一区| 一区二区在线看| 欧美放荡的少妇| 九九国产精品视频| 欧美国产一区视频在线观看| 波多野结衣精品在线| 一区二区激情视频| 91精品国产黑色紧身裤美女| 免费亚洲电影在线| 国产欧美一区二区精品性色超碰| 成人短视频下载| 亚洲成人免费电影| 欧美大片一区二区| av在线不卡免费看| 亚洲国产精品一区二区久久 | 97久久精品人人澡人人爽| 日韩毛片高清在线播放| 91精品欧美久久久久久动漫| 九九九久久久精品| 亚洲少妇屁股交4| 制服.丝袜.亚洲.中文.综合| 国产精华液一区二区三区|