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

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

?? rf_io.c

?? 軟件無(wú)線電的平臺(tái)
?? C
字號(hào):
/***************************************************************************             rf_io.c  - IO-functions for the rf                            -------------------    begin                :  2002    authors              :  Linus Gasser    emails               :  linus.gasser@epfl.ch ***************************************************************************//***************************************************************************                                 Changes                                 ------- date - name - description 02-10-01 - ineiti - create 02-12-11 - ineiti - changed the name from daq_io.c, adjusted daq to rf  **************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * *                                                                         * ***************************************************************************//** * The hardware-interface for the rf-cards */#include "debugging.h"#include "channel_rf.h"#include "rf_io.h"#include "rf_dev.h"#include "memory.h"#define DBG_LVL 0void setup_regs( device_t *dev_rf ) {  unsigned int baseptr, ioptr;  unsigned int rx_pci_address;  unsigned int tx_pci_address;  unsigned int mbox_pci_address;  baseptr = dev_rf->data_base;  ioptr = dev_rf->addr[1];  PR_DBG( 2, "baseptr: %x, ioptr: %x\n", baseptr, ioptr );  rx_pci_address = (unsigned int) virt_to_bus(dev_rf->rx_buffer);  tx_pci_address = (unsigned int) virt_to_bus(dev_rf->tx_buffer);  mbox_pci_address = (unsigned int) virt_to_bus(dev_rf->mboxes);  PR_DBG( 2, "rx: %p-%p\n", dev_rf->rx_buffer, dev_rf->rx_buffer +          dev_rf->blocks_in_frame * DAQ_DMA_BLOCK_SIZE_BYTES );  PR_DBG( 2, "tx: %p-%p\n", dev_rf->tx_buffer, dev_rf->tx_buffer +          dev_rf->blocks_in_frame * DAQ_DMA_BLOCK_SIZE_BYTES );  // Program DMA0 mode reg 80h  // 0000000000000000000 0 0 1 0 1 1 0 0000 11 = 0x583  // width 32 bits  // 0 wait state  // BTERM enable (burst forever)  // Burst enable  outl(0x00000183,ioptr + DMA0_MODE_REG);  // Program DMA0 descriptor pointer register 90h  // 0000000000000000000000000000 1 0 0 0 = 0x8  // Direction: Local to PCI  outl(0x00000008,ioptr + DMA0_DESC_REG);  // Program DMA LOCAL DMA address  // Top of ADC Buffer  outl(ADC_BUFFER,ioptr + DMA0_LOCAL_START);  // Program DMA Block Size  outl(ADC_LOCAL_SIZE, ioptr + DMA0_BYTE_COUNT);  // Program DMA FIFO Thresholds (to be tuned)  outl(0x00000770, ioptr + DMA_THRESHOLD);  // Program Direct Master Range register  // Needed for write to mailbox  outl(DMA_RANGE, ioptr + DIR_MAST_RANGE);  // Program Local Base Address for Direct Master write  // Needed for write to mailbox  outl(MBOX_LOCAL_MAP, ioptr + DIR_MAST_ADD);  // Program Remap for Direct Master write  // Map 1 Mbyte area on local bus + enable Direct Master Memory Access  outl(((unsigned int) 0x00000001) | (mbox_pci_address & 0xFFF00000),       ioptr + DIR_MAST_REMAP);  // Program DMA1 mode reg 94h  // 0000000000000000000 0 0 0 0 1 1 0 0000 11 = 0x183  // width 32 bits  // 0 wait states  // BTERM enable (burst forever)  // Burst enable  outl(0x00000183,ioptr+DMA1_MODE_REG);  // Program DMA1 descriptor pointer register A4h  // 0000000000000000000000000000 0 0 0 0 = 0x0  // Direction: Local to PCI  outl(0x00000000,ioptr+DMA1_DESC_REG);  // Program DMA LOCAL DMA address  // Top of ADC Buffer  outl(DAC_BUFFER,ioptr + DMA1_LOCAL_START);  // Program DMA Block Size  outl(DAC_LOCAL_SIZE, ioptr + DMA1_BYTE_COUNT);  // Program Direct Master Range register  // Needed for write to mailbox  outl(DMA_RANGE, ioptr + DIR_MAST_RANGE);  // Program Local Base Address for Direct Master write  // Needed for write to mailbox  outl(MBOX_LOCAL_MAP, ioptr + DIR_MAST_ADD);  // Program Remap for Direct Master write  // Map 1 Mbyte area on local bus + enable Direct Master Memory Access  outl(((unsigned int) 0x00000001) | (mbox_pci_address & 0xFFF00000),       ioptr + DIR_MAST_REMAP);  // Write PCI address of top of DMA buffer to FPGA  rf_writel(rx_pci_address, baseptr + PCI_BASE_REG_RD);  // Write PCI address of bottom of DMA buffer  rf_writel(rx_pci_address + dev_rf->blocks_in_frame * DAQ_DMA_BLOCK_SIZE_BYTES,            baseptr + PCI_LIMIT_REG_RD);  // Write Local Bus address of PCI Mailbox  rf_writel(MBOX_LOCAL_MAP | (mbox_pci_address & 0x000FFFFF),            baseptr+PCI_MBOX_REG_RD);  // Write PCI address of top of DMA buffer to FPGA  rf_writel(tx_pci_address , baseptr + PCI_BASE_REG_WR);  //0  // Write PCI address of bottom of DMA buffer  rf_writel(tx_pci_address + dev_rf->blocks_in_frame * DAQ_DMA_BLOCK_SIZE_BYTES,            baseptr + PCI_LIMIT_REG_WR);  // Write Local Bus address of PCI Mailbox  rf_writel(MBOX_LOCAL_MAP | ((mbox_pci_address + 4)& 0x000FFFFF),            baseptr + PCI_MBOX_REG_WR);}/** * @short Sets the gains * * This is a special function that is only available with the rf-antenna. * It should be packed in the general interface, but for the moment (dec02) * no certainity exists on how to set a certain gain in dbm. * * There are four gain-controllers on the RF-board. All four can * be set at the same time through this function. * * @param nbr_daq The index of the DAQ [0..MAX_ANTENNAS - 1] * @param tx_pa The transmission power-amplifier gain * @param tx_med The transmission DAC-gain * @param tx_if The transmission intermediate-frequency gain * @param rx_if The reception intermediate-frequency gain * @return 0 for success or -1 for error */int swr_rf_set_gains( device_t *dev_rf,                      int tx_pa, int tx_med, int tx_if, int rx_if ) {  dev_rf->tx_pa_gain = tx_pa;  dev_rf->tx_med_gain = tx_med;  dev_rf->tx_if_gain = tx_if;  dev_rf->rx_if_gain = rx_if;  writegain( dev_rf, TX_PA_GAIN, dev_rf->tx_pa_gain );  writegain( dev_rf, TX_MED_GAIN, dev_rf->tx_med_gain );  writegain( dev_rf, TX_IF_GAIN, dev_rf->tx_if_gain );  writegain( dev_rf, RX_IF_GAIN, dev_rf->rx_if_gain );  PR_DBG( 3, "Wrote gains... if:%i\n", dev_rf->rx_if_gain );  return 0;}/** * @short Reads the gains * * @return 0 for success or -1 for error */int swr_rf_get_gains( device_t *dev_rf,                      int *tx_pa, int *tx_med, int *tx_if, int *rx_if ) {  *tx_pa = dev_rf->tx_pa_gain;  *tx_med = dev_rf->tx_med_gain;  *tx_if = dev_rf->tx_if_gain;  *rx_if = dev_rf->rx_if_gain;  return 0;}// sets particular qdac channel to some levelvoid writegain ( device_t *dev_rf, int channel, int level ) {  unsigned int baseptr=dev_rf->data_base;  unsigned int  qdacword, intlevel;  const unsigned long  // system control wakeup, offset coding  // Vdd/2 for A, B, C, D :  qdacctrl[5] = {                  0x0060, 0x4010, 0x4410, 0x4810, 0x4C10                },                qdacdata[4] = {0x2000, 0x2400, 0x2800, 0x2C00};  intlevel = min(0x3ff,level);  qdacword = qdacdata[channel-1] | intlevel;  // write the control and data word  rf_writel(qdacctrl[0],            baseptr + ODAC);  rtl_delay(10000);  rf_writel(qdacctrl[channel],            baseptr + ODAC);  rtl_delay(10000);  rf_writel(qdacword,            baseptr + ODAC);  rtl_delay(10000);}#define LDAC (1<<13) // Load DAC A#define PDB (1<<12)  // Power down DAC Bvoid write_sdac( device_t *dev_rf, int level ) {  unsigned int baseptr=dev_rf->data_base;  unsigned int qdacword, intlevel;  intlevel = min(0xff,level);  qdacword =  LDAC | PDB | intlevel;  // write the control and data word  rf_writel(qdacword,            baseptr + SDAC);}void setmode( device_t *dev_rf, unsigned int mode ) {  unsigned int baseptr=dev_rf->data_base;  unsigned int oldval,newval;  PR_DBG( 4, "Setting mode to %d\n",mode);  mode&=0xf;  oldval = rf_readl(baseptr + ODAC) & 0xff;  newval = (mode<<12)|oldval;  rf_writel(newval, baseptr + ODAC);}#define Fosc 16e6                  // Reference frequency#define Xmax 32767#define RF_CP_WORD ((1<<1) | 1)     // Charge Pump = 200 uA, +ve VCO polarity#define V2_EN 0                     // Voltage doubled#define DLL_MODE 1                  // Fast#define RF_CNTL_WORD 1              // Normal Operation, Powered up, 32/33void write_lo( device_t *dev_rf, unsigned int freq ) {  unsigned int baseptr=dev_rf->data_base;  int PBA,F,R,RF_N,RF_R;  DEBDIV( freq, "rf_printf::write_lo div0\n" );  R = (int)(((double)Xmax * Fosc)/ (double)freq);  PBA = (int)(((double)freq * R) / (double)Fosc);  F = ((int)(((((double)freq * R )*16))/Fosc))%16;  RF_R = (R<<2) | 2 | (RF_CP_WORD<<17) | (V2_EN<<22) | (DLL_MODE<<23);  RF_N = (RF_CNTL_WORD << 21) | (PBA<<6) | (F<<2) | 3;  rf_writel((1<<23) | (1<<22),baseptr + FSYN); // OSC = 1, Frac = 16  PR_DBG( 4, "IF_R = %x\n",(1<<23) | (1<<22));  rtl_delay((long)3000);  rf_writel(RF_R,baseptr + FSYN);  PR_DBG( 4, "RF_R = %x\n",RF_R);  rtl_delay((long)3000);  rf_writel(RF_N,baseptr + FSYN);  PR_DBG( 4, "RF_N = %x\n",RF_N);  rtl_delay((long) 3000);}int dump_config( device_t *dev_rf, unsigned char bus, unsigned char func ) {  int res;  int i;  unsigned int mask;  unsigned char  b;  unsigned short w;  unsigned int   dw;  struct pci_dev *pdev;  unsigned int addr[] = {                          PCI_BASE_ADDRESS_0,                          PCI_BASE_ADDRESS_1,                          PCI_BASE_ADDRESS_2,                          PCI_BASE_ADDRESS_3,                          PCI_BASE_ADDRESS_4,                          PCI_BASE_ADDRESS_5                        };  res = pcibios_read_config_word(bus, func, PCI_VENDOR_ID, &w);  PR_DBG( 4, "vendor: 0x%04X\n", (int)w);  res = pcibios_read_config_word(bus, func, PCI_DEVICE_ID, &w);  PR_DBG( 4, "device: 0x%04X\n", (int)w);  res = pcibios_read_config_word(bus, func, PCI_COMMAND, &w);  PR_DBG( 4, "command: 0x%04X\n", (int)w);  res = pcibios_read_config_word(bus, func, PCI_STATUS, &w);  PR_DBG( 4, "status: 0x%04X\n", (int)w);  res = pcibios_read_config_dword(bus, func, PCI_CLASS_REVISION, &dw);  PR_DBG( 4, "Class & revision: 0x%08X\n", (int)dw);  res = pcibios_read_config_byte(bus, func, PCI_REVISION_ID, &b);  PR_DBG( 4, "revision: %d\n", (int)b);  res = pcibios_read_config_byte(bus, func, PCI_CACHE_LINE_SIZE, &b);  PR_DBG( 4, "cache line size: %d\n", (int)b);  res = pcibios_read_config_byte(bus, func, PCI_LATENCY_TIMER, &b);  PR_DBG( 4, "latency timer: %d\n", (int)b);  res = pcibios_read_config_byte(bus, func, PCI_HEADER_TYPE, &b);  PR_DBG( 4, "header type: %d\n", (int)b);  res = pcibios_read_config_byte(bus, func, PCI_BIST, &b);  PR_DBG( 4, "burst ist: %d\n", (int)b);  for(i = 0; i <= 5; ++i) {    res = pcibios_read_config_dword(bus,  func, addr[i], &dw);    res = pcibios_write_config_dword(bus, func, addr[i], ~0);    res = pcibios_read_config_dword(bus,  func, addr[i], &mask);    res = pcibios_write_config_dword(bus, func, addr[i], dw);    if(dw != 0) {      PR_DBG( 4, "----------------\n");      if(dw & PCI_BASE_ADDRESS_SPACE_IO) {        PR_DBG( 4, "I/O\n");        dev_rf->addr[i] = dw & PCI_BASE_ADDRESS_IO_MASK;        dw ^= PCI_BASE_ADDRESS_SPACE_IO; /* Clean the last bit */        mask ^= PCI_BASE_ADDRESS_SPACE_IO; /* Clean the last bit */      } else {        PR_DBG( 4, "memory\n");        dev_rf->addr[i] = dw & PCI_BASE_ADDRESS_MEM_MASK;        switch(dw & PCI_BASE_ADDRESS_MEM_TYPE_MASK) {        case PCI_BASE_ADDRESS_MEM_TYPE_32:          PR_DBG( 4, "32 bits address\n");          break;        case PCI_BASE_ADDRESS_MEM_TYPE_1M:          PR_DBG( 4, "below 1M address\n");          break;        case PCI_BASE_ADDRESS_MEM_TYPE_64:          PR_DBG( 4, "64 bits address\n");          break;        default:          PR_DBG( 4, "ERROR: unkown address type\n");          break;        }        if(dw & PCI_BASE_ADDRESS_MEM_PREFETCH) {          PR_DBG( 4, "prefetchable\n");        } else {          PR_DBG( 4, "not prefetchable\n");        }      }      PR_DBG( 4, "Base address %d: 0x%08x\n", i, dev_rf->addr[i]);      PR_DBG( 4, "size: 0x%08X\n", (unsigned int)~mask + 1);    }  }  PR_DBG( 4, "----------------\n");  pdev = pci_find_slot(bus, func);  dev_rf->irq = pdev->irq;  return 0;}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产久精国产| 处破女av一区二区| 国产精品视频一二三区| 欧美日韩一区久久| 国产69精品久久777的优势| 午夜久久久影院| 国产精品国产三级国产aⅴ入口| 欧美精品vⅰdeose4hd| 9i在线看片成人免费| 精品亚洲免费视频| 亚洲第一搞黄网站| 国产精品国产成人国产三级| 精品国产一二三区| 欧美二区三区91| 一本大道久久a久久精二百| 国产精品99久| 麻豆成人av在线| 亚洲午夜国产一区99re久久| 91精品国产综合久久久久久久久久| 激情国产一区二区| 日日夜夜精品视频天天综合网| 国产精品成人免费精品自在线观看| 欧美一区二区视频在线观看 | 99免费精品在线| 另类人妖一区二区av| 日日夜夜免费精品视频| 亚洲午夜精品在线| 一区二区成人在线观看| 中文字幕中文字幕在线一区 | 欧美亚洲自拍偷拍| 91在线免费看| 国产99久久久久| 国产精品一区专区| 国产精品一区二区久久不卡| 久久不见久久见中文字幕免费| 日韩精品亚洲一区二区三区免费| 亚洲综合一区二区精品导航| 亚洲美女屁股眼交3| 中文字幕一区av| 国产精品美女久久久久aⅴ| 国产欧美va欧美不卡在线| 久久毛片高清国产| 久久久精品天堂| 国产欧美日本一区二区三区| 久久久精品人体av艺术| 国产欧美日韩久久| 亚洲欧洲成人av每日更新| 综合色天天鬼久久鬼色| 亚洲乱码国产乱码精品精小说| 亚洲视频一区二区免费在线观看| 国产精品三级av在线播放| 欧美激情一区二区三区| 中文字幕色av一区二区三区| 亚洲色图欧美在线| 亚洲国产美国国产综合一区二区| 亚洲国产一区二区视频| 性欧美疯狂xxxxbbbb| 日韩电影在线观看电影| 久久66热偷产精品| 成人妖精视频yjsp地址| 色综合久久久久久久久久久| 在线观看欧美日本| 3atv一区二区三区| 久久女同精品一区二区| 国产精品久久久久影视| 一区二区免费看| 秋霞电影一区二区| 国产成人av影院| 色哟哟国产精品| 日韩无一区二区| 国产日韩欧美不卡在线| 玉足女爽爽91| 久久99热这里只有精品| 成人午夜视频网站| 欧美午夜精品免费| 精品区一区二区| 亚洲欧美一区二区三区极速播放| 日韩精品电影在线| 国产精品123区| 在线视频欧美区| 久久中文字幕电影| 亚洲美女免费在线| 国产在线一区二区综合免费视频| 9久草视频在线视频精品| 欧美精品第1页| 国产精品每日更新| 日日噜噜夜夜狠狠视频欧美人| 韩国av一区二区| 欧美性猛片xxxx免费看久爱| 久久久久久久久久久黄色| 亚洲一区二区在线免费观看视频| 六月丁香婷婷色狠狠久久| 91网址在线看| 欧美r级电影在线观看| 亚洲免费资源在线播放| 狠狠网亚洲精品| 欧美影视一区二区三区| 国产欧美精品日韩区二区麻豆天美| 亚洲一区二区精品视频| 成人一级视频在线观看| 日韩欧美国产电影| 亚洲曰韩产成在线| 成人激情综合网站| 精品va天堂亚洲国产| 亚洲五码中文字幕| 成人国产亚洲欧美成人综合网| 56国语精品自产拍在线观看| 综合久久给合久久狠狠狠97色| 精品一区二区三区香蕉蜜桃| 欧美性一区二区| 国产精品国产三级国产专播品爱网 | 国产精品嫩草影院av蜜臀| 免费亚洲电影在线| 欧美男女性生活在线直播观看| 国产精品午夜春色av| 国产一区在线观看视频| 欧美精选在线播放| 一区二区三区在线视频免费观看| 丁香婷婷综合五月| 26uuu精品一区二区三区四区在线| 亚洲一级不卡视频| 91福利在线看| 亚洲欧美日韩中文播放| 成人综合激情网| 国产欧美日韩另类视频免费观看| 极品少妇一区二区三区精品视频| 69成人精品免费视频| 亚洲国产一区二区视频| 在线观看欧美黄色| 亚洲午夜免费电影| 欧美日韩美女一区二区| 亚洲精品欧美专区| 91久久精品日日躁夜夜躁欧美| 国产精品美女久久久久久久久久久| 国产精品综合二区| 久久久国产一区二区三区四区小说| 久久精品99国产国产精| 日韩欧美国产电影| 捆绑紧缚一区二区三区视频| 日韩精品一区二区三区蜜臀| 美女视频第一区二区三区免费观看网站| 欧美日韩一区二区不卡| 亚洲妇熟xx妇色黄| 精品视频1区2区3区| 午夜精品一区二区三区电影天堂 | 日韩在线观看一区二区| 欧美久久久久免费| 热久久国产精品| 日韩网站在线看片你懂的| 激情五月婷婷综合| 国产亚洲欧美在线| 北条麻妃国产九九精品视频| 日韩伦理av电影| 精品国产乱码久久| 精品一区二区在线看| 国产亚洲1区2区3区| eeuss鲁一区二区三区| 亚洲综合色区另类av| 欧美放荡的少妇| 国产一区二区伦理片| 国产精品丝袜黑色高跟| 色综合久久久久| 日韩电影在线看| 国产午夜精品久久| 色香蕉久久蜜桃| 日韩av在线免费观看不卡| 日韩丝袜情趣美女图片| 国产成人av一区二区三区在线 | 麻豆精品在线播放| 国产视频一区二区在线观看| 91看片淫黄大片一级在线观看| 一区二区三区四区精品在线视频| 3d动漫精品啪啪一区二区竹菊| 国产高清精品在线| 亚洲第四色夜色| 久久网站热最新地址| 一本色道久久综合亚洲精品按摩| 日韩成人免费在线| 国产精品人成在线观看免费| 欧美日韩色综合| 国产大陆a不卡| 亚洲一线二线三线久久久| 精品美女一区二区| 91高清视频在线| 国产成人免费视频| 视频在线观看国产精品| 欧美激情艳妇裸体舞| 欧美日韩一二三| 高清成人在线观看| 天堂av在线一区| 1区2区3区国产精品| 日韩欧美一级二级| jvid福利写真一区二区三区| 无码av免费一区二区三区试看| 国产精品乱码一区二区三区软件 | 亚洲在线成人精品| 国产免费观看久久| 日韩一区二区三区精品视频| 99久久er热在这里只有精品15| 另类小说视频一区二区|