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

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

?? can.c

?? can總線應(yīng)用的一個(gè)例子
?? C
字號(hào):
/*****************************************************************************
 *  can.c:  CAN module API file for NXP LPC23xx/24xx Family Microprocessors
 *
 *   Copyright(C) 2006, NXP Semiconductor
 *   All rights reserved.
 *
 *   History
 *   2006.09.13  ver 1.00    Prelimnary version, first Release
 *
*****************************************************************************/
#include "LPC23xx.h"					/* LPC23xx definitions */
#include "type.h"
#include "irq.h"
#include "can.h"

// Receive Queue: one queue for each CAN port
extern CAN_MSG MsgBuf_RX1, MsgBuf_RX2;
extern volatile DWORD CAN1RxDone, CAN2RxDone;

DWORD CANStatus;
DWORD CAN1RxCount = 0, CAN2RxCount = 0;
DWORD CAN1ErrCount = 0, CAN2ErrCount = 0;

/******************************************************************************
** Function name:		CAN_ISR_Rx1
**
** Descriptions:		CAN Rx1 interrupt handler
**
** parameters:			None
** Returned value:		None
** 
******************************************************************************/
void CAN_ISR_Rx1( void )
{
  DWORD * pDest;

  // initialize destination pointer
  pDest = (DWORD *)&MsgBuf_RX1;
  *pDest = CAN1RFS;  // Frame

  pDest++;
  *pDest = CAN1RID; // ID		//change by gongjun

  pDest++;
  *pDest = CAN1RDA; // Data A

  pDest++;
  *pDest = CAN1RDB; // Data B
	
  CAN1RxDone = TRUE;
  CAN1CMR = 0x04; // release receive buffer
  return;
}

/******************************************************************************
** Function name:		CAN_ISR_Rx2
**
** Descriptions:		CAN Rx2 interrupt handler
**
** parameters:			None
** Returned value:		None
** 
******************************************************************************/
void CAN_ISR_Rx2( void )
{
  DWORD *pDest;

  // initialize destination pointer
  pDest = (DWORD *)&MsgBuf_RX2;
  *pDest = CAN2RFS;  // Frame

  pDest++;
  *pDest = CAN2RID; // ID

  pDest++;
  *pDest = CAN2RDA; // Data A

  pDest++;
  *pDest = CAN2RDB; // Data B

  CAN2RxDone = TRUE;
  CAN2CMR = 0x04; // release receive buffer
  return;
}

/*****************************************************************************
** Function name:		CAN_Handler
**
** Descriptions:		CAN interrupt handler
**
** parameters:			None
** Returned value:		None
** 
*****************************************************************************/
void CAN_Handler(void) __irq 
{		
  IENABLE;			/* handles nested interrupt */

  CANStatus = CAN_RX_SR;
  if ( CANStatus & (1 << 8) )
  {
	CAN1RxCount++;
	CAN_ISR_Rx1();
  }
  if ( CANStatus & (1 << 9) )
  {
	CAN2RxCount++;
	CAN_ISR_Rx2();
  }
  if ( CAN1GSR & (1 << 6 ) )
  {
	/* The error count includes both TX and RX */
	CAN1ErrCount = (CAN1GSR >> 16 );
  }
  if ( CAN2GSR & (1 << 6 ) )
  {
	/* The error count includes both TX and RX */
	CAN2ErrCount = (CAN2GSR >> 16 );
  }
  IDISABLE;
  VICVectAddr = 0;		/* Acknowledge Interrupt */
  return;
}

