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

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

?? can.c

?? Microchip PIC18F 設備驅動代碼 CAN部分
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*********************************************************************
 *
 *   This file contains CAN drivers for PIC18Fxx8 devices
 *   
 *********************************************************************
 * FileName:        CAN.C
 * Dependencies:    CAN.H, PIC18.H or P18CXXX.H
 * Processor:       PIC18FXX8
 * Compiler:        MCC18 v2.20 or higher
 *                  HITECH PICC-18 v8.20PL4 or higher
 * Linker:          
 * Company:         Microchip Technology, Inc.
 *
 * Software License Agreement
 *
 * The software supplied herewith by Microchip Technology Incorporated
 * (the "Company") is intended and supplied to you, the Company抯
 * customer, for use solely and exclusively with products manufactured
 * by the Company. 
 *
 * The software is owned by the Company and/or its supplier, and is 
 * protected under applicable copyright laws. All rights are reserved. 
 * Any use in violation of the foregoing restrictions may subject the 
 * user to criminal sanctions under applicable laws, as well as to 
 * civil liability for the breach of the terms and conditions of this 
 * license.
 
 * THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTIES, 
 * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED 
 * TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
 * PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, 
 * IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR 
 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
 *
 *
 *
 *
 * Author               Date        Comment
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Thomas Castmo        06/07/2003  Initial release
 * Thomas Castmo        07/07/2003  Cleared up a bit and implemented 
 *                                  the window function CANCON<3:1> 
 *                                  for interrupts
 * Thomas Castmo        16/07/2003  Added support for the Microchip
 *                                  MPLAB C18 compiler
 * 
 ********************************************************************/
#include "can.h"

#if defined(HI_TECH_C)
    #if defined(_MPC_)
        #define HITECH_C18
    #else
        #error "Unknown part is selected."
    #endif
#else
    #define MCHP_C18
#endif

#if defined(MCHP_C18) && defined(HITECH_C18)
#error "Invalid Compiler selection."
#endif

#if !defined(MCHP_C18) && !defined(HITECH_C18)
#error "Compiler not supported."
#endif


#if defined(HITECH_C18)
#include <pic18.h>

#elif defined(MCHP_C18)
#include <p18cxxx.h>

#define TRISB2 TRISBbits.TRISB2
#define TRISB3 TRISBbits.TRISB3
#define TXB0REQ TXB0CONbits.TXREQ
#define RXB0FUL RXB0CONbits.RXFUL
#define RXB0RTRRO RXB0CONbits.RXRTRRO

#define RXB0IF PIR3bits.RXB0IF
#define RXB1IF PIR3bits.RXB1IF
#define TXB0IF PIR3bits.TXB0IF
#define TXB1IF PIR3bits.TXB1IF
#define TXB2IF PIR3bits.TXB2IF
#define ERRIF PIR3bits.ERRIF
#define WAKIF PIR3bits.WAKIF

#define RXB0IE PIE3bits.RXB0IE
#define RXB1IE PIE3bits.RXB1IE
#define TXB0IE PIE3bits.TXB0IE
#define TXB1IE PIE3bits.TXB1IE
#define TXB2IE PIE3bits.TXB2IE
#define ERRIE PIE3bits.ERRIE
#define WAKIE PIE3bits.WAKIE


#endif



#define CONFIG_MODE 0x9F
#define LISTEN_MODE 0x7F 
#define LOOPBACK_MODE 0x5F 
#define DISABLE_MODE 0x3F  
#define NORMAL_MODE 0x1F
#define MODE_MASK 0xE0

#define NoInterrupt 0x00
#define ErrorInterrupt 0x02
#define TXB2Interrupt 0x04
#define TXB1Interrupt 0x06
#define TXB0Interrupt 0x08
#define RXB1Interrupt 0x0A
#define RXB0Interrupt 0x0C
#define WakeUpInterrupt 0x0E


