色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AT91FR40162與cyclone2在工業(yè)控制的結(jié)合

          AT91FR40162與cyclone2在工業(yè)控制的結(jié)合

          作者: 時(shí)間:2011-08-11 來源:網(wǎng)絡(luò) 收藏
          4 應(yīng)用程序說明
           ① 主程序
            #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)等待
            }
            ARM處理器在完成各寄存器初始化后進(jìn)入應(yīng)用主程序,在主程序中首先調(diào)用EBI接口使能函數(shù)來設(shè)置參數(shù):在程序中設(shè)置存儲器基地址值(0xFFE00000),片選設(shè)置0x3(NCS3使能),NCS3的存儲器初始化;調(diào)用USART控制器函數(shù)初始化串口:打開串口,串口收發(fā)通道初始化,設(shè)定串口通信速率;調(diào)用定時(shí)中斷函數(shù):打開定時(shí)中斷,設(shè)置定時(shí)中斷時(shí)間,設(shè)定觸發(fā)方式為軟件觸發(fā);最后進(jìn)入等待循環(huán)。
            ② 串口命令接收中斷服務(wù)程序
            #define USART0_INTERRUPT_LEVEL 6//設(shè)置中斷優(yōu)先級為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);//打開接收結(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ù)語句說明參見注釋。中斷級別設(shè)置為6(高于定時(shí)中斷),這樣使命令發(fā)送優(yōu)先于故障查詢(控制命令隨機(jī)出現(xiàn)而故障查詢總是循環(huán)進(jìn)行);接收緩沖區(qū)message[4]數(shù)組類型必須設(shè)為動態(tài)分配,靜態(tài)數(shù)據(jù)分配會使處理器開辟數(shù)據(jù)緩沖區(qū)到Flash芯片中,從而引發(fā)在一個中斷處理程序中由于存取時(shí)間過長而導(dǎo)致串口收發(fā)超時(shí)的錯誤。因?yàn)槠邢?,其他程序不再一一敘述?br />  在ARM應(yīng)用程序的編寫中,應(yīng)該盡量少的在主函數(shù)內(nèi)使用循環(huán)操作,主函數(shù)主要完成各接口控制器應(yīng)用初始化,因?yàn)橹骱瘮?shù)不間斷循環(huán)操作不但會增加功耗,而且長時(shí)間頻繁切換于中斷服務(wù)和主循環(huán)之間會造成程序運(yùn)行的不穩(wěn)定,所以能用定時(shí)中斷完成的循環(huán)操作盡量用中斷完成。
           
            結(jié)語

          本文引用地址:http://cafeforensic.com/article/150362.htm

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


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

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

          關(guān)閉