/******************************************************************************
** Function name:		CAN_Init
**
** Descriptions:		Initialize CAN, install CAN interrupt handler
**
** parameters:			bitrate
** Returned value:		true or false, false if initialization failed.
** 
******************************************************************************/
DWORD CAN_Init( DWORD can_btr )
{
  CAN1RxDone = CAN2RxDone = FALSE;

  PCONP |= (1 << 13) | (1 << 14);	// Enable clock to the peripheral

  PINSEL0	&= ~0x00000F0F;
  PINSEL0 |= 0x0000A05;	// port0.0~1, function 0x01, port0.4~5, function 0x10

  CAN1MOD = CAN2MOD = 1;	// Reset CAN
  CAN1IER = CAN2IER = 0;	// Disable Receive Interrupt
  CAN1GSR = CAN2GSR = 0;	// Reset error counter when CANxMOD is in reset

  CAN1BTR = CAN2BTR = can_btr;
  CAN1MOD = CAN2MOD = 0x0;	// CAN in normal operation mode

  // Install CAN interrupt handler
  install_irq( 23, (void *)CAN_Handler, HIGHEST_PRIORITY );
  CAN1IER = CAN2IER = 0x01;		// Enable receive interrupts
  return( TRUE );
}

/******************************************************************************
** Function name:		CAN_SetACCF_Lookup
**
** Descriptions:		Initialize CAN, install CAN interrupt handler
**
** parameters:			bitrate
** Returned value:		true or false, false if initialization failed.
** 
******************************************************************************/
void CAN_SetACCF_Lookup( void )
{
  DWORD address = 0;
  DWORD i;
  DWORD ID_high, ID_low;

  // Set explicit standard Frame  
  CAN_SFF_SA = address;
  for ( i = 0; i < ACCF_IDEN_NUM; i += 2 )
  {
	ID_low = (i << 29) | (EXP_STD_ID << 16);
	ID_high = ((i+1) << 13) | (EXP_STD_ID << 0);
	*((volatile DWORD *)(CAN_MEM_BASE + address)) = ID_low | ID_high;
	address += 4; 
  }
		
  // Set group standard Frame 
  CAN_SFF_GRP_SA = address;
  for ( i = 0; i < ACCF_IDEN_NUM; i += 2 )
  {
	ID_low = (i << 29) | (GRP_STD_ID << 16);
	ID_high = ((i+1) << 13) | (GRP_STD_ID << 0);
	*((volatile DWORD *)(CAN_MEM_BASE + address)) = ID_low | ID_high;
	address += 4; 
  }
 
  // Set explicit extended Frame 
  CAN_EFF_SA = address;
  for ( i = 0; i < ACCF_IDEN_NUM; i++  )
  {
	ID_low = (i << 29) | (EXP_EXT_ID << 0);
	*((volatile DWORD *)(CAN_MEM_BASE + address)) = ID_low;
	address += 4; 
  }

  // Set group extended Frame 
  CAN_EFF_GRP_SA = address;
  for ( i = 0; i < ACCF_IDEN_NUM; i++  )
  {
	ID_low = (i << 29) | (GRP_EXT_ID << 0);
	*((volatile DWORD *)(CAN_MEM_BASE + address)) = ID_low;
	address += 4; 
  }
   
  // Set End of Table 
  CAN_EOT = address;
  return;
}

/******************************************************************************
** Function name:		CAN_SetACCF
**
** Descriptions:		Set acceptance filter and SRAM associated with	
**
** parameters:			ACMF mode
** Returned value:		None
**
** 
******************************************************************************/
void CAN_SetACCF( DWORD ACCFMode )
{
  switch ( ACCFMode )
  {
	case ACCF_OFF:
	  CAN_AFMR = ACCFMode;
	  CAN1MOD = CAN2MOD = 1;	// Reset CAN
	  CAN1IER = CAN2IER = 0;	// Disable Receive Interrupt
	  CAN1GSR = CAN2GSR = 0;	// Reset error counter when CANxMOD is in reset
	break;

	case ACCF_BYPASS:
	  CAN_AFMR = ACCFMode;
	break;

	case ACCF_ON:
	case ACCF_FULLCAN:
	  CAN_AFMR = ACCF_OFF;
	  CAN_SetACCF_Lookup();
	  CAN_AFMR = ACCFMode;
	break;

	default:
	break;
  }
  return;
}