#ifdef CAN_ERROR_HANDLER_ENABLE
extern void CANErrorHandler(void);
#define CAN_INT_BITS 0x3F	//CAN interrupts which should be enabled, simply what PIE3 is to be loaded with (Note all TXB IE will be set regardless of this value)
#else
#define CAN_INT_BITS 0x1F	//CAN interrupts which should be enabled, simply what PIE3 is to be loaded with (Note all TXB IE will be set regardless of this value)
#endif

union RXBuffer {				//Receive buffer structure
	unsigned char Data[14];		//It has to be a bit messy/strict for
	struct {					//it to go trough the PICC18 compiler
		union {
			unsigned char Byte;
			struct {
				unsigned FILHIT0:1;
				unsigned JTOFF:1;
				unsigned RXB0DBEN:1;
				unsigned RXRTRRO:1;
				unsigned :1;
				unsigned RXM0:1;
				unsigned RXM1:1;
				unsigned RXFUL:1;
			} Bits;
		} RXBCON;
		union {
			unsigned char Byte;
		} RXBSIDH;
		union {
			unsigned char Byte;
			struct {
				unsigned EID16:1;
				unsigned EID17:1;
				unsigned :1;
				unsigned EXID:1;
				unsigned SRR:1;
				unsigned SID0:1;
				unsigned SID1:1;
				unsigned SID2:1;
			} Bits;
		} RXBSIDL;
		union {
			unsigned char Byte;
		} RXBEIDH;
		union {
			unsigned char Byte;
		} RXBEIDL;
		union {
			unsigned char Byte;
			struct {
				unsigned DLC0:1;
				unsigned DLC1:1;
				unsigned DLC2:1;
				unsigned DLC3:1;
				unsigned RB0:1;
				unsigned RB1:1;
				unsigned RXRTR:1;
				unsigned :1;
			} Bits;
		} RXBDLC;
		union {
			unsigned char Array[8];
			struct {
				unsigned char RXBD0;
				unsigned char RXBD1;
				unsigned char RXBD2;
				unsigned char RXBD3;
				unsigned char RXBD4;
				unsigned char RXBD5;
				unsigned char RXBD6;
				unsigned char RXBD7;
			} Bytes;
		} RXBD;
	} Specific;
};

union TXBuffer {					//Transmit buffer structure
	unsigned char Data[14];
	struct {
		union {
			unsigned char Byte;
			struct {
				unsigned TXPRI0:1;
				unsigned TXPRI1:1;
				unsigned :1;
				unsigned TXREQ:1;
				unsigned TXERR:1;
				unsigned TXLARB:1;
				unsigned TXABT:1;
			} Bits;
		} TXBCON;
		union {
			unsigned char Byte;
		} TXBSIDH;
		union {
			unsigned char Byte;
			struct {
				unsigned EID16:1;
				unsigned EID17:1;
				unsigned :1;
				unsigned EXIDE:1;
				unsigned :1;
				unsigned SID0:1;
				unsigned SID1:1;
				unsigned SID2:1;
			} Bits;
		} TXBSIDL;
		union {
			unsigned char Byte;
		} TXBEIDH;
		union {
			unsigned char Byte;
		} TXBEIDL;
		union {
			unsigned char Byte;
			struct {
				unsigned DLC0:1;
				unsigned DLC1:1;
				unsigned DLC2:1;
				unsigned DLC3:1;
				unsigned :1;
				unsigned :1;
				unsigned TXRTR:1;
				unsigned :1;
			} Bits;
		} TXBDLC;
		union {
			unsigned char Array[8];
			struct {
				unsigned char TXBD0;
				unsigned char TXBD1;
				unsigned char TXBD2;
				unsigned char TXBD3;
				unsigned char TXBD4;
				unsigned char TXBD5;
				unsigned char TXBD6;
				unsigned char TXBD7;
			} Bytes;
		} TXBD;
	} Specific;
};
union RXBuffer RXMessage[RXBUF];		//Received messages FIFO buffer
union TXBuffer TXMessage[TXBUF];		//Pending messages to transmit FIFO buffer
char RXRPtr = 0;						//Read pointer for RXMessage buffer
char RXWPtr = 0;						//Write pointer for RXMessage buffer
char TXRPtr = 0;						//Read pointer for TXMessage buffer
char TXWPtr = 0;						//Write pointer for TXMessage buffer


