<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

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

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

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

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

            1 的資源分配

          本文引用地址:http://www.ex-cimer.com/article/86735.htm

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

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

            PIO:并口控制器,PIO控制32根I/O線,多數(shù)為復(fù)用引腳,可通過(guò)編程選擇為通用或?qū)S谩?nbsp;

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

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

            2 存儲(chǔ)器地址重映射后的空間分配

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

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

            3 應(yīng)用接口的存儲(chǔ)器配置

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

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

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

            4 應(yīng)用程序說(shuō)明

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

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

           ?、?串口命令接收中斷服務(wù)程序
            #define USART0_INTERRUPT_LEVEL     6//設(shè)置中斷優(yōu)先級(jí)為6
            #define AT91C_US_USMODE_NORMAL AT91C_US_CHMODE_NORMAL//*設(shè)置通信模式(NORMAL定義為異步模式)*//
            AT91PS_USART COM0=AT91C_BASE_US0;//設(shè)置COM0為收發(fā)口
            char message[4];
            //                 控制端串口中斷通信程序                //
            //*----------------------------------------------------------------------------*//
            void Usart0_c_irq_handler(AT91PS_USART USART_pt)//串口中斷處理函數(shù)
            {   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)//接收通道寄存器判斷是否有數(shù)據(jù)
           {   
                 AT91F_US_DisableIt(USART_pt,AT91C_US_RXRDY);//關(guān)閉接收通道準(zhǔn)備好中斷
               AT91F_US_EnableIt(USART_pt,AT91C_US_ENDRX);//打開(kāi)接收結(jié)束中斷
              AT91F_US_ReceiveFrame(USART_pt,(char*)(message),4);//調(diào)用接收數(shù)據(jù)數(shù)接收數(shù)據(jù)
                }
           if ( status & AT91C_US_ENDRX){
                   AT91F_US_DisableIt(USART_pt,AT91C_US_ENDRX); // 關(guān)閉接收器傳送結(jié)束中斷
                  { 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;}
                 }
                 }

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

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

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


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

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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();