<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > AD7888與S3C2410的SPI接口及Linux下嵌入式驅動(dòng)的實(shí)現

AD7888與S3C2410的SPI接口及Linux下嵌入式驅動(dòng)的實(shí)現

作者: 時(shí)間:2007-12-06 來(lái)源: 收藏

  串行外圍設備接口(serial peripheral interface)總線(xiàn)技術(shù)是Motorola公司推出的一種同步串行接口,它允許CPU與TTL移位寄存器、A/D或D/A轉換器、實(shí)時(shí)時(shí)鐘(RTO)、存儲器以及LCD和LED顯示驅動(dòng)器等外圍接口器件以串行方式進(jìn)行通訊。

本文引用地址:http://dyxdggzs.com/article/73998.htm

  總線(xiàn)只需3~4根數據線(xiàn)和控制線(xiàn)即可擴展具有接口的各種I/O器件,其硬件功能很強,實(shí)現軟件相當簡(jiǎn)單。串行A/D轉換器具有電路簡(jiǎn)單、工作可靠的特點(diǎn),而ARM芯片被設計用于手持設備以及普通的嵌人式應用的集成系統,將上述兩種實(shí)用的芯片和SPI總線(xiàn)技術(shù)相結合以實(shí)現數據采集十分有效。

 1 的功能與使用

  是美國模擬器件公司推出的一款高速低功耗12位A/D轉換器,采用2.7~5.25 V單電源供電,最大通過(guò)率可達到125 kSPS。的輸入采樣/保持電路在500 ns內獲取一個(gè)信號,采用單端采樣模式,包含8個(gè)單端模擬輸入,模擬輸入電壓從0到VREF。AD7888有2.5 V的片內基準電壓,也可以使用外部基準電壓,范圍從1.2 V到VDD。CMOS制造工藝確保了低功耗,正常工作時(shí)為2 mW,掉電狀態(tài)下為3uW??梢赃x擇多種電源管理模式(包括數據轉換后自動(dòng)處于掉電模式),與多種串行接口兼容(SPI/QSPI/MICOWIRE/DSP)。AD7888可廣泛應用于電池供電系統(個(gè)人數字助理、醫療儀器、移動(dòng)通信)、儀表控制系統和高速調制/解調器等領(lǐng)域。該器件采用16腳SOIC和TSSOP外形封裝,外形及引腳定義見(jiàn)圖1和表1。


外形及引腳定義


  圖1 AD7888的引腳圖


引腳定義


  AD7888的控制寄存器是8位只寫(xiě)寄存器。數據在SCLK的上升沿從DIN引腳載人,同時(shí)獲取外部模擬量轉換的結果。每次數據的傳輸需要準備16個(gè)連續時(shí)鐘信號。只有在片選信號下降之后的前8個(gè)時(shí)鐘脈沖的上升沿提供的信息裝入控制寄存器。


控制器位功能描述
{{分頁(yè)}}


  圖2顯示了詳細的串行接口時(shí)序圖,串行時(shí)鐘提供了轉換時(shí)序,且控制AD7888轉換信息的輸入輸出。CS初始化數據傳送和轉換處理。在其下降沿之后的1.5個(gè)時(shí)鐘周期開(kāi)始采樣輸入信號,這段時(shí)間表示為tACQ(獲取時(shí)間)。整個(gè)轉換過(guò)程還需要14.5個(gè)時(shí)鐘周期來(lái)完成,這段時(shí)間表示為tCONVERT(轉換時(shí)間)。

  從AD7888獲取數據的整個(gè)轉換過(guò)程需要16個(gè)時(shí)鐘周期。CS上升沿之后,總線(xiàn)返回高阻狀態(tài)。如果CS繼續保持低電平,則準備新一輪的轉換。進(jìn)行采樣的輸入通道的選擇是提前寫(xiě)入控制寄存器的,因此在轉換時(shí),用戶(hù)必須提前寫(xiě)入以備通道的轉換。也就是說(shuō),在進(jìn)行當前轉換時(shí),用戶(hù)就必須提前寫(xiě)入通道的地址以備下次轉換使用。