/*********************************************************************
 * Function:        void CANGetMessage(void)
 *
 * PreCondition:    <WIN2:WIN0> in the CANCON register has to set
 *                  to reflect the desired RXB registers
 *
 * Input:           None
 *
 * Output:          None
 *
 * Side Effects:    Will modify the RX FIFO Write pointer (RXWPtr)
 *
 * Overview:        Gets the registers for a RXB and puts them in the
 *                  CAN Receive buffer
 *
 * Note:            Care is not taken if buffer is full
 ********************************************************************/
void CANGetMessage(void);

/*********************************************************************
 * Function:        char CANPutMessage(void)
 *
 * PreCondition:    <WIN2:WIN0> in the CANCON register has to set
 *                  to reflect the desired TXB registers
 *
 * Input:           None
 *
 * Output:          0 -> A new message has been put in the transmit queue
 *                  1 -> There was no messages in the TX buffer to send
 *
 * Side Effects:    Will modify the TX buffer磗 Read pointer (TXRPtr)
 *
 * Overview:        Checks if there is any messages to transmit and if so
 *                  place it in the registers reflected by <WIN2:WIN0> 
 *
 * Note:            None
 ********************************************************************/
 char CANPutMessage(void);

/*********************************************************************
 * Function:        char CANOpen(void)
 *
 * PreCondition:    None
 *
 * Input:           Values to be written into BRGCON1 -> BRGCON3
 *
 * Output:          0 -> Initialasation succeeded
 *
 * Side Effects:    None
 *
 * Overview:        Sets up the appropriate register for the device to act
 *                  as a CAN node
 *
 * Note:            Input values 0x03, 0xAA, 0x05 at Fosc = 16MHz works with 
 *                  the default firmware at nodeB on the CAN I/O expander board.
 ********************************************************************/
