<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>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > ARM7與FPGA在工業(yè)控制的結合

ARM7與FPGA在工業(yè)控制的結合

作者: 時(shí)間:2008-08-07 來(lái)源:嵌入式技術(shù)網(wǎng)應用論文 收藏

  配置及應用程序說(shuō)明

  1 的資源分配

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

  ● 存儲器
  AT91FR40162內嵌一個(gè)256KB的SRAM,1024K個(gè)16位字組成的Flash存儲器。SRAM通過(guò)內部32位數據總線(xiàn)與核相連,單周期訪(fǎng)問(wèn),Flash存儲器則通過(guò)外部總線(xiàn)訪(fǎng)問(wèn)。

  ● 系統外圍
  EBI:外部總線(xiàn)控制接口,EBI可尋址64MB的空間,通過(guò)8個(gè)片選線(xiàn)(NCS0~NCS3獨立)和24位地址線(xiàn)訪(fǎng)問(wèn)外設,地址線(xiàn)高4位與片選線(xiàn)(NCS4~7)復用,數據總線(xiàn)可配置成8/16位兩種模式與外設接口。

  PIO:并口控制器,PIO控制32根I/O線(xiàn),多數為復用引腳,可通過(guò)編程選擇為通用或專(zhuān)用。 

  AIC:先進(jìn)中斷控制器,實(shí)現片內外圍中斷及4個(gè)外部中斷源中斷的管理,其外部中斷引腳與通用I/O復用。

  ● 用戶(hù)外圍
  USART0~1:串口收發(fā)控制器,支持8個(gè)數據位的發(fā)送,可以進(jìn)行異步/同步傳輸選擇,其片外引腳與通用I/O復用。
  TC:定時(shí)/計數器,可以產(chǎn)生定時(shí)中斷和計數功能,其片外引腳與通用I/O復用。

  2 存儲器地址重映射后的空間分配

  在CPU上電后,都會(huì )從地址0開(kāi)始第一條指令代碼的執行,而上電復位后0地址必須映射到NCS0片選所接的器件上,這里必須將NCS0連接到片內Flash上以加載初始化程序和應用程序。由于中斷和異常的入口地址是0~20H固定不變,它們的產(chǎn)生都是跳轉到0~20H之間相應的地址取程序執行,為了加快中斷響應,必須將0~20H地址映射到片內RAM區,所以在初始化的重映射命令執行(EB1_RCR的RCB位置1)后,內部RAM就映射到地址0,所有的中斷入口響應和堆棧操作都被映射到在RAM區進(jìn)行。

  由于重映射主要是用于Flash和片內RAM的地址空間交換,所以片內外圍接口(EBI、USART、TC)對應的存儲器編程地址范圍在映射前后不發(fā)生改變,而訪(fǎng)問(wèn)外設地址為重映射后所分配。重映射后地址分配如表1所示。

  3 應用接口的存儲器配置

  EBI存儲器:在8個(gè)EBI片選存儲器(EBI_CSR0~EBI_CSR7)中設置外設訪(fǎng)問(wèn)參數。其中,32位存儲器中包括數據總線(xiàn)寬度8(16)設置,等待狀態(tài)數目1~7個(gè)周期設置,等待使能(不是使能)設置,片選使能(不使能)設置。這里將作為外設,使能NCS3(也可根據實(shí)際選擇其他空閑片選線(xiàn)),選擇總線(xiàn)寬度16,使能等待周期并設周期為5(根據調試選擇)。因默認NCS0為加載Flash片選線(xiàn),而Flash為16位信號、7個(gè)等待周期,故需在EBI_CSR0中選擇16位總線(xiàn)寬度、7個(gè)等待周期并使能NCS0。

  AIC存儲器:AIC存儲器管理所有內外部中斷,對此存儲器的正確初始化賦值才會(huì )打開(kāi)相應中斷。設定AIC工作參數:應用串口通信模式為異步模式,串口發(fā)送的數據位字符長(cháng)度為8位,通信的波特率9600B/s,串口中斷優(yōu)先級為6(中斷優(yōu)先級由低到高0~7),接收發(fā)送通道使能。

  TC存儲器:定時(shí)中斷存儲器需要設定定時(shí)長(cháng)度為1s(每1s產(chǎn)生中斷進(jìn)行故障查詢(xún)),定時(shí)通道使能及軟件觸發(fā)模式,定時(shí)中斷優(yōu)先級設為1。

  4 應用程序說(shuō)明

