搜索: 高级
  注册会员 找回密码
设为首页
收藏本站
广告合作
加盟合作
联系我们
电源技术网
首  页 资 讯 供 应 求  购 展会信息 招 聘 求 职 资料共享 器件手册 技术文章 会员中心 电源沙龙
  当前位置:首页>资讯>技术文章>文章内容

TMS320F240学习及ucOSII移植心得(转贴)

作者:power   来源:网络   点击:    日期:2007-09-04    
虽然240芯片有些老了,但作者写的这篇文章的价值还是很大的,在此对作者表示感谢,如果有机会结交的话更好了.以下仅是原文的一部分:
该芯片汇编的细节应用,
1.对形如:y=a1*x1+a2*x2+a3*x3的多项式编程,240指令的装载临时寄存器的指令有LT、LTD、LTP、LTA、LTS,乘法指令有MPY、MPYS、MPYA、MPYU,这些指令中有很多可以同时执行几步,如果能巧妙的结合利用,程序很简洁、效率很高.还有块移动指令,它们和流水线有关,所以效率很高.
2.程序中有这么两句:
MPY  #7FFBH
MPYA  #0H
我看不出有问题,而且和书上是一模一样的呀.我就查软件中的帮助,发现原来书上用错了!那个错误实在是非常容易犯的!对MPY #k指令,*作数为立即数时为只能是 “13-bit short immediate value”.对MPYA指令根本就没有立即数寻址方式,只有直接或间接寻址方式.
3、寄存器问题.如等待状态发生寄存器WSGR在IO空间中,对它赋值就要用out指令而不是常用的splk.还有如COMCON,要配置为PWM模式,为保证全比较单元的正确操作,需要对它连续两次写操作.还有时钟控制寄存器CKCR0、CKCR1,编程时,必须先使CKCR0的CLKMD1=0,禁止PLL,然后根据要求设置CKCR1设置其他位,最后使CLKMD1=1,允许PLL工作(如果使用PLL的话).还有定时器的控制寄存器TxCON有时也需要写两次,第一次配置,第二次启动.总之,对一些需要比较“特殊”的做法,如果注意总结会对整体有个清晰的把握.
硬件中断、软件中断两种中断只是汇编中普通的中断,现在知道了可以用任何一个软中断的.
4、c编程问题:
   1.cmd文件写法可以参照CC‘C2000帮助文件中的例子,还可以查阅TI文档spru024D的2.8.3.
   2.寄存器映射地址头文件,和汇编中的不同,要重新定义,定义方法如下:
   #define    CKCR0   (volatile unsigned int   *) 0x702B
   使用方法: *CKCR0=0x0041;
5、中断向量表的第一条语句应该跳转到_c_int0对于这点我最初不是很明白,因为我看到的程序都是以main开始的.后来逐渐明白了,_c_int0是程序真正开始的地方,只是这个开始不是开发者写出来的,而是编译器自动为我们做好的,你要配合它做的是就是在Build Option中对linker的C Initialization的选项选择ROM Autoinitialization Model或RAM Autoinitialization Model,而不是汇编中的No Autoinitialization,开发者的程序要以main函数开始,初始化结束后会跳转到main函数.在反汇编代码中可以看到这些过程.两种初始化的方式详见上面文档的同一节.
6、比较难的是C调用汇编函数,汇编函数的写法.这时要在汇编函数的开始和结束加入一些语句.C中用三个寄存器管理堆栈和局部帧:AR1作为堆栈指针SP,AR0作为帧指针FP,AR2最为局部变量指针LVP.调用函数时当前指针必须为AR1,首先要在软件堆栈中保存函数返回地址、FP,分配局部帧空间,空间的大小是局部变量的个数加1,如果被调函数中可能修改寄存AR6、AR7,也要保存(当编译器优化时它们被用作保存寄存器变量).函数实现过程中注意调用它的函数传递的参数的存放次序:从右到左按照堆栈增长的方向放置.函数退出时和进入函数时的操作相反.这个规则的原因也可以从生成的交叉列表中找到答案,和上面的原因大同小异,C语句编译后的汇编代码可以看出在任何一个函数调用前都会有这样的“保存”工作,结束时做相应的恢复.详见spru024D的4.2.2,4.2.4和4.3节.
7、在UCOS中的中断编程和一般的中断编程稍有不同.共同的是:
   1.中断矢量表.中断矢量表一定要定位在程序空间的地址0开始的地方,0000h~003Fh为中断矢量.第0 行跳转到代码开始的地方、第1到第6行是硬件中断跳转指令,除NMI中断其他是软件中断指令(INTk最大为INT31).发生硬件中断后,处理器自动到前面查表跳转到相应位置.软件中断是在程序中执行了INTk指令才会发生,然后根据x查中断矢量表跳转到相应的ISR(移植系统时用到了软件中断指令,即任务切换函数).