串行接口時(shí)序圖


  圖2串行接口時(shí)序圖

 2 S3C2410的主要功能

  S3C2410是三星公司推出的采用RISC結構的16/32位微處理器。它基于A(yíng)RM920T內核,采用五級流水線(xiàn)和哈佛結構,最高頻率可達203 MHz,是高性能和低功耗的硬宏單元。ARM920T具有增強ARM體系的MMU(支持WinCE,EPOC 32和)、16kB的指令和數據高速緩存以及高速AMBA總線(xiàn)接口。

  S3C2410被設計用于手持設備以及普通的嵌入式應用的集成系統,為了降低整個(gè)系統的成本,S3C2410還包括下面的部分:LCD控制器(STN&TFT)、NAND Flash引導裝入程序、系統管理(片選邏輯和SDRAM控制器)、3通道UART,4通道DMA、4通道PWM時(shí)鐘、I/O口、RTC、8通道10位ADC及觸摸屏接口、IIC總線(xiàn)接口、IIS總線(xiàn)接口、USB主口和USB設備口、SD主口和多媒體卡接口、2通道SPI和2通道PLL。

  S3C2410有2個(gè)SPI口,可以實(shí)現串行數據的傳輸。每個(gè)SPI接口各有2個(gè)移位寄存器分別負責接收和發(fā)送數據。在傳送數據期間,發(fā)送數據和接收數據是同步進(jìn)行的,傳送的頻率可由相應的控制寄存器設定。如果只想發(fā)送數據,則接收數據為啞元;如果只想接收數據。則需發(fā)送啞元“0xff”。SPI接口共有4個(gè)引腳信號:串行時(shí)鐘SCK(SPICLK0,1)、主入從出MISO(SPICLK0,1)和主出從入MOSI(SPIMOSI0,1)數據線(xiàn)、低電平有效引腳/SS(nSSO,1)。

  S3C2410的SPI接口具有如下特點(diǎn)

  (1)兼容SPI協(xié)議(ver.2.11);

  (2)有分別用于發(fā)送和接收的8位移位寄存器;

  (3)有設定傳送頻率的8位寄存器;

  (4)有輪詢(xún)、中斷和DMA三種傳送模式。

  3 接口與驅動(dòng)

  根據S3C2410的SPI特點(diǎn)及AD7888的工作原理確定其接口如圖3所示。


AD7888與S3C2410的連接圖


  圖3 AD7888與S3C2410的連接圖

{{分頁(yè)}}

  為了實(shí)現S3C2410和AD7888在嵌入式下的高速A/D轉換,還編寫(xiě)了兩者接口的驅動(dòng)程序,該驅動(dòng)程序功能的實(shí)現主要由以下幾個(gè)函數完成。

  (1)Init_SPI()完成SPI的初始化

  void Init_SPI(void)

  {

  int i;

  rSPPRE0=0x32;

  rSPCON0=0x1e;

  for(i=0;i<10;i++)

  rSPTDAT0=0xff;

  rGPECON |=0x0a800000;

  rGPECON&=(~0x05400000);

  rGPEUP |=0x3800;

  //GPH5----->CS

  rGPHCON |=0x0400;

  rGPHCON&=(~0x0800);

  rGPHUP&=(~0x20);

  rGPHDAT |=0x20;

  }

  (2)ad_wr()寫(xiě)入要求A/D轉換的通道

  static ssize_t ad_wr(struCt file *file,const char *bur,size_t count,loft_t *offset)

  {

  int ret="0";

  int i="0";

  dbuf="kmalloc"(count *sizeof(unsigned char),GFP_KERNEL);

  copy_from_user(dbuf,bur,count);

  for(i=0;i ADTXdata[i]=dbuf[i];

  kfree(dbuf);

  return ret;

  }

{{分頁(yè)}}

  (3)ad_rd()得到A/D轉換的結果

  statie ssize_t ad_rd(struet file *file,char *bur,size_t count,loft t *offset)

  {

  int ret="0";

  int i="0";

  ad_convert();

  ad_convert();

  dbuf="kmalloc"(count *sizeof(unsigned char),GFP KERNEL);

  for(i=0;i dbuf[i]=ADRXdata[i];

  copy_to_user(bur,dbuf,count);

  kfree(dbuf);

  return ret;

  }

  (4)ad_convert()實(shí)際完成A/D轉換

  void ad_convert(void)

  {

  rGPHDAT&=(~0x20);

  udelay(100000);

  spi_tx_data(ADTXdata[0]);

  ADRXdata[0]=rSPRDATO;

  spi_tx_data(0xff);

  ADRXdata [1 ]=rSPRDATO;

  rGPHDAT |=0x20;

  }

  (5)spi_tx_data()完成發(fā)送數據

  void spi_tx_data(unsigned char data)

  {

  spi_poll_done();

  rSPTDAT0=data;

  spi_poll_done();

  }

  (6)spi_poll_done()輪詢(xún)SPI狀態(tài)

  static void spi_poll_done(void)

  {

  while(!(rSPSTA0&0x01));

  }

{{分頁(yè)}}

  說(shuō)明:1)ADTXdata和ADRXdata是unsigned char的全局數組變量,分別負責存放AD7888的控制寄存器數據和A/D轉換的結果。2)ad_rd()中ad_convert()調用了2次,第1次調用用于通知要采某通道的數據,第2次調用用于得到該通道A/D轉換的結果。這樣雖然犧牲了一些轉換的速度,但可使應用程序編程更加直觀(guān)。

 4 結論

  應用帶SPI接口的串行A/D轉換器占用較少的微處理器I/O資源,硬件聯(lián)接簡(jiǎn)單、軟件易于實(shí)現,程序運行效率高。帶有SPI接口的串行A/D轉換器和ARM微處理器的結合可廣泛應用于實(shí)現數據采集功能的掌上設備及其他嵌入式的系統,如:醫療儀器、通信設備、抄表設備等領(lǐng)域。

linux文章專(zhuān)題:linux詳解(linux不再難懂)






linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>