我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 592|回复: 0

李现路:在DSP6000中怎样编写您的第一个程序(1) - 通信/网络

[复制链接]

该用户从未签到

1万

主题

1292

回帖

2万

积分

管理员

积分
29577

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-3-29 10:59:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
李现路:在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的主文件的书写规范: 完整版本请见http://www.51qianru.cn/bbs/
.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 = 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段
所有我们的内存分配,应该尽量包含上面的初始化段和未初始化段中所定义的段。

完整版本请见http://www.51qianru.cn/bbs/

                  曙海教育
                曙海嵌入式学院3G通信培训中心
              (MTK培训,Android培训,iPhone培训)
                电话:021-51875830
                网址:http://www.51qianru.cn
                  讲师:李现路
             版权所有-曙海教育 转摘请注明作者和出处 课程有:

symbian培训班
dsp6000培训班
cadence pcb培训班
单片机培训班
android培训班
brew手机培训
嵌入式培训
dsp培训
嵌入式培训
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

公告:服务器刚移机,
大家请不要下载东西。
会下载失败


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表