8.volatile类型限定符.用它修饰的对象叫易变对象,用于告诉编译程序它所修饰的对象(可以是变量或常量)的值可能会以程序中未显式指定的方式发生变化,即不是由程序中的赋值、初始化等显式指定的方式发生变化.如,其变化可能式由中断程序或IO端口所施加的.再如,在程序中可能会把某个全局变量的地址传送给*作系统的时钟并用于存放系统的实际时间,尽管程序中没有对这个变量使用赋值语句赋值,但它的内容还是变了.举个例子:
volatile  int  ticks;
interrupt  timer( )
{  
   ticks++;
}
wait (int  time)
{
    ticks = 0;
    while (ticks < time ) ;
}
如果ticks没有声明为易失变量,编译程序可能会把它当作寄存器变量分配,从而wait函数执行永远不会中止.
上例中的interrupt 关键字是修饰中断函数的,表示改函数与中断相联系. 
上一篇:浅谈 extern "C"   下一篇:机房防雷方案|计算机网络机房防雷方案|郑州机房防雷方案
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·电子元件基础教程(pdf电子书)
·一款简单的手机充电器电路图
·几种MOSFET驱动电路的研究
·protel元件封装库
·晶体管资料大全
·常用电子元器件的教程
·三极管大全
·L E D 培 训 手 册
·TL494芯片资料和制控制电路
·最完整的变压器设计资料
·高频变压器计算公式
·MOSFET驱动电路的选择
·开关电源的可靠性热设计
·开关电源设计中主要参数解释及计
·蓄电池修复仪的电路图
·电磁兼容EMC中的屏蔽技术分析
·节能灯生产管理流程图,供参考。
·EMI / EMC设计秘籍
  相关文章
·浅谈 extern "C"
·机房防雷方案|计算机网络机房防
·探索C++的秘密之详解extern "C"
·监控机房防雷|郑州监控机房防雷|
·电源使用维护及其故障表现
·学校监控方案|郑州学校监控|大学
·IE專業詞匯
·PCB技巧资料
·EMI/EMC设计秘籍
·华为硬件资料
·开关电源EMI设计小结
·高速PCB设计
·小作坊如何成长为世界十强
·美国PSC直流24V风扇
·04监控专业单片机实验内容和要求
·FLJ型小型工频离心风机
·软开关最新技术剖析
·三洋17251直流24V轴流风机

设为首页 | 加入收藏 | 广告合作 | 关于我们 | 联系我们 | 网站地图 | 友情链接 | 意见投诉 | 使用帮助
本站部分信息由企业自行提供,对于该信息内容的真实准确合法性,电源技术网对此不承担任何保证责任。
所有资料来自于网络,版权归作者所有,本站不保证正确性和完整性,只提供参考学习交流之用。
总机:0755-21330265 传真:0755-83718018 E-mail:
工作时间:周一至周五 8:00-18:00 在线服务QQ:372470395 437743603 184979008
Copyright @ 2003-2008 电源技术网 Inc All Rights Reserved.Powered By power-bbs.com
网络实名/通用网址/Google实名通:电源技术网 粤ICP备06099648号