?、?主程序
  #define AT91C_BASE_EBI       ((AT91PS_EBI)   0xFFE00000) //EBI基地址定義
  int main()
  {AT91F_EBI_OpenChipSelect (
        AT91C_BASE_EBI,  //地址指針                    
        0x3,            //片NCS3使能
        0x30000000+0x3f39); //片選存儲器初始化
         Usart_init();//初始化串口
      timer_init();//初始化定時(shí)器
         while(1){} //循環(huán)等待
  }

  在完成各寄存器初始化后進(jìn)入應用主程序,在主程序中首先調用EBI接口使能函數來(lái)設置參數:在程序中設置存儲器基地址值(0xFFE00000),片選設置0x3(NCS3使能),NCS3的存儲器初始化;調用USART控制器函數初始化串口:打開(kāi)串口,串口收發(fā)通道初始化,設定串口通信速率;調用定時(shí)中斷函數:打開(kāi)定時(shí)中斷,設置定時(shí)中斷時(shí)間,設定觸發(fā)方式為軟件觸發(fā);最后進(jìn)入等待循環(huán)。

 ?、?串口命令接收中斷服務(wù)程序
  #define USART0_INTERRUPT_LEVEL     6//設置中斷優(yōu)先級為6
  #define AT91C_US_USMODE_NORMAL AT91C_US_CHMODE_NORMAL//*設置通信模式(NORMAL定義為異步模式)*//
  AT91PS_USART COM0=AT91C_BASE_US0;//設置COM0為收發(fā)口
  char message[4];
  //                 控制端串口中斷通信程序                //
  //*----------------------------------------------------------------------------*//
  void Usart0_c_irq_handler(AT91PS_USART USART_pt)//串口中斷處理函數
  {   volatile unsigned int *conp;unsigned int status;
 int time;
 volatile unsigned int i;
 status = USART_pt->US_CSR & USART_pt->US_IMR;//給狀態(tài)寄存器賦初值
 if ( status & AT91C_US_RXRDY)//接收通道寄存器判斷是否有數據
 {   
       AT91F_US_DisableIt(USART_pt,AT91C_US_RXRDY);//關(guān)閉接收通道準備好中斷
     AT91F_US_EnableIt(USART_pt,AT91C_US_ENDRX);//打開(kāi)接收結束中斷
    AT91F_US_ReceiveFrame(USART_pt,(char*)(message),4);//調用接收數據數接收數據
      }
 if ( status & AT91C_US_ENDRX){
         AT91F_US_DisableIt(USART_pt,AT91C_US_ENDRX); // 關(guān)閉接收器傳送結束中斷
        { if((message[0]^0xff)==message[1])//判斷接收代碼
          {switch (message[0])
         {case  0x31 : {conp=(volatile unsigned int*)(0x1+0x30000000);//OPE1使能
         *conp=0x2;}; break;//0x31代碼送往OPE1端口
             case  0x30 : {conp=(volatile unsigned int*)(0x2+0x30000000);//OPE2使能
             *conp=0x1;}; break; // 0x30代碼送往OPE2端口
          case  0x11 : {conp=(volatile unsigned int*)(0x3+0x30000000);//OPE3使能
              *conp=0x2;};break;// 0x11代碼則往OPE3端口
             case  0x10 : {conp=(volatile unsigned int*)(0x4+0x30000000);//OPE4使能
             *conp=0x1;};break;  //0x10代碼送往OPE4端口          
        default:break;}
       }
       }

  以上程序為串口中斷服務(wù)程序,各函數語(yǔ)句說(shuō)明參見(jiàn)注釋。中斷級別設置為6(高于定時(shí)中斷),這樣使命令發(fā)送優(yōu)先于故障查詢(xún)(控制命令隨機出現而故障查詢(xún)總是循環(huán)進(jìn)行);接收緩沖區message[4]數組類(lèi)型必須設為動(dòng)態(tài)分配,靜態(tài)數據分配會(huì )使開(kāi)辟數據緩沖區到Flash芯片中,從而引發(fā)在一個(gè)中斷處理程序中由于存取時(shí)間過(guò)長(cháng)而導致串口收發(fā)超時(shí)的錯誤。因為篇幅有限,其他程序不再一一敘述。

  在A(yíng)RM應用程序的編寫(xiě)中,應該盡量少的在主函數內使用循環(huán)操作,主函數主要完成各接口控制器應用初始化,因為主函數不間斷循環(huán)操作不但會(huì )增加功耗,而且長(cháng)時(shí)間頻繁切換于中斷服務(wù)和主循環(huán)之間會(huì )造成程序運行的不穩定,所以能用定時(shí)中斷完成的循環(huán)操作盡量用中斷完成。
 
  結語(yǔ)

  ARM芯片控制功能結合靈活的多硬件接口模擬特性在工程上體現出的其獨特的優(yōu)勢,已發(fā)展為一種流行的硬件架構模式,隨著(zhù)芯片功能的不斷強大,這種優(yōu)勢將使其用途更廣,對任務(wù)處理變得更加靈活高效。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 工業(yè)控制 ARM FPGA 處理器

評論


相關(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>