新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AT91FR40162與cyclone2在工業控制的結合

        AT91FR40162與cyclone2在工業控制的結合

        作者: 時間:2011-08-11 來源:網絡 收藏
        4 應用程序說明
         ① 主程序
          #define AT91C_BASE_EBI ((AT91PS_EBI) 0xFFE00000) //EBI基地址定義
          int main()
          {AT91F_EBI_OpenChipSelect (
        AT91C_BASE_EBI, //地址指針
        0x3, //片NCS3使能
        0x30000000+0x3f39); //片選存儲器初始化
        Usart_init();//初始化串口
            timer_init();//初始化定時器
        while(1){} //循環等待
          }
          ARM處理器在完成各寄存器初始化后進入應用主程序,在主程序中首先調用EBI接口使能函數來設置參數:在程序中設置存儲器基地址值(0xFFE00000),片選設置0x3(NCS3使能),NCS3的存儲器初始化;調用USART控制器函數初始化串口:打開串口,串口收發通道初始化,設定串口通信速率;調用定時中斷函數:打開定時中斷,設置定時中斷時間,設定觸發方式為軟件觸發;最后進入等待循環。
          ② 串口命令接收中斷服務程序
          #define USART0_INTERRUPT_LEVEL 6//設置中斷優先級為6
          #define AT91C_US_USMODE_NORMAL AT91C_US_CHMODE_NORMAL//*設置通信模式(NORMAL定義為異步模式)*//
          AT91PS_USART COM0=AT91C_BASE_US0;//設置COM0為收發口
          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;//給狀態寄存器賦初值
        if ( status AT91C_US_RXRDY)//接收通道寄存器判斷是否有數據
        {
        AT91F_US_DisableIt(USART_pt,AT91C_US_RXRDY);//關閉接收通道準備好中斷
        AT91F_US_EnableIt(USART_pt,AT91C_US_ENDRX);//打開接收結束中斷
        AT91F_US_ReceiveFrame(USART_pt,(char*)(message),4);//調用接收數據數接收數據
        }
        if ( status AT91C_US_ENDRX){
        AT91F_US_DisableIt(USART_pt,AT91C_US_ENDRX); // 關閉接收器傳送結束中斷
        { 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;}
               }
               }
          以上程序為串口中斷服務程序,各函數語句說明參見注釋。中斷級別設置為6(高于定時中斷),這樣使命令發送優先于故障查詢(控制命令隨機出現而故障查詢總是循環進行);接收緩沖區message[4]數組類型必須設為動態分配,靜態數據分配會使處理器開辟數據緩沖區到Flash芯片中,從而引發在一個中斷處理程序中由于存取時間過長而導致串口收發超時的錯誤。因為篇幅有限,其他程序不再一一敘述。
          在ARM應用程序的編寫中,應該盡量少的在主函數內使用循環操作,主函數主要完成各接口控制器應用初始化,因為主函數不間斷循環操作不但會增加功耗,而且長時間頻繁切換于中斷服務和主循環之間會造成程序運行的不穩定,所以能用定時中斷完成的循環操作盡量用中斷完成。
         
          結語

        本文引用地址:http://www.104case.com/article/150362.htm

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


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 合川市| 抚宁县| 福建省| 弥勒县| 平原县| 威宁| 九龙坡区| 合水县| 岳阳市| 华阴市| 青海省| 五家渠市| 额尔古纳市| 剑阁县| 太保市| 财经| 扶风县| 宁南县| 钟祥市| 介休市| 巴青县| 阜宁县| 三都| 广河县| 将乐县| 海晏县| 紫金县| 定襄县| 英德市| 玛多县| 岱山县| 墨玉县| 石狮市| 灵山县| 南华县| 双桥区| 东乡族自治县| 常州市| 阳谷县| 奎屯市| 嘉兴市|