2014/3/19
札记1:WSGR(摘录)
为实现TMS320F206与慢速外部逻辑和存储器的接口,等待状态是十分必要的。当CPU对慢速存储器或端口进行读写时,通过增加等待状态,可延长CPU等待外部存储器或外部I/O端口的时间以便更好地响应。为此,CPU为每个待状态提供了1个额外的周期。为避免总线冲突,所有向外部地址的写操作均需要至少2个周期。
在程序的调试过程中,我们常用设置断点的方法判断局部功能模块能否实现。若发现程序在尚未到达断点时就随机地停止运行,或仿真窗口出现“Time out waiting for device”红色告警字样的,可优先考虑调整待状态发生器控制寄存器(WSGR)的设置。
许多初学者在学习例程时发现其中的WSGR值均设为0000h(零等待状态),就误以为在任何情况下都可行,这是很不可取的。笔者在初次调试大型程序时,曾因为这个问题耗时多日后来试着将WSGR值由0000h改为0002h就顺利解决了(将片外低端程序空间的读/写等状态数设为2)。
札记2:ARAU
辅助寄存器单元ARAU提供强大的间接寻址功能,主要功能是在中央算数逻辑单元(CALU)操作的同时执行辅助寄存器(AR0~AR7)中的算术运算。
札记3:240x汇编指令
LAR:将指定数据单元的内容或立即数加载到指定的辅助寄存器
MAR:按指定要求修改辅助寄存器和ARP的值
LACL:将数据存储器的内容或一个0扩展的8位常数加载到累加器ACC的低16位,高16位填0
SACL:将累加器的值左移0~7位后将低16位复制到指定的输出寄存器
SACH:将累加器的值左移0~7位后将高16位复制到指定的输出寄存器
SPLK:将16的立即数送至任何存储单元
LDP:给页面指针DP赋值
ZAC:将ACC置为0
RPT:将指定存储器或8位立即数赋给重复计数器RPTC,将紧随RPT的那条指令执行指定的次数,RPTC+1次
LACC:将指定数据单元内容或16位立即数移位后加载到ACC
札记4:辅助寄存器(ARP和AR0 ~ AR7)
每打开一个函数,都会在堆栈中新建一个局部帧,AR0作为帧指针。
C编译器采用下面两个寄存器来管理堆栈
AR1——是堆栈指针(SP)。它指向堆栈的顶部。
AR0——帧指针(FP)。指向当前帧的开始。
定点C环境中保留了三个寄存器:AR0、AR1、AR2, 它们的作用如下:
AR0——帧指针
AR1——堆栈指针
AR2——局部变量指针(用于计算局部变量的地址)
函数进入和返回时,ARP必须为1,也就是说当前的辅助寄存器为AR1。函数执行时可以是其它值。AR0和AR1可以在函数执行过程中修改,但它们必须恢复。
AR2、AR3、AR4和AR5可以自由使用,也就是说,在函数执行过程中可以修改,也不必恢复。AR6和AR7用作寄存器变量。如果在函数中被修改,必须加以保护和恢复。
2014/3/20
札记1:
CMPR:将当前的辅助寄存器值与AR0比较,0、1、2、3分别为=、<、>、!=,将比较结果保存在TC,若比较结果为真,则TC置位,为假时TC为0
‚BCND:条件转移,condition 项可取值共有14种,其中ACC的内容、进位位、溢出位C、测试位TC、BIO引脚电平状态都可作为转移条件
2014/3/30
札记1:用.sec指令指定存储的段的时候,形如.sec “FFTtf”,那么在CMD文件中给段FFTtf分配空间的时候,应与“…”中的内容一致,不加.就都不加,加都加,否则会报错。用pragma声明时也一样。