亚洲欧美第一页_禁久久精品乱码_粉嫩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| 日韩欧美精品三级| 日韩精品成人一区二区在线| 欧美国产欧美亚州国产日韩mv天天看完整 | 欧美日韩一区高清| 91丨九色porny丨蝌蚪| 欧美日韩免费高清一区色橹橹| 亚洲人成伊人成综合网小说| 久久欧美一区二区| 中文字幕乱码一区二区免费| 色综合咪咪久久| 一本色道久久综合亚洲精品按摩| 亚洲免费观看高清| 久久免费午夜影院| 亚洲成人免费看| 中文字幕字幕中文在线中不卡视频| 日韩你懂的在线播放| 国产伦精品一区二区三区免费| 日本欧美在线观看| 一二三四社区欧美黄| 7777精品久久久大香线蕉| 色综合一区二区| 天天影视涩香欲综合网| 国产精品久久久久久久久动漫| 亚洲成a人v欧美综合天堂| 一区二区三区在线观看网站| 亚洲啪啪综合av一区二区三区| 在线视频一区二区三区| 亚洲成人av福利| 丝袜美腿高跟呻吟高潮一区| 制服丝袜亚洲色图| 91麻豆精品国产91久久久使用方法 | 一区二区三区在线免费| 一本大道久久精品懂色aⅴ| 奇米影视一区二区三区小说| 丝袜美腿亚洲综合| 国产精品夫妻自拍| 国产精品亚洲第一区在线暖暖韩国| 777a∨成人精品桃花网| 日韩电影在线观看电影| 久久91精品国产91久久小草| 亚洲天堂网中文字| 亚洲v精品v日韩v欧美v专区| 国产麻豆午夜三级精品| 国产盗摄一区二区三区| 亚洲福利视频导航| 一区二区成人在线| 欧美国产97人人爽人人喊| 亚洲一区二区精品视频| 久久久国产精品午夜一区ai换脸| 久久97超碰色| 波多野结衣在线一区| 亚洲国产成人自拍| 欧美日韩精品一区二区三区四区 | 国产成人亚洲综合a∨猫咪| 一本一道波多野结衣一区二区| 国模无码大尺度一区二区三区| 亚洲婷婷综合久久一本伊一区| 成人激情动漫在线观看| 免费在线观看一区| 欧美一级片在线看| 韩国精品一区二区| 亚洲在线免费播放| 99国产一区二区三精品乱码| 成人av网在线| 精品一区二区精品| 精品国产成人在线影院| 亚洲欧洲精品成人久久奇米网| 亚洲成人你懂的| 91精品国产欧美一区二区成人| 欧洲精品在线观看| 99久久精品费精品国产一区二区| 一区二区三区中文字幕精品精品 | 日本不卡123| 在线不卡欧美精品一区二区三区| 91免费精品国自产拍在线不卡| 麻豆freexxxx性91精品| 91久久香蕉国产日韩欧美9色| 亚洲色图.com| 精品午夜一区二区三区在线观看| 欧美日韩在线不卡| 国产欧美精品一区| 国产精品视频你懂的| 日韩福利视频导航| 久久综合九色欧美综合狠狠| 2020国产精品自拍| 91小视频在线免费看| 欧美激情自拍偷拍| 欧美在线影院一区二区| 亚洲男同性视频| 久久精品99国产国产精| 亚洲婷婷综合色高清在线| 亚洲国产中文字幕| 国产欧美视频一区二区三区| 一区二区三区毛片| 99久久精品国产一区二区三区| 亚洲成av人综合在线观看| 精品国产一区二区三区忘忧草| www..com久久爱| 亚洲一区二三区| 国产精品免费观看视频| 亚洲精选一二三| 在线精品视频一区二区| 7777精品伊人久久久大香线蕉| 亚洲一区二区三区四区在线免费观看| 久久久午夜精品| 国产一区二区三区免费看| 91性感美女视频| 欧美手机在线视频| 成人永久看片免费视频天堂| 亚洲成av人影院| 国产精品久久久久一区二区三区共| 蜜臀久久99精品久久久久宅男| 欧美大尺度电影在线| 亚洲欧美另类小说| 免费成人在线观看| 在线免费观看日韩欧美| 欧美韩日一区二区三区四区| 五月激情综合色| 99久久伊人久久99| 69堂成人精品免费视频| 国产欧美一区二区精品秋霞影院| 亚洲午夜在线电影| 亚洲欧洲另类国产综合| 另类小说欧美激情| 色综合久久66| 久久久不卡网国产精品一区| 蜜臀91精品一区二区三区| 色综合色狠狠天天综合色| 日韩毛片一二三区| 九九在线精品视频| 欧美顶级少妇做爰| 亚洲精品五月天| av在线播放不卡| 久久婷婷久久一区二区三区| 琪琪一区二区三区| 欧美日韩国产成人在线91| 成人午夜精品在线| 久久久精品综合| 国产精品亚洲视频| 在线免费精品视频| 亚洲九九爱视频| 国产成人av福利| 国产精品三级av| 成人午夜精品在线| 国产精品不卡在线观看| va亚洲va日韩不卡在线观看| 亚洲天堂福利av| 91免费观看视频| 亚洲欧洲精品一区二区精品久久久| 丁香五精品蜜臀久久久久99网站 | 国产一区二区免费视频| 日韩精品最新网址| 精品一区精品二区高清| 日韩欧美国产电影| 狠狠色狠狠色综合| 久久一区二区视频| 国产精品一区二区久久精品爱涩| 精品日本一线二线三线不卡| 亚洲午夜免费视频| 93久久精品日日躁夜夜躁欧美| 国产精品狼人久久影院观看方式| 免费不卡在线观看| 精品欧美一区二区久久 | 久久免费电影网| 国产一区二区三区免费在线观看 | 欧美亚洲日本国产| 亚洲国产日韩综合久久精品| 欧美性猛交xxxx乱大交退制版| 午夜视频在线观看一区| 欧美一区二区在线免费播放| 久久国产麻豆精品| 国产欧美1区2区3区| av一本久道久久综合久久鬼色| 亚洲日本免费电影| 欧美三级在线看| 麻豆精品一区二区三区| 久久久www成人免费无遮挡大片| 国产成人在线视频免费播放| 最新日韩av在线| 91性感美女视频| 亚洲视频综合在线| 欧洲视频一区二区| 国产剧情在线观看一区二区| 精品国产91洋老外米糕| 日韩电影网1区2区| 欧美日本在线视频| 精品亚洲成av人在线观看| 亚洲欧洲av在线| 欧美日韩在线免费视频| 久久99精品国产麻豆不卡| 国产精品久久久久9999吃药| 欧美日本在线视频| 国产精品456露脸| 亚洲一区在线观看视频| 久久综合九色综合久久久精品综合| jlzzjlzz亚洲女人18| 日韩va欧美va亚洲va久久| 国产欧美一区二区三区网站| 欧美亚洲国产一区二区三区va |