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

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

?? sja1000p.c

?? sja1000 peliCAN模式 在linux下面的驅動程序。
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* sja1000.c
 * Linux CAN-bus device driver.
 * Written by Arnaud Westenberg email:arnaud@wanadoo.nl
 * This software is released under the GPL-License.
 * Version 0.6 18 Sept 2000
 * Changed for PeliCan mode SJA1000 by Tomasz Motylewski (BFAD GmbH)
 * T.Motylewski@bfad.de
 */
/*
#include <linux/autoconf.h>
#if defined (CONFIG_MODVERSIONS) && !defined (MODVERSIONS)
#define MODVERSIONS
#endif

#if defined (MODVERSIONS)
#include <linux/modversions.h>
#endif
*/

#include <linux/delay.h>
#include <asm/irq.h>
#include "sysdep.h"
#include "candrv.h"
#include "sja1000p.h"

//struct chip_t *chip_irq = NULL;
//struct candevice_t *device_irq = NULL;
//struct canfifo_t *fifo_irq = NULL;

void (*put_reg)( u8 data, u32 address);
unsigned (*get_reg)( u32 address );


///////////////////////////////////////////////////////////////////////////////
// sja1000p_enable_configuration

int sja1000p_enable_configuration( struct chip_t *pchip )
{
  int i=0;
  enum sja1000_PeliCAN_MOD flags;

  disable_irq( pchip->irq );

  flags = pchip->read_register( pchip->vbase_addr + SJAMOD );

  while ((!(flags & MOD_RM)) && (i<=10)) {
    pchip->write_register( MOD_RM, pchip->vbase_addr + SJAMOD );
    // TODO: chinfigurable MOD_AFM (32/16 bit acceptance filter)
    // config MOD_LOM (listen only)
    udelay(100);
    i++;
    flags = pchip->read_register( pchip->vbase_addr + SJAMOD );

  }
  if (i>=10) {
    CANMSG("Reset error\n");
    enable_irq( pchip->irq );
    return -ENODEV;
  }

  return 0;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_disable_configuration

int sja1000p_disable_configuration( struct chip_t *pchip )
{
  int i=0;
  enum sja1000_PeliCAN_MOD flags;

  flags = pchip->read_register( pchip->vbase_addr + SJAMOD );

  while ( (flags & MOD_RM) && (i<=10) ) {
    pchip->write_register( 0, pchip->vbase_addr + SJAMOD );
    // TODO: chinfigurable MOD_AFM (32/16 bit acceptance filter)
    // config MOD_LOM (listen only)
    udelay(100);
    i++;
    flags = pchip->read_register( pchip->vbase_addr + SJAMOD );
  }
  if (i>=10) {
    CANMSG("Error leaving reset status\n");
    return -ENODEV;
  }

  enable_irq( pchip->irq );

  return 0;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_chip_config

int sja1000p_chip_config( struct chip_t *pchip )
{
  if (sja1000p_enable_configuration(pchip))
    return -ENODEV;

  /* Set mode, clock out, comparator */
  pchip->write_register( CDR_PELICAN | pchip->sja_cdr_reg, pchip->vbase_addr + SJACDR ); 
  /* Set driver output configuration */
  pchip->write_register( pchip->sja_ocr_reg, pchip->vbase_addr + SJAOCR ); 

  if (sja1000p_extended_mask(pchip,0x00000000, 0xffffffff))
    return -ENODEV;
	
  if (!baudrate)
    baudrate=1000;
  if (sja1000p_baud_rate(pchip,1000*baudrate,pchip->clock,0,75,0))
    return -ENODEV;

  /* Enable hardware interrupts */
  pchip->write_register( ENABLE_INTERRUPTS, pchip->vbase_addr + SJAIER ); 

  sja1000p_disable_configuration( pchip ); 
	
  return 0;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_extended_mask

int sja1000p_extended_mask( struct chip_t *pchip, 
			    u32 code, 
			    u32 mask )
{
  int i;

  if (sja1000p_enable_configuration(pchip))
    return -ENODEV;

  // LSB to +3, MSB to +0	
  for(i=SJA_PeliCAN_AC_LEN; --i>=0;) {
    pchip->write_register( code & 0xff, pchip->vbase_addr + SJAACR0+i);
    pchip->write_register( mask & 0xff, pchip->vbase_addr + SJAAMR0+i);
    code >>= 8;
    mask >>= 8;
  }

  DEBUGMSG("Setting acceptance code to 0x%lx\n",(unsigned long)code);
  DEBUGMSG("Setting acceptance mask to 0x%lx\n",(unsigned long)mask);

  sja1000p_disable_configuration(pchip);

  return 0;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_baud_rate

/* Set communication parameters.
 * param rate baud rate in Hz
 * param clock frequency of sja1000 clock in Hz (ISA osc is 14318000)
 * param sjw synchronization jump width (0-3) prescaled clock cycles
 * param sampl_pt sample point in % (0-100) sets (TSEG1+1)/(TSEG1+TSEG2+2) ratio
 * param flags fields BTR1_SAM, OCMODE, OCPOL, OCTP, OCTN, CLK_OFF, CBP
 */

int sja1000p_baud_rate( struct chip_t *pchip, 
			u32 rate, 
			u32 clock, 
			u32 sjw,
			u32 sampl_pt, 
			u32 flags ) 
{
  int best_error = 1000000000, error;
  int best_tseg=0, best_brp=0, best_rate=0, brp=0;
  int tseg=0, tseg1=0, tseg2=0;
	
  if (sja1000p_enable_configuration(pchip))
    return -ENODEV;

  clock /=2;

  /* tseg even = round down, odd = round up */
  for (tseg=(0+0+2)*2; tseg<=(MAX_TSEG2+MAX_TSEG1+2)*2+1; tseg++) {
    brp = clock/((1+tseg/2)*rate)+tseg%2;
    if (brp == 0 || brp > 64)
      continue;
    error = rate - clock/(brp*(1+tseg/2));
    if (error < 0)
      error = -error;
    if (error <= best_error) {
      best_error = error;
      best_tseg = tseg/2;
      best_brp = brp-1;
      best_rate = clock/(brp*(1+tseg/2));
    }
  }
  if (best_error && (rate/best_error < 10)) {
    CANMSG("baud rate %d is not possible with %d Hz clock\n",
	   rate, 2*clock);
    CANMSG("%d bps. brp=%d, best_tseg=%d, tseg1=%d, tseg2=%d\n",
	   best_rate, best_brp, best_tseg, tseg1, tseg2);
    return -EINVAL;
  }
  tseg2 = best_tseg-(sampl_pt*(best_tseg+1))/100;
  if (tseg2 < 0)
    tseg2 = 0;
  if (tseg2 > MAX_TSEG2)
    tseg2 = MAX_TSEG2;
  tseg1 = best_tseg-tseg2-2;
  if (tseg1>MAX_TSEG1) {
    tseg1 = MAX_TSEG1;
    tseg2 = best_tseg-tseg1-2;
  }

  DEBUGMSG("Setting %d bps.\n", best_rate);
  DEBUGMSG("brp=%d, best_tseg=%d, tseg1=%d, tseg2=%d, sampl_pt=%d\n",
	   best_brp, best_tseg, tseg1, tseg2,
	   (100*(best_tseg-tseg2)/(best_tseg+1)));


  pchip->write_register( sjw<<6 | best_brp, pchip->vbase_addr + SJABTR0);
  pchip->write_register( ( ( flags & BTR1_SAM) != 0)<<7 | (tseg2<<4) 
		| tseg1, pchip->vbase_addr + SJABTR1);

  sja1000p_disable_configuration(pchip);

  return 0;
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_read

void sja1000p_read( struct chip_t *pchip ) {
  int i, flags, len, datastart;
  do {
    flags = pchip->read_register( pchip->vbase_addr + SJAFRM );
    if(flags&FRM_FF) {
      ( ( struct canmsg_t *)pchip->fifo.prxbuf )[ pchip->fifo.head ].id =
	( pchip->read_register( pchip->vbase_addr + SJAID0)<<21) +
	( pchip->read_register( pchip->vbase_addr + SJAID1)<<13) +
	( pchip->read_register( pchip->vbase_addr + SJAID2)<<5) +
	( pchip->read_register( pchip->vbase_addr + SJAID3)>>3);
      datastart = SJADATE;
    } else {
      ( ( struct canmsg_t *)pchip->fifo.prxbuf )[pchip->fifo.head].id =
	( pchip->read_register( pchip->vbase_addr + SJAID0)<<3) +
	( pchip->read_register( pchip->vbase_addr + SJAID1)>>5);
      datastart = SJADATS;
    }
    ( ( struct canmsg_t *)pchip->fifo.prxbuf) [pchip->fifo.head].flags =
      ((flags & FRM_RTR) ? MSG_RTR : 0) |
      ((flags & FRM_FF) ? MSG_EXT : 0);
    len = flags & FRM_DLC_M;
    for(i=0; i< len; i++) {
      ( ( struct canmsg_t *)pchip->fifo.prxbuf)[ pchip->fifo.head ].data[i]=
	pchip->read_register( pchip->vbase_addr + datastart+i);
    }
    ( ( struct canmsg_t *)pchip->fifo.prxbuf )[ pchip->fifo.head ].length = len;
    pchip->fifo.head++; pchip->fifo.head %= MAX_BUF_LENGTH;
    // FIXME: what if pchip->fifo.head == pchip->fifo.tail again ?
    pchip->write_register( CMR_RRB, pchip->vbase_addr + SJACMR);
  } while ( pchip->read_register( pchip->vbase_addr + SJASR) & SR_RBS);
}

///////////////////////////////////////////////////////////////////////////////
// sja1000p_pre_read_config

int sja1000p_pre_read_config( struct chip_t *pchip )
{
  int i;
  i = pchip->read_register( pchip->vbase_addr + SJASR );
	
  if (!(i&SR_RBS)) {
    return 0;
  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人在线免费| 亚洲电影在线播放| 精品国产91久久久久久久妲己| 在线观看网站黄不卡| 97国产精品videossex| 9色porny自拍视频一区二区| 成人午夜电影网站| 成人h动漫精品| 91麻豆福利精品推荐| 色婷婷久久99综合精品jk白丝| 成人性色生活片| 国产美女在线观看一区| 久久机这里只有精品| 极品少妇一区二区| 久久成人麻豆午夜电影| 日韩av网站在线观看| 美女网站在线免费欧美精品| 精久久久久久久久久久| 国产精品123区| 91啪九色porn原创视频在线观看| 91麻豆文化传媒在线观看| 欧美亚洲一区二区三区四区| 欧美放荡的少妇| 欧美xxxx老人做受| 国产日韩精品一区二区三区| 国产精品国产三级国产普通话蜜臀 | 国产尤物一区二区| 成人18视频在线播放| 欧美日韩亚洲综合在线| 日韩视频永久免费| 久久亚洲欧美国产精品乐播| 中文字幕不卡在线播放| 亚洲激情在线激情| 久久99精品国产麻豆婷婷洗澡| 国产精品亚洲第一区在线暖暖韩国| 成人高清免费观看| 欧美日韩成人综合天天影院| 欧美精品一区二区三区很污很色的 | 中文字幕成人av| 一区二区三区不卡视频| 精品伊人久久久久7777人| 97久久超碰精品国产| 欧美区在线观看| 久久久精品国产免费观看同学| 一区二区三区精密机械公司| 蜜臀精品一区二区三区在线观看| 成人精品视频.| 欧美三级视频在线| 久久久五月婷婷| 婷婷久久综合九色综合绿巨人 | 中文字幕一区二区三区蜜月| 五月激情综合色| 成人app网站| 欧美成人三级在线| 国产精品国产三级国产a| 久久精品久久久精品美女| 色综合中文字幕| 欧美韩日一区二区三区四区| 天堂成人免费av电影一区| 成人免费视频网站在线观看| 欧美mv日韩mv| 日韩av在线发布| 欧美日本免费一区二区三区| 一区二区高清在线| 成人高清视频在线| 久久影院视频免费| 午夜精品久久久久久久99樱桃 | 欧美中文字幕不卡| 国产女主播一区| 国产精品一区在线| 日韩欧美一卡二卡| 日韩成人一区二区| 欧美一区二区精美| 日本欧美一区二区在线观看| 欧美精品一二三区| 秋霞国产午夜精品免费视频| 精品视频一区二区三区免费| 偷拍日韩校园综合在线| 9191成人精品久久| 免费人成网站在线观看欧美高清| 91精品在线观看入口| 色妞www精品视频| 一区二区三区欧美视频| 日韩精品电影在线| 欧美欧美午夜aⅴ在线观看| 亚洲成人1区2区| 日韩欧美自拍偷拍| 国产一区在线精品| 国产精品视频线看| 91免费观看国产| 亚洲国产精品一区二区尤物区| 在线观看av不卡| 日韩中文字幕麻豆| 精品对白一区国产伦| 国产伦精品一区二区三区在线观看| 国产日韩欧美综合一区| 99久久伊人久久99| 一区二区三区中文字幕在线观看| 在线观看av一区| 国内精品久久久久影院薰衣草| 欧美激情一区二区三区全黄| av网站免费线看精品| 亚洲午夜激情网站| 精品久久久久久久久久久久久久久| 韩国欧美国产一区| 日韩毛片精品高清免费| 69久久夜色精品国产69蝌蚪网| 韩国欧美国产1区| 日韩一区在线看| 欧美日韩国产一级片| 国产不卡在线视频| 日韩电影一区二区三区| 678五月天丁香亚洲综合网| 国产成人综合在线观看| 亚洲精品乱码久久久久久黑人| 在线播放国产精品二区一二区四区| 国内精品视频666| 亚洲另类在线视频| 久久精品视频在线免费观看| 一本到不卡免费一区二区| 国内成+人亚洲+欧美+综合在线| 国产精品毛片大码女人| 日韩欧美黄色影院| 日本久久一区二区| 国产精品亚洲成人| 日本欧美一区二区| 一区二区三区在线观看欧美| 久久综合视频网| 在线播放亚洲一区| 欧美亚洲日本国产| 91在线观看污| 国产成a人无v码亚洲福利| 日本不卡在线视频| 亚洲图片欧美视频| 国产精品成人网| 久久久一区二区三区捆绑**| 欧美日韩不卡一区| 欧美中文字幕亚洲一区二区va在线 | 高清av一区二区| 韩日精品视频一区| 精品一区二区三区蜜桃| 青青草国产精品亚洲专区无| 亚洲成人资源在线| 亚洲超碰97人人做人人爱| 亚洲免费在线观看视频| 中文字幕一区二区三区四区 | 欧美日韩色一区| 色哟哟在线观看一区二区三区| 成人午夜私人影院| caoporn国产精品| 国产成人精品aa毛片| 国产精品一区免费视频| 国产成人免费在线视频| 国产美女娇喘av呻吟久久| 国产呦精品一区二区三区网站| 国产综合久久久久久鬼色| 国产美女在线精品| 国产高清久久久| 成人av中文字幕| caoporm超碰国产精品| 成人av综合在线| 色老汉一区二区三区| 91丝袜高跟美女视频| 99vv1com这只有精品| 色视频欧美一区二区三区| 91激情在线视频| 欧美高清视频在线高清观看mv色露露十八 | 另类欧美日韩国产在线| 麻豆精品视频在线观看视频| 国内精品嫩模私拍在线| 国产91清纯白嫩初高中在线观看| 国产不卡一区视频| 91色|porny| 91精品国产综合久久精品app| 欧美一区二区三区人| 精品久久久久久久久久久院品网 | 欧美一区在线视频| 欧美成人精品二区三区99精品| 日韩精品在线一区二区| 国产亚洲欧美激情| 一区二区三区在线免费视频| 日本不卡视频在线| 国产二区国产一区在线观看| www.欧美日韩国产在线| 色综合色狠狠综合色| 日韩三级在线免费观看| 中文字幕欧美日韩一区| 一区二区三区**美女毛片| 精品一区二区免费视频| 91蝌蚪porny| 日韩欧美一区二区免费| 亚洲精品伦理在线| 国产精品系列在线播放| 欧美日韩一级视频| 国产亚洲一二三区| 日本欧美在线看| 91福利区一区二区三区| 久久久一区二区| 视频在线在亚洲| 色综合视频在线观看|