《匠人手记》推荐网上购书渠道:
互动出版网(china-pub)购书入口   >>>
当当网(dangdang)购书入口   >>>
卓越亚马逊网 购书入口   >>>
淘宝网(taobao)购书入口   >>>
更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

 匠人观点: 好记性不如烂笔头  
 黑色幽默:三鹿门——后世畅想

TI C54xx DSP 十天速成讲义 <一>
程序匠人 发表于 2006-3-2 13:14:00  阅读全文 | 回复(0) | 引用通告 | 编辑

TI C54xx DSP 十天速成讲义 <一> 
 
[实验一 新手上路]

初学者编写的第一个程序通常是控制XF引脚的变化,然后用示波器测量XF脚波形或观察与相接的LED。这个程序也常常用来测度一下DSP能否正常工作。

实验1.1 最简单的程序:控制XF引脚周期性变化
实验目的:通过简单的程序了解DSP程序的结构,熟悉CCS开发环境。
*************************************************************
*最简单的程序:TestXF1.asm
*循环对XF位置1和清0,用示波器可以在XF脚检测到电平高低周期性变化
*常用于检测DSP是否工作。
*************************************************************
.mmregs ;预定义的寄存器
.def CodeStart ;定义程序入口标记

.text ;程序区
CodeStart: ;程序入口
SSBX XF ;XF置1
RPT #999 ;重复执行1000次空指令产生延时
NOP
RSBX XF ;XF清0
RPT #999 ;重复执行1000次空指令产生延时
NOP
B CodeStart ;跳转到程序开头循环执行
.end

NOP指令执行时间为一个时钟周期,设DSP工作频率是50MHz,可以估算出XF引脚电平的变化频率约为:50M/2000=25kHz
在没有示波器的情况下,就要将程序1.1稍作改进,增加延时,用一个延时子程序将XF脚电平变化频率降到肉眼可分辨的程度,就可以用LED来显示电平的变化,程序如下:

实验1.2 子程序调用
实验目的:学习子程序的调用
*************************************************************
*TestXF2.asm
*对TestXF1.asm稍作改进,用延时子程序设置较长的延时,
*可以用试验板上的LED看到XF引脚电平的变化
*************************************************************
.mmregs ;预定义的寄存器
.def CodeStart ;定义程序入口标记

.text ;程序区
CodeStart: ;程序入口
SSBX XF ;XF置1
CALL Delay ;调用延时程序
RSBX XF ;XF清0
CALL Delay ;调用延时程序
B CodeStart ;跳转到程序开头循环执行

**************************************************************
*延时子程序:Delay
*用两级减一计数器来延时。调整AR1和AR2的大小LED闪烁的频率不同
**************************************************************
Delay:
STM #999,AR1 ;循环次数1000
LOOP1: STM #4999, AR2 ;循环次数5000
LOOP2: BANZ LOOP2,*AR2- ;如果AR2不等于0,AR2减1,再判断
BANZ LOOP1,*AR1- ;如果AR1不等于0,AR1减1,跳转到LOOP1
RET
.end

**************************************************************
*注意这种延时方法并不精确,需要精确定时必须用定时器。
*按此法延时的近似公式为:4*(AR2+1)*(AR1+1)*时钟周期
*当DSP工作在50MHz(时钟周期20ns),AR1=999, AR2=4999时
*延时约为400ms,则LED闪烁的周期为800ms,频率1.25Hz
**************************************************************

设计指导:
1.源代码书写格式
源代码的书写有一定的格式,初学者往往容易忽视。简单归纳如下:
1.每一行代码分为三个区:标号区、指令区和注释区。标号区必须顶格写,主要是定义变量、常量、程序标签时的名称。指令区位于标号区之后,以空格或TAB格开。如果没有标号,也必须在指令前面加上空格或TAB,不能顶格。注释区在标号区、程序区之后,以分号开始。注释区前面可以没有标号区或程序区。另外还有专门的注释行,以*打头,必须顶格开始。
2.一般区分大小写,除非加编译参数忽略大小写。
3.标点符号有时不注意会打成中文全角字符导致错误。
书写格式的要求在很多DSP书里都没有提,初学者往往只把书上的代码输入进去,编译时得到错误的提示,而不知所措。其中最容易犯的错误指令顶格写,不过一般经提示后不会犯第二次。
有些格式CCS并没有做要求,但注意养成良好的代码书写风格,增加代码的可读性。以上两个例子的书写风格可作参考,但不是硬性规定:
1.标号区占3个TAB的间隔,即12个字符
2.指令中的指令码占两个TAB间隔,然后是操作数。
3.每一行的尾注能对齐的尽量对齐
4.标明一段程序功能的注释以*号打头顶格写,如果功能说明的注释较多,用分格线框起来。
此外其它编程语言的编程风格也可以借用过来,比如标示符命名规则、程序说明的要求等。如果项目组有规定,则按规定执行。
本书的代码尽量保持一定的风格,不过读者可以发现前面的代码注释较多,后面随着学习的深入,一般不会对每一条指令加注释,只注明程序段的功能。另外代码贴到word里后,格式有些错位,无法一一纠正。

