<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • stst158的個人空間 http://www.portaltwn.com/space-uid-5764.html [收藏] [復制] [RSS]

    博客

    李現路:在DSP6000中怎樣編寫您的第一個程序(1)

    已有 2056 次閱讀2009-11-28 10:35 |個人分類:DSP編程|

    李現路:在DSP6000中怎樣編寫您的第一個程序(一)   Post By:2009-11-23 23:44:02
     
    李現路:在DSP6000中怎樣編寫您的第一個程序(1)
     
    一、C語言編寫詳解
    1.工程目錄最好放在:
    CCStudio_v3.3\MyProjects路徑下
    2.CSS下和DSP6000編程緊密相關的目錄結構:
      a.CCStudio_v3.3\C6000\csl\include ---DSP6000常用頭文件
      b.CCStudio_v3.3\C6000\csl\lib ---DSP6000常用庫文件
      c.CCStudio_v3.3\C6000\cgtools\bin --各種編譯工具
    3.我們要編寫的程序結構:
      a.含有main()函數的.c的源文件,而且這個文件的名字最好以main結尾
      b.添加.cmd文件:內存的分配
      c.添加.asm文件:中斷向量表的文件
      d.常用頭文件:
      e.常用庫文件:
    4. 含有main()函數的.C的主文件的書寫規范:

    .c的源文件完整內容如下:

     
    #include <stdio.h>
    //#include <string.h>
    #include <stdlib.h> //stdlib 頭文件里包含了C語言的一些函數,該文件包含了的C語言標準庫函數的定義

     
    #include <csl.h>  //調用CSL庫函數頭文件,CSL作用是用于配置、控制和管理DSP片上外設,C6000 DSP設計了自己的CSL庫
    #include <std.h> //包含了C語言的一些符號常量
    #include <csl_irq.h> //CSL中配置中斷請求的頭文件
    #include <csl_chip.h> //CSL庫函數中芯片配置頭文件

     
    #include "dm642.h"  //dm642常用配置
    #include "rtciic.h" //晶振總線配置,rtc即晶振,IIC即總線,
    #include "eeprom.h" //EEPROM的配置,EEPROM (Electrically Erasable Programmable Read-Only Memory),電可擦可編程只讀存儲器--一種掉電后數據不丟失的存儲芯片。
    #include "io&led.h" //輸入輸出及led配置
    #include "dm642_ide.h" //IDE接口配置,IDE(Integrated Drive Electronics),即電子集成驅動器,
    #include "dm642_flash.h" //flash存儲器配置
    #include "dm642_uart.h" //通用異步收發傳輸器的配置,UART通常用在與其他通訊協定(如RS-232)的連結上
    extern far void vectors();  //調用中斷向量表
    static GPIO_Handle hGpio;  //GPIO句柄
     

     
    void main()
    {

     
    /*-------------------------------------------------------*/
    /* perform all initializations,開始初始化                           */
    /*-------------------------------------------------------*/
             DM642_init();
    /*----------------------------------------------------------*/
             /*中斷向量表的初始化*/
             IRQ_globalDisable();
             //Point to the IRQ vector table,指向中斷向量表
        IRQ_setVecs(vectors); 
    /*----------------------------------------------------------*/
             hGpio = GPIO_open(GPIO_DEV0,GPIO_OPEN_RESET);
            
             GPIO_reset(hGpio);////GPIO復位
            
             //GPIO_config(hGpio,&MyGPIOCfg),GPIO的配置;

     
            
       
     
     
             GPIO_pinEnable(hGpio,GPIO_PIN15); //GPIO_PIN15管腳使能
             GPIO_pinEnable(hGpio,GPIO_PIN4);
             GPIO_pinEnable(hGpio,GPIO_PIN5);
             GPIO_pinEnable(hGpio,GPIO_PIN6);
             GPIO_pinEnable(hGpio,GPIO_PIN7);
             GPIO_pinDirection(hGpio,GPIO_PIN15,GPIO_OUTPUT);//GPIO_PIN15管腳輸出信號
        GPIO_pinDirection(hGpio,GPIO_PIN4,GPIO_OUTPUT);
             GPIO_pinDirection(hGpio,GPIO_PIN5,GPIO_OUTPUT);
             GPIO_pinDirection(hGpio,GPIO_PIN6,GPIO_OUTPUT);
             GPIO_pinDirection(hGpio,GPIO_PIN7,GPIO_OUTPUT);
             while(1)
             {
                       GPIO_pinWrite(hGpio,GPIO_PIN15,0); //輸出0低電平,燈亮
                       DM642_waitusec(0x10000); //等待10000微妙,1秒=1000000微秒
                       GPIO_pinWrite(hGpio,GPIO_PIN15,1); //輸出1高電平,燈滅
                       DM642_waitusec(0x10000);
     
     
                       GPIO_pinWrite(hGpio,GPIO_PIN4,0);
                       DM642_waitusec(0x10000);
                       GPIO_pinWrite(hGpio,GPIO_PIN4,1);
                       DM642_waitusec(0x10000);

     
                       GPIO_pinWrite(hGpio,GPIO_PIN5,0);
                       DM642_waitusec(0x10000);
                       GPIO_pinWrite(hGpio,GPIO_PIN5,1);
                       DM642_waitusec(0x10000);

     
                       GPIO_pinWrite(hGpio,GPIO_PIN6,0);
                       DM642_waitusec(0x10000);
                       GPIO_pinWrite(hGpio,GPIO_PIN6,1);
                       DM642_waitusec(0x10000);

     
                       GPIO_pinWrite(hGpio,GPIO_PIN7,0);
                       DM642_waitusec(0x10000);
                       GPIO_pinWrite(hGpio,GPIO_PIN7,1);
                       DM642_waitusec(0x10000);                  //這個程序是控制了GPIO15,GPIO4-7的高低電平
             }
    }
     
     
    .c的源文件編寫規范如下:

     
      a.首先引用頭文件:頭文件含有初始化設備的必要的接口函數,宏定義等
      b.調用中斷向量表:
      c.static:不被編譯器優化,常用于句柄的修飾
      d.自定義的函數可放在main()的前面或后面。
        外部函數:自己定義的函數,引用外部的文件定義的函數
        內部函數:DSP6000內部定義了的函數就是內部函數
      e.DSP6000中的數據格式一般為十六進制。
      f.主要while循環---while(1),while(0)的區別

     
    二、.cmd文件要點講解:
     
    內存分配文件的源代碼如下:
    MEMORY
    {
      boot: o = 00000000h l = 000400h /* all SRAM,在片內SRAM中保留一塊Boot空間*/
      L2 :  o = 00000400h l = 0003fb00h /* all SRAM ,L2,為DSP片內存儲器,是第2級存儲器[第一級存儲器包括獨立的程序Cach(L1P)和數據Cach(L1D) ],它是一個統一的空間,部分程序和數據,統稱為L2,可以作為普通的SRAM映射到存儲空間              */
      CE01: o = 80000000h l = 00100000h /* external memory   */
      CE02: o = 80100000h l = 00f000000h /* external memory   */
    }

     
    SECTIONS
    {
        .boot_load  >       boot   /*引導程序入口映射到該boot空間*/
        .vecs       >       L2 /*映射ves_dm642.asp中定義的.vecs到L2空間*/
        .cinit      >       L2 /*初始化變量和常數表*/
        .text       >       L2 /*可執行代碼段的映射*/
        .stack      >       L2 /*為系統堆棧分配存儲器。該段用于將變量傳遞至函數或者用來分配局部變量。*/
        .bss        >       L2 /*保留全局和靜態變量空間。在啟動和導入的時候,C/C++編譯器會啟動程序將.cint段中的數據復制出來,以初始化.bss段中的變量。*/
        .const      >       L2  /*包含由C/C++限定詞const定義的字符串常量和數據*/
        .data       >       L2 /* 初始化數據段*/
        .far        >       L2 /*供外部文件調用的變量*/
        .switch     >       L2 /*控制語句段映射*/
        .sysmem     >       L2 /*初始化系統空間*/
        .tables     >       L2 /*初始化數據表*/
        .cio        >       L2  /*io口*/
        .external   >      CE02 /*外部變量的初始化*/
    }                          
     

     
      1、 cmd文件要點
    a.boot:仿真的時候boot可以不配置,在把程序燒寫到flash中時要配置,他的作用是
             放bootload引導程序
      b.怎樣劃分空間:o-origin 起始地址;l-length;區塊的標記可以任意改,長度不可以
        超越最終的空間地址
      c.劃分內存,不一定全部劃分

     
    2、.cmd文件之Section分析
    C/C++的編譯環境包含以下段
    已初始化段:
      (1).cinit段:包含初始化變量和常量表
      (2).const段:const定義的字符串常量和數據(他們不能同時被volatile定義)
            volatile--不能被編譯器優化

     
      (3).switch段:包含跳轉表和大的switch聲明

     
      (4).text段:可執行代碼段
     
     
     
      未初始化段:
       (1).bss段:保留全局和靜態變量空間
       (2).far段:保留遠程的全局和靜態變量空間
       (3).stack段:為系統堆棧分配存儲器。用于將變量傳遞至函數或用來分配
                      局部變量
       (4).system段:為動態存儲器函數malloc,calloc,realloc分分配存儲器空間。
                       如果程序沒有用到上面的函數,就不會創建.system段
       所有我們的內存分配,應該盡量包含上面的初始化段和未初始化段中所定義的段。


     
                                                            曙海教育
                                                    曙海嵌入式學院3G通信培訓中心
                                                (MTK培訓,Android培訓,iPhone培訓)
                                                    電話:021-51875830
                                                    網址:http://www.51qianru.cn
                                                        講師:李現路
                                             版權所有-曙海教育 轉摘請注明作者和出處 課程有:

     

    路過

    雞蛋

    鮮花

    握手

    雷人

    評論 (0 個評論)

    facelist

    您需要登錄后才可以評論 登錄 | 立即注冊

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    返回頂部
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