char CANOpen(unsigned char CONFIG1, unsigned char CONFIG2, unsigned char CONFIG3)
{
	TRISB2 = 0;
	TRISB3 = 1;
	PIE3 = 0;										//Disable all CAN interrupts
	PIR3 = 0;										//and clear all CAN interrupt flags
	CANCON = (CONFIG_MODE & MODE_MASK) | (CANCON & 0x3F);	//Set configuration mode
	while((CANSTAT & MODE_MASK) != (CONFIG_MODE & MODE_MASK));	//Wait until config mode is set

	BRGCON1 = CONFIG1;
	BRGCON2 = CONFIG2;
	BRGCON3 = CONFIG3;
	
	RXB0CON = 0x04;					//Receive all valid messages receive buffer overflow 
	RXB1CON = 0x00;					//writes to RXB1
	
	//Set the acceptance filters for all the filters
#ifdef ACCEPT_STANDARD_FILTER_0
	RXF0SIDL = (unsigned char)(ACCEPTANCE_FILTER_0 << 5);
	RXF0SIDH = (unsigned char)(ACCEPTANCE_FILTER_0 >> 3);
#else
	RXF0EIDL = (unsigned char)(ACCEPTANCE_FILTER_0 & 0xFF);	
	RXF0EIDH = (unsigned char)((ACCEPTANCE_FILTER_0 >> 8) & 0xFF);
	RXF0SIDL = (unsigned char)((ACCEPTANCE_FILTER_0 >> 16) & 0x03) | (unsigned char)((ACCEPTANCE_FILTER_0 >> 13) & 0xE0) | 0x08;
	RXF0SIDH = (unsigned char)((ACCEPTANCE_FILTER_0 >> 21) & 0xFF);
#endif
#ifdef ACCEPT_STANDARD_FILTER_1
	RXF1SIDL = (unsigned char)(ACCEPTANCE_FILTER_1 << 5);
	RXF1SIDH = (unsigned char)(ACCEPTANCE_FILTER_1 >> 3);
#else
	RXF1EIDL = (unsigned char)(ACCEPTANCE_FILTER_1 & 0xFF);	
	RXF1EIDH = (unsigned char)((ACCEPTANCE_FILTER_1 >> 8) & 0xFF);
	RXF1SIDL = (unsigned char)((ACCEPTANCE_FILTER_1 >> 16) & 0x03) | (unsigned char)((ACCEPTANCE_FILTER_1 >> 13) & 0xE0) | 0x08;
	RXF1SIDH = (unsigned char)((ACCEPTANCE_FILTER_1 >> 21) & 0xFF);
#endif

#ifdef ACCEPT_STANDARD_FILTER_2
	RXF2SIDL = (unsigned char)(ACCEPTANCE_FILTER_2 << 5);
	RXF2SIDH = (unsigned char)(ACCEPTANCE_FILTER_2 >> 3);
#else
	RXF2EIDL = (unsigned char)(ACCEPTANCE_FILTER_2 & 0xFF);	
	RXF2EIDH = (unsigned char)((ACCEPTANCE_FILTER_2 >> 8) & 0xFF);
	RXF2SIDL = (unsigned char)((ACCEPTANCE_FILTER_2 >> 16) & 0x03) | (unsigned char)((ACCEPTANCE_FILTER_2 >> 13) & 0xE0) | 0x08;
	RXF2SIDH = (unsigned char)((ACCEPTANCE_FILTER_2 >> 21) & 0xFF);
#endif

#ifdef ACCEPT_STANDARD_FILTER_3
	RXF3SIDL = (unsigned char)(ACCEPTANCE_FILTER_3 << 5);
	RXF3SIDH = (unsigned char)(ACCEPTANCE_FILTER_3 >> 3);
#else
	RXF3EIDL = (unsigned char)(ACCEPTANCE_FILTER_3 & 0xFF);	
	RXF3EIDH = (unsigned char)((ACCEPTANCE_FILTER_3 >> 8) & 0xFF);
	RXF3SIDL = (unsigned char)((ACCEPTANCE_FILTER_3 >> 16) & 0x03) | (unsigned char)((ACCEPTANCE_FILTER_3 >> 13) & 0xE0) | 0x08;
	RXF3SIDH = (unsigned char)((ACCEPTANCE_FILTER_3 >> 21) & 0xFF);
#endif

#ifdef ACCEPT_STANDARD_FILTER_4
	RXF4SIDL = (unsigned char)(ACCEPTANCE_FILTER_4 << 5);
	RXF4SIDH = (unsigned char)(ACCEPTANCE_FILTER_4 >> 3);
#else
	RXF4EIDL = (unsigned char)(ACCEPTANCE_FILTER_4 & 0xFF);	
	RXF4EIDH = (unsigned char)((ACCEPTANCE_FILTER_4 >> 8) & 0xFF);
	RXF4SIDL = (unsigned char)((ACCEPTANCE_FILTER_4 >> 16) & 0x03) | (unsigned char)((ACCEPTANCE_FILTER_4 >> 13) & 0xE0) | 0x08;
	RXF4SIDH = (unsigned char)((ACCEPTANCE_FILTER_4 >> 21) & 0xFF);
#endif

#ifdef ACCEPT_STANDARD_FILTER_5
	RXF5SIDL = (unsigned char)(ACCEPTANCE_FILTER_5 << 5);
	RXF5SIDH = (unsigned char)(ACCEPTANCE_FILTER_5 >> 3);
#else
	RXF5EIDL = (unsigned char)(ACCEPTANCE_FILTER_5 & 0xFF);	
	RXF5EIDH = (unsigned char)((ACCEPTANCE_FILTER_5 >> 8) & 0xFF);
	RXF5SIDL = (unsigned char)((ACCEPTANCE_FILTER_5 >> 16) & 0x03) | (unsigned char)((ACCEPTANCE_FILTER_4 >> 13) & 0xE0) | 0x08;
	RXF5SIDH = (unsigned char)((ACCEPTANCE_FILTER_5 >> 21) & 0xFF);
#endif

//Set the acceptance masks
	RXM0EIDL = (unsigned char)(ACCEPTANCE_MASK_0_1 & 0xFF);	
	RXM0EIDH = (unsigned char)((ACCEPTANCE_MASK_0_1 >> 8) & 0xFF);
	RXM0SIDL = (unsigned char)((ACCEPTANCE_MASK_0_1 >> 16) & 0x03) | (unsigned char)((ACCEPTANCE_MASK_0_1 >> 13) & 0xE0) | 0x08;
	RXM0SIDH = (unsigned char)((ACCEPTANCE_MASK_0_1 >> 21) & 0xFF);
	RXM1EIDL = (unsigned char)(ACCEPTANCE_MASK_2_5 & 0xFF);	
	RXM1EIDH = (unsigned char)((ACCEPTANCE_MASK_2_5 >> 8) & 0xFF);
	RXM1SIDL = (unsigned char)((ACCEPTANCE_MASK_2_5 >> 16) & 0x03) | (unsigned char)((ACCEPTANCE_MASK_2_5 >> 13) & 0xE0) | 0x08;
	RXM1SIDH = (unsigned char)((ACCEPTANCE_MASK_2_5 >> 21) & 0xFF);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产喷白浆一区二区三区| 免费观看30秒视频久久| 国产精品久久综合| 国产偷国产偷亚洲高清人白洁| 日韩一级黄色片| 日韩欧美一区电影| 欧美v日韩v国产v| 久久久久久综合| 久久久久一区二区三区四区| 国产欧美1区2区3区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 51精品秘密在线观看| 欧美日韩国产欧美日美国产精品| 欧美老年两性高潮| 日韩一级片网站| 久久综合色播五月| 中文欧美字幕免费| 日韩毛片在线免费观看| 亚洲国产精品麻豆| 麻豆一区二区99久久久久| 国产一区二区三区观看| 国产99精品国产| 色香蕉成人二区免费| 欧美久久久一区| 精品国产乱码久久久久久浪潮| 久久精品人人做人人爽97| 自拍视频在线观看一区二区| 亚洲国产成人av好男人在线观看| 舔着乳尖日韩一区| 国产美女视频91| 色先锋aa成人| 欧美午夜精品久久久久久超碰| 91精品国产综合久久国产大片| 久久综合九色综合97婷婷女人| 日韩一区在线免费观看| 亚洲国产精品一区二区尤物区| 久久9热精品视频| 成人av网站免费| 欧美高清精品3d| 国产三级精品三级在线专区| 夜夜嗨av一区二区三区四季av | 国模无码大尺度一区二区三区| 丁香亚洲综合激情啪啪综合| 日本久久电影网| 26uuu国产一区二区三区| 亚洲欧美乱综合| 久99久精品视频免费观看| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 97久久人人超碰| 欧美一区二区三区白人| 国产精品理伦片| 日本欧美大码aⅴ在线播放| 成人精品小蝌蚪| 正在播放亚洲一区| 日韩码欧中文字| 激情综合网最新| 欧美在线观看禁18| 久久亚洲综合色| 亚洲gay无套男同| 成人avav在线| 欧美成人精品1314www| 一区二区国产盗摄色噜噜| 国产一区三区三区| 91精品国产品国语在线不卡| ...xxx性欧美| 国产精品夜夜嗨| 91精品国产综合久久蜜臀| 亚洲视频一区在线| 激情小说欧美图片| 欧美日本一道本| 一区二区三区高清| 国产成人亚洲综合a∨婷婷图片 | 亚洲成av人**亚洲成av**| 粉嫩av亚洲一区二区图片| 日韩三级电影网址| 亚洲高清免费在线| 色综合久久中文字幕综合网| 国产性色一区二区| 精品一区免费av| 在线综合亚洲欧美在线视频| 亚洲激情五月婷婷| 国产99精品在线观看| 久久蜜桃av一区二区天堂| 蜜桃在线一区二区三区| 欧美日韩国产乱码电影| 亚洲一区二区三区爽爽爽爽爽| 成人一区二区视频| 2020国产成人综合网| 久久99国产精品久久99| 日韩一区二区在线看片| 日本不卡一区二区| 欧美日韩美少妇| 亚洲成人三级小说| 欧美日韩视频第一区| 亚洲成av人片www| 欧美美女喷水视频| 三级在线观看一区二区| 欧美肥大bbwbbw高潮| 丝袜美腿高跟呻吟高潮一区| 欧美日韩一卡二卡| 天堂午夜影视日韩欧美一区二区| 欧美日韩在线一区二区| 亚洲va欧美va人人爽午夜| 在线视频你懂得一区| 亚洲一二三专区| 欧美猛男gaygay网站| 日韩电影在线观看一区| 日韩一区二区三区电影在线观看| 日本美女视频一区二区| 精品国产污污免费网站入口| 国内成人精品2018免费看| 精品久久久久久久久久久院品网| 激情成人综合网| 国产三级欧美三级| 99久久99精品久久久久久 | 国产91丝袜在线播放0| 国产精品久久午夜夜伦鲁鲁| 99久久99久久精品国产片果冻| 亚洲欧美日韩国产综合| 欧美日本在线播放| 久久黄色级2电影| 国产欧美一区二区三区沐欲| 91视视频在线直接观看在线看网页在线看| 亚洲欧洲制服丝袜| 4hu四虎永久在线影院成人| 久久99精品国产麻豆不卡| 国产午夜亚洲精品羞羞网站| 成人动漫中文字幕| 亚洲小说欧美激情另类| 日韩欧美专区在线| 成人免费视频视频在线观看免费 | 亚洲图片欧美色图| 日韩欧美一区中文| 成人污污视频在线观看| 亚洲一区二区三区美女| 精品福利av导航| 色综合天天综合色综合av| 丝袜亚洲另类欧美综合| 国产亚洲1区2区3区| 在线观看成人小视频| 久久99国产精品成人| 亚洲欧美偷拍三级| 91精品国产综合久久久久久漫画| 国产资源在线一区| 亚洲视频一二区| 精品免费视频.| 色欧美片视频在线观看在线视频| 日韩电影免费在线| 国产精品三级电影| 欧美精品日韩精品| 国产69精品久久久久毛片| 同产精品九九九| 国产精品嫩草99a| 欧美一级高清大全免费观看| 91色.com| 国产精一品亚洲二区在线视频| 一区二区三区在线视频观看58| 欧美精品一区二区三区久久久| 欧美影院精品一区| 成人性生交大片免费看在线播放 | 国产一区二区成人久久免费影院| 一区二区三区四区不卡在线 | 亚洲你懂的在线视频| 久久色中文字幕| 欧美日韩在线电影| av高清不卡在线| 国产一区二区不卡在线| 日韩制服丝袜av| 一区二区在线观看av| 国产亚洲欧美激情| 日韩一区二区电影在线| 欧美性xxxxxxxx| 成人av片在线观看| 国产在线不卡视频| 蜜臀av国产精品久久久久| 亚洲一区二区视频在线| 国产精品久久一级| 久久久久久麻豆| 欧美一区二区在线免费观看| 欧美在线观看视频一区二区| av色综合久久天堂av综合| 国产一区二区三区| 蜜桃免费网站一区二区三区| 亚洲成人在线免费| 亚洲一区二区三区在线| 亚洲欧美激情小说另类| 国产精品久久久久久亚洲伦| 久久精品在线观看| 久久综合久久99| 日韩欧美第一区| 日韩女优电影在线观看| 欧美军同video69gay| 欧美日韩一区二区在线视频| 色噜噜夜夜夜综合网| 91美女片黄在线| 94-欧美-setu| 一本大道久久a久久综合| 91亚洲国产成人精品一区二三| 粉嫩嫩av羞羞动漫久久久| 国产成人午夜99999|