www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式軟件

  摘要:本文實現(xiàn)了一種基于 ARM-的 程序加載方法,詳細討論了加載過程中各個階段程序對配置管腳的操作,給出了硬件實現(xiàn),編寫了運行于 ARM處理器的嵌入式 上的驅動程序。

  1、引言

  在系統(tǒng)上電時,需要從外部載入所要運行的程序,此過程被稱為程序加載。多數(shù)情況下,從外部專用的 讀入程序。這種方式速度慢,而且只能加載固定的程序。顯然,當系統(tǒng)需要容量大而且 FPGA要加載的程序可以根據需要有選擇的加載時不能采用這種方法。本文實現(xiàn)了一種基于外部處理器的加載方法,速度快,而且可以根據設置給FPGA加載相應的程序。

  對于 公司的 FPGA芯片,有五種加載方式:JTAG模式,串行從模式,串行主模式,并行從模式和并行主模式。JTAG模式常用于調試時,將主機好的程序加載到FPGA,優(yōu)先級高于幾種模式。加載模式取決于 FPGA上加載模式管腳(M0,M1,M2)的設置。

  用外部處理器給 FPGA加載程序時,可以采用串行從模式、并行從模式,甚至于 JTAG模式。本文選擇并行從模式,原因在于更高的配置速率。

  2、 FPGA程序數(shù)據的產生

  FGPA的程序加載即是要把好的程序文件按一定的時序寫入FPGA。而 的開發(fā)環(huán)境可以根據用戶的選擇產生多種文件格式,以不同的后綴名區(qū)分。不同的文件格式包含了不同的信息,有不同的用途。

  本文選擇了.bin格式的文件。此文件是只包含有程序數(shù)據的二進制文件。產生此文件,要在bitgen 參數(shù)里增加-g :yes 選項。

  此外,需要說明的是,通常的微處理器 D0位是最低有效位,而 的 FPGA在接收程序數(shù)據時,D0位是最高有效位。因此,在按字節(jié)讀取.bin格式的文件之后,需要有一個轉換的過程。如從文件讀到一個字節(jié),0x7D,即二進制的 0111 1101,需轉換為:1011 1110。

  加載過程開始時,就要從.bin文件序按字節(jié)讀出數(shù)據,然后在 CCLK的上升沿寫入 FPGA。在.bin文件中的數(shù)據都被寫入 FPGA后,CCLK需要多出四個時鐘周期,以使得 FPGA完成啟動過程。

  3、硬件設計

  在FPGA上,與配置有關的管腳分為兩類:專用管腳,包括_B,HSWAP_EN,TDI, TMS,,TCK,TDO,CCLK,DONE,和M0-M2。還有一類是可復用管腳,這類管腳在配置階段作為配置管腳,配置結束后可以配置為通用普通的IO管腳,也可以繼續(xù)作為配置管腳。在并行從模式下,涉及到的配置管腳和功能如下:

  CS_B:片選信號,低有效; RDWR_B:寫信號,低有效; BUSY:FPGA忙指示,高有效,一般只有在并行加載時鐘速率大于50M時才有可能用到;D0-D7:數(shù)據線; _B:芯片被復位后,此管腳為輸出信號,輸出低電平指示FPGA正在自行復位內部

  寄存器。復位結束后,此管腳浮空,處于輸入狀態(tài)。因此需要上拉電阻,指示復位結束。內部寄存器復位結束后,此管腳若被拉低,則會推遲FPGA的程序加載過程。在程序加載過程中,此管腳又變回輸入狀態(tài),對外輸出低電平指示加載的程序數(shù)據存在CRC校驗錯誤。

  _B:異步復位信號,下降沿有效,此信號為低電平時復位FPGA,復位后,F(xiàn)PGA芯片處于內部寄存器自行復位過程,_B被FPGA芯片拉低,此過程結束后,F(xiàn)PGA不再驅動_B管腳,INIT_B管腳處于浮空狀態(tài),此時,INIT_B有上拉電阻時,INIT_B呈現(xiàn)高電平,依次可以指示FPGA的內部寄存器自行復位結束。程序加載狀態(tài)。

  DONE:加載成功指示。 CCLK:程序加載時,數(shù)據在此信號的上升沿被寫入FPGA。在本設計中,ARM芯片采用的是 SUMSUN公司的,與 FPGA配置管腳相連的是此芯片的通用 IO管腳 D組。硬件連接如圖[1]所示。在 ARM的程序中,ARM管腳在程序加載的各階段的輸入輸出設置如下:首先,設置 GPD[10](與 FPGA的 INIT_B相連)、GPD[11](與 FPGA的 BUSY相連)為輸入管腳,以監(jiān)視 FPGA內部寄存器自行復位結束和忙閑狀態(tài)。其次,設置GPD[12](與 FPGA的 _B相連)為輸出狀態(tài),并使其輸出低脈沖,使 FPGA復位。然后依次設置 GPD[8](與 FPGA的 CS_B相連)、GPD[9](與 FPGA的 RDWR_B相連)、GPD[14] (與 FPGA的 CCLK相連)為輸出管腳,并使其輸出低電平,使 FPGA處于被選可接受數(shù)據狀態(tài);接著設置D[0..7]為輸出狀態(tài)。

  至此,ARM中的程序開始輪詢GPD[10]的狀態(tài),檢測到此信號為高時,有兩種選擇,其一是因為需要而推遲 FPGA的程序加載,可以通過設置 GPD[10]為輸出,并使其輸出為低電平直至程序加載開始。其二是開始給 FPGA加載程序,F(xiàn)PGA在 CCLK的上升沿接收數(shù)據,在給 FPGA加載程序的過程中,程序需要監(jiān)視GPD[10]管腳的狀態(tài),一旦為低,F(xiàn)PGA指示程序數(shù)據加載 CRC校驗出錯。此時需要復位FPGA,重新加載.

  4、嵌入式 的驅動實現(xiàn)

  本文以模塊形式實現(xiàn)了運行于上的驅動程序,源文件如下(有關寄存器

  的設置參考的數(shù)據手冊,以下源代碼未包含頭文件):

  #define GPIO_va_ 0x0F6000000

  //基于S3C2410 上的Linux內核IO控制寄存器首地址映射后的虛擬地址

  #define ARM_GPDCON PIO_va_+0x30);

  #define ARM_GPDUP PIO_va_+0x38);

  #define ARM__wr(addr,) *(volatile unsigned int*)(addr)=)

  //定義輸出

  #define FPGA_CS 8

  #define FPGA_RW 9

  #define FPGA_PROG 12

  #define FPGA_CCLK 14

  //定義操作

  #define ARM_GPDDAT (*(volatile u32 *)(GPIO_va_base+0x34))

  #define set_register_bit(x) ARM_GPDDAT=(1<<x)|ARM_GPDDAT

  #define _register_bit(x) ARM_GPDDAT=(~(1<<x))&ARM_GPDDAT

  //定義輸入

  #define FPGA_INIT ((ARM_GPDDAT>>10)&1)

  #define FPGA_BUSY ((ARM_GPDDAT>>11)&1)

  #define FPGA_DONE ((ARM_GPDDAT>>13)&1)

  #define FPGA 211

  //定義主設備號,和mknod /dev/ c 211 0匹配

  typedef __t;

  static __t fpga_s[257];

   buf[1000000];

  int fpga_(struct inode *, struct file *);

  ssize_t fpga_write(struct file *, *,size_t ,loff_t *);

  int fpga_(struct inode*, struct file *);

  //初始化ARM的D組通用IO管腳

  void _fpga(void){

  ARM__wr(GPIO_va_base+0x30,0x55555555);

  //FPGA_BUSY FPGA_DONE FPGA_INIT be set input

  ARM__wr(GPIO_va_base+0x34,0xFFFF);

  ARM_port_wr(GPIO_va_base+0x30,0x51055555);

  ARM_port_wr(GPIO_va_base+0x38,0);// put up

  set_register_bit(FPGA_CCLK);//set GCLK

  }

  static struct file_operations fpga_ctl_fops= {

  : fpga_,

  write: fpga_write,

  : fpga_,};

  int _(void) {

  printk(",word,Now preparing FPGA......\n");

  printk("register FPGA......\n");

  register_chrdev(FPGA, "fpga", &fpga_ctl_fops);

  printk("Done!\n");

  printk(",word,success!\n");

   0;

  }

  int fpga_open(struct inode *inode, struct file *filp){

  int minor;

  minor = MINOR(inode->i_rdev);

  _fpga();

  fpga_[minor]++;

  printk("FPGA is ready.\n");

   0;

  }

  ssize_t fpga_write(struct file *, char *buffer,size_t count,loff_t

  *ppos){

  int i;

  if(__(buf,buffer,count)){

  printk("error \n");

   -EFAULT;

  }

  printk("%d s have been received!\n",count);

  printk("The is:%d\n",count);

  for(i=0;i<count;i++){

  ARM_GPDDAT=(ARM_GPDDAT&0x3F00)|buf[i];

  set_register_bit(FPGA_CCLK);

  }

  printk("data write finished\n");

  for(i=0;i<4;i++){

  set_register_bit(FPGA_CCLK);

  _register_bit(FPGA_CCLK);

  }

  return count;

  }

  int fpga_release(struct inode *inode, struct file *filp){

  int minor;

  minor = MINOR(inode->i_rdev);

  if (fpga_[minor])

  fpga_[minor]--;

  printk("Goodbye cruel world\n");

  return 0;

  }

  void cleanup_(void){

  printk("Goodbye cruel world\n");

  }

  5、結束語

  本文的創(chuàng)新點:基于ARM-Linux平臺,實現(xiàn)了一種FPGA的程序加載模式,加載速度快,靈活高效。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