/******************************************************************************
** Function name:		CAN1_SendMessage
**
** Descriptions:		Send message block to CAN1	
**
** parameters:			pointer to the CAN message
** Returned value:		true or false, if message buffer is available,
**						message can be sent successfully, return TRUE,
**						otherwise, return FALSE.
** 
******************************************************************************/
DWORD CAN1_SendMessage( CAN_MSG *pTxBuf )
{
  DWORD CANStatus;

  CANStatus = CAN1SR;
  if ( CANStatus & 0x00000004 )
  {
	CAN1TFI1 = pTxBuf->Frame & 0xC00F0000;
	CAN1TID1 = pTxBuf->MsgID;
	CAN1TDA1 = pTxBuf->DataA;
	CAN1TDB1 = pTxBuf->DataB;
	CAN1CMR = 0x21;
	return ( TRUE );
  }
  else if ( CANStatus & 0x00000400 )
  {
	CAN1TFI2 = pTxBuf->Frame & 0xC00F0000;
	CAN1TID2 = pTxBuf->MsgID;
	CAN1TDA2 = pTxBuf->DataA;
	CAN1TDB2 = pTxBuf->DataB;
	CAN1CMR = 0x41;
	return ( TRUE );
  }
  else if ( CANStatus & 0x00040000 )
  {	
	CAN1TFI3 = pTxBuf->Frame & 0xC00F0000;
	CAN1TID3 = pTxBuf->MsgID;
	CAN1TDA3 = pTxBuf->DataA;
	CAN1TDB3 = pTxBuf->DataB;
	CAN1CMR = 0x81;
	return ( TRUE );
  }
  return ( FALSE );
}