2.链接配置文件
一个完整的DSP程序至少包含三个部分:程序代码、中断向量表、链接配置文件(*.cmd)。这里介绍一下链接配置文件文件,对本次试验影响不大的中断向量表将在后文介绍。
连接配置文件的确定了程序链接成最终可执行代码时的选项,其中有很多条目,实现不同方面的选项,其中最常用的也是必须的有两条:1.存贮器的分配
2.标明程序入口。以本次实验为例,下面的简单的链接配置文件就够用了:
/* TestXF.cmd */
-e CodeStart /*程序入口,必须在程序中定义相应的标号*/

MEMORY {
page 0:
PRAM: org=0100h len=0F00h /*定义程序存贮区,起始0100H,长度0F00H*/
}

SECTIONS{
.text:>PRAM page 0 /*将.text段映射到page0的param区*/
}

由于每个程序都需要一个链接配置文件,可以编写一个满足通常需要的链接配置文件。作为本手册通用的链接配置文件如下,可以满足本书大部分程序的需要。在未特别指明的情况下使用这个通用的链接配置文件:

/* 5402.cmd */
-e CodeStart /*程序入口,必须在程序中定义相应的标号*/
-m map.map /*生成存储器映射报告文件 */

MEMORY {
PAGE 0:
VECT: org=0080h len=0080h /*中断向量表*/
PARAM: org=100h len=0F00h /*代码区*/
PAGE 1:
DARAM: org=1000h len=1000h /*数据区*/
}

SECTIONS {
.text :> PARAM PAGE 0 /*代码段*/
.vectors :> VECT PAGE 0 /*中断向量表*/
STACK :> DARAM PAGE 1 /*堆栈*/
.bss :> DARAM PAGE 1 /*未命名段*/
.data :> DARAM PAGE 1 /*数据段*/
}

更多参考:
1.关于代码书写格式:SPRU102: TMS320C54x Assembly Language Tools User's Guide,3.5
Source Statement Format
2.关于链接配置文件:SPRU102: TMS320C54x Assembly Language Tools User's Guide,7.5
Linker Command Files,7.7 The MEMORY Directive,7.8 The SECTIONS Directive

练习:
1、试一下不按规定格式书写代码会产生什么样的编译错误。
2、试一下将链接配置文件中的MEMORY,SECTIONS改成小写会出现什么样的编译错误。
3.修改程序1.2中AR1,AR2的值,观察LED闪烁频率 
 

看《匠人手记》,与匠人同行!北航出版,正在热卖!

回复:TI C54xx DSP 十天速成讲义 
hotpower(游客)发表评论于2006-3-5 2:21:00  个人主页 | 引用 | 返回 | 删除 | 回复

hotpower(游客)我眩晕,怎么老做A人呢...

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    往日酷贴

     
     
     

    大千八卦

    友情连接

    新浪新闻:
    新浪财经:
    AK58新闻:
    新浪股票:
    新浪股票:
    证券之星:

     [更多酷站连接]

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [柔月阁]

    [八楼的呼吸]

    [hotpower 的水潭]

    [xwj的文君阁]

    [所长的BLOG]

    [阿摆手记]

    [电子伙伴]

    [unaided的笔记]

    [小飞的笔记]

    [单片机开发联盟]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [数字电视之家]

    [SMARTCODE电子书斋]

    [软件开发之窗]

    [Armoric]

    [我爱研发网]

    [infernal的笔记]

    [雄鹰的空中加油站]

    [SunK]

    [逍遥电子]

    [ningpanda的博客]

    [C-Design]

    [一网见天下]

    [海边淘沙]

    [嵌入式365]

    [水牛的仓库]

    [股剩是怎样炼成的]

    [PIC论坛]

    [ICC AVR开发网]

    [中国高校自动化网]

     

     

     

    MCU博客-中国电子工程师博客网 

    大学生电子网 

     

     

     

     

     

    !!! 《匠人的百宝箱》 !!!