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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本到不卡免费一区二区| 久久久一区二区| 欧美本精品男人aⅴ天堂| 久久精品无码一区二区三区| 亚洲国产精品久久一线不卡| 蜜桃视频在线观看一区| 99久久综合色| 精品久久久久久亚洲综合网 | 91精品福利在线一区二区三区| 国产清纯白嫩初高生在线观看91 | 色综合 综合色| 久久尤物电影视频在线观看| 日韩主播视频在线| 色综合久久久久综合| 国产三级精品在线| 久久丁香综合五月国产三级网站| 在线观看国产精品网站| 国产欧美日韩另类视频免费观看| 麻豆精品视频在线观看免费| 欧美久久一二三四区| 亚洲精品成人悠悠色影视| 成人午夜免费av| 国产午夜亚洲精品不卡| 久久se这里有精品| 欧美精品粉嫩高潮一区二区| 一区二区三区久久| 色综合久久久久综合99| 日韩理论片在线| 99精品久久99久久久久| 亚洲人一二三区| 99精品1区2区| 一区二区三区日韩精品| 在线国产亚洲欧美| 亚洲国产视频在线| 欧美日韩免费电影| 日韩精品一二三四| 日韩欧美视频一区| 久久99热这里只有精品| 久久男人中文字幕资源站| 久久er99热精品一区二区| 日韩欧美精品在线| 国产一区二区三区在线观看精品| 国产欧美精品一区二区色综合| 丰满白嫩尤物一区二区| 亚洲三级在线播放| 欧美亚洲一区三区| 日韩黄色片在线观看| 精品免费99久久| 成人黄色软件下载| 亚洲精品国产精华液| 欧美日韩免费电影| 国产米奇在线777精品观看| 国产精品网站在线观看| av一区二区三区四区| 亚洲一区在线观看视频| 91精品国产手机| 成人一区二区三区中文字幕| 亚洲男人的天堂网| 69精品人人人人| 国产一区二区三区在线观看精品 | 色婷婷亚洲婷婷| 亚洲丶国产丶欧美一区二区三区| 日韩视频在线永久播放| 国产成人免费高清| 亚洲最色的网站| 精品av久久707| 色呦呦一区二区三区| 蜜桃精品视频在线| 国产精品久久影院| 91麻豆精品久久久久蜜臀| 风间由美中文字幕在线看视频国产欧美 | 亚洲高清中文字幕| 日本一区二区免费在线| 欧美性色欧美a在线播放| 久久精品国产精品亚洲红杏| 亚洲免费在线观看视频| 日韩免费成人网| 欧美亚洲一区二区在线| 国产91精品在线观看| 日韩成人精品在线观看| 1024国产精品| 久久久久久免费| 欧美高清视频一二三区| 99vv1com这只有精品| 欧美专区亚洲专区| 丰满少妇在线播放bd日韩电影| 天堂午夜影视日韩欧美一区二区| 国产日产欧美一区二区视频| 91麻豆精品国产自产在线| 91麻豆免费视频| 岛国av在线一区| 久久成人久久鬼色| 三级一区在线视频先锋 | 亚洲免费三区一区二区| 久久久久久免费毛片精品| 欧美日韩二区三区| 91丨porny丨中文| 国产凹凸在线观看一区二区| 日韩国产欧美一区二区三区| 亚洲午夜免费福利视频| 17c精品麻豆一区二区免费| 久久久亚洲综合| 日本一区二区三区国色天香| 欧美v日韩v国产v| 欧美精品v日韩精品v韩国精品v| 成人激情视频网站| 国产成人精品aa毛片| 国产一区不卡视频| 国产一区在线视频| 国产一区在线观看视频| 久久精品72免费观看| 男人的j进女人的j一区| 天天爽夜夜爽夜夜爽精品视频| 一区二区在线观看免费视频播放| 最新国产の精品合集bt伙计| 中文字幕第一区综合| 国产农村妇女毛片精品久久麻豆 | 国产欧美精品一区二区三区四区| 精品乱人伦小说| 精品国产乱码久久久久久浪潮 | 精品一区二区三区不卡| 久久91精品国产91久久小草| 日日骚欧美日韩| 亚洲电影欧美电影有声小说| 亚洲1区2区3区视频| 亚洲大尺度视频在线观看| 午夜一区二区三区在线观看| 性做久久久久久久久| 视频在线观看一区二区三区| 麻豆成人av在线| 国产精品亚洲人在线观看| 懂色一区二区三区免费观看| 成人毛片老司机大片| 99国产精品99久久久久久| 欧美无砖专区一中文字| 欧美一区二区三区在线电影| 欧美成人一区二区三区片免费| 久久久久久电影| 亚洲日本青草视频在线怡红院| 亚洲第一激情av| 狠狠网亚洲精品| 成人99免费视频| 欧美日韩免费电影| 久久综合久久综合亚洲| 亚洲欧洲三级电影| 亚洲成人av电影| 国产在线播精品第三| 一本色道久久综合精品竹菊| 欧美日韩一二三区| 2023国产精品| 亚洲狠狠丁香婷婷综合久久久| 蜜臀av性久久久久蜜臀av麻豆| 国产成人av资源| 777xxx欧美| 亚洲成人av福利| 成人综合婷婷国产精品久久蜜臀| 欧美综合天天夜夜久久| 国产亚洲人成网站| 亚洲国产乱码最新视频| 国产精品一线二线三线精华| 日本精品一级二级| 日韩欧美三级在线| 一区二区在线观看免费视频播放| 久久99精品久久久久久国产越南| 91丨国产丨九色丨pron| 欧美v亚洲v综合ⅴ国产v| 最新国产成人在线观看| 日本视频在线一区| 色噜噜狠狠色综合中国| 久久精品无码一区二区三区| 日本欧美加勒比视频| 99这里都是精品| 2020日本不卡一区二区视频| 五月综合激情日本mⅴ| av电影在线观看完整版一区二区| 欧美一区二区播放| 有码一区二区三区| jizzjizzjizz欧美| 国产午夜精品一区二区三区四区| 日韩电影一二三区| 色素色在线综合| 中文字幕欧美一| 福利电影一区二区| 日韩精品一区二| 日韩精品一二三区| 欧美日韩中文字幕一区二区| 国产精品蜜臀av| 国产成人亚洲综合色影视| 欧美一区二区视频在线观看2020| 亚洲乱码日产精品bd| 成人黄页在线观看| 国产农村妇女毛片精品久久麻豆| 奇米综合一区二区三区精品视频| 日本韩国欧美一区| 综合精品久久久| 色狠狠桃花综合| 亚洲国产一区二区三区青草影视 | 国产宾馆实践打屁股91| 久久久国际精品| 国产.欧美.日韩|