/******************************************************************************
**                            End Of File
******************************************************************************/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费高清成人在线| 成人午夜电影久久影院| 亚洲成人精品一区| 一区二区三区在线视频播放| 亚洲欧美日韩国产成人精品影院| 国产精品丝袜在线| 国产精品国产自产拍高清av | 欧美国产精品中文字幕| wwwwxxxxx欧美| 国产日韩一级二级三级| 日本一区二区成人| 自拍偷拍亚洲综合| 亚洲一区二区视频| 视频在线观看一区二区三区| 丝袜亚洲精品中文字幕一区| 日本视频中文字幕一区二区三区| 青青草精品视频| 久久精品噜噜噜成人av农村| 狠狠色丁香久久婷婷综合丁香| 国产一区美女在线| 成人免费视频app| 日本精品视频一区二区| 欧美精品亚洲一区二区在线播放| 日韩视频在线一区二区| 久久精品人人做人人爽97 | 国产米奇在线777精品观看| 国产成人午夜高潮毛片| jlzzjlzz欧美大全| 欧美三级韩国三级日本一级| 日韩欧美综合在线| 国产精品麻豆久久久| 亚洲色图视频免费播放| 视频一区二区三区中文字幕| 久久国产精品72免费观看| 高清不卡一区二区在线| 在线精品视频一区二区三四| 日韩天堂在线观看| 国产精品欧美极品| 偷拍亚洲欧洲综合| 国产剧情在线观看一区二区| 99久精品国产| 欧美一区二区久久| 亚洲欧洲美洲综合色网| 大尺度一区二区| 91久久久免费一区二区| 日韩精品中午字幕| 中文字幕在线观看不卡| 视频在线观看91| 国产风韵犹存在线视精品| 日本伦理一区二区| 精品久久久久久亚洲综合网| 亚洲免费在线播放| 精品亚洲porn| 日本韩国精品在线| 精品国产免费人成在线观看| 亚洲女同一区二区| 国产一区二区毛片| 欧美日韩一级二级| 国产精品久久二区二区| 欧美aaa在线| 色婷婷av一区二区| 久久精品欧美一区二区三区麻豆| 亚洲在线视频网站| 成人激情校园春色| 日韩精品自拍偷拍| 亚洲一区二区三区影院| 丰满少妇久久久久久久| 日韩色视频在线观看| 亚洲精品国产一区二区三区四区在线| 久久国产综合精品| 欧美自拍偷拍一区| 中文字幕一区二区三区不卡| 久久99这里只有精品| 欧美日韩免费视频| 亚洲同性同志一二三专区| 国产做a爰片久久毛片| 3atv一区二区三区| 亚洲小说欧美激情另类| 91亚洲精华国产精华精华液| 久久久不卡网国产精品一区| 免费观看久久久4p| 欧美日韩亚洲高清一区二区| 亚洲欧美日韩电影| voyeur盗摄精品| 国产女主播一区| 精品一区二区三区免费视频| 欧美一区三区四区| 日韩国产精品91| 欧美日韩精品一区二区在线播放| 综合色中文字幕| av电影天堂一区二区在线| 国产欧美日韩另类一区| 国产精品99精品久久免费| 日韩欧美中文字幕公布| 日本亚洲最大的色成网站www| 欧美性生活影院| 伊人色综合久久天天| 91色porny在线视频| 亚洲天堂a在线| 91丨九色丨蝌蚪富婆spa| 中文字幕一区二区三| 欧美日韩日日骚| 亚洲一二三级电影| 欧美无人高清视频在线观看| 亚洲午夜影视影院在线观看| 色屁屁一区二区| 亚洲激情六月丁香| 欧美性大战久久久久久久蜜臀 | 亚洲制服欧美中文字幕中文字幕| 色狠狠色狠狠综合| 亚洲综合激情另类小说区| 色综合久久综合网97色综合 | 日韩电影在线免费看| 欧美一区二区网站| 玖玖九九国产精品| 国产夜色精品一区二区av| 国产传媒欧美日韩成人| 国产目拍亚洲精品99久久精品| 成人免费视频播放| 亚洲欧美日韩在线| 欧美三级午夜理伦三级中视频| 亚欧色一区w666天堂| 日韩一级黄色大片| 国产盗摄一区二区| 国产精品不卡在线观看| 欧美在线综合视频| 奇米四色…亚洲| 久久婷婷色综合| 99久久久无码国产精品| 亚洲午夜免费电影| 日韩一区二区免费高清| 国产成人亚洲精品青草天美| 亚洲日本在线观看| 欧美久久一区二区| 国产精品一区二区三区网站| 亚洲欧洲三级电影| 欧美福利视频导航| 国产一区二区精品久久99| 日韩美女啊v在线免费观看| 欧美日韩精品一二三区| 激情综合一区二区三区| 自拍av一区二区三区| 91麻豆精品国产91久久久使用方法| 久久er99精品| 亚洲人成网站色在线观看| 欧美日韩色一区| 国产电影精品久久禁18| 一区二区三区电影在线播| 精品av综合导航| 91久久精品午夜一区二区| 久久精品国产在热久久| 中文字幕一区二区视频| 中文字幕不卡在线观看| 欧美日韩综合在线免费观看| 久久成人免费网站| 一区二区三区在线不卡| 精品99一区二区| 欧美三区在线观看| 国产精品原创巨作av| 亚洲成人激情综合网| 中文字幕成人av| 日韩一区二区三区电影在线观看| 99视频一区二区| 精品一区二区三区免费毛片爱| 亚洲欧美成人一区二区三区| 久久婷婷成人综合色| 欧美日产国产精品| av电影在线不卡| 国产一区二区精品在线观看| 午夜精品成人在线视频| 国产精品久久一级| 精品国产凹凸成av人导航| 欧美羞羞免费网站| av电影天堂一区二区在线观看| 久久99精品国产.久久久久久| 夜夜操天天操亚洲| 中文字幕不卡的av| 精品国产免费人成在线观看| 欧美日韩一区二区欧美激情| aaa亚洲精品| 国产不卡视频一区二区三区| 久久激情五月激情| 丝袜美腿亚洲一区二区图片| 中文字幕一区二区三| 久久久久久电影| 日韩欧美国产精品一区| 欧美日韩高清影院| 91国内精品野花午夜精品| 福利电影一区二区三区| 国产一区二区三区在线观看免费视频 | 欧美自拍偷拍一区| 91视频免费观看| 波多野结衣一区二区三区| 国产iv一区二区三区| 国产乱码精品一区二区三区忘忧草 | 91天堂素人约啪| 成人一区二区视频| 国产91精品欧美| 国产精品白丝jk黑袜喷水| 国产一区欧美一区|