TMS320C28x

一个函数调用另一个函数时,需要进行以下步骤:

1) 被调用的函数并不需要保存寄存器变量,但是当函数返回的时候,返回值需要保存在Stack中;

2) 如果被调用的函数返回参数为结构体,则调用函数将会为该结构申请一个内存空间,并且将该内存空间的地址作为被调用函数的第一个参数;

3) 被调用函数的参数是通过寄存器存放,必要时,可以存在放在Stack中。参数传递的规则如下:

 a) 32-bit的参数(longs或者floats),第一存放在32-bit ACC(AH/AL)。其他32-bit参数或者函数指针以reverse order存放在Stack中。

 b) 指针参数存放在XAR4和XAR5中,其他所有参数存放在Stack中。

 c) 剩下的16-bit参数按照次序存放在AL、AH、XAR4、XAR5中(这些寄存器并没有使用的情况下)。

4) 所有不存放在寄存器中的参数都以reverse次序push到Stack中(最左边的参数在stack中位置为stack的末尾)。所有32-bit参数在stack中以偶数地址为边界。

结构参数事实上是以结构体的地址作为参数传入,被调用的函数必须有一个本地局部变量copy。

如果函数以省略号进行申明,表示函数可以接受变长的参数,这边进行了简单的修正。最后一个明确的参数存放在stack中,所以它的stack地址可以作为读取其他非申明参数的索引。

5) 调用者使用LCR指令调用函数,RPC寄存器变量将被push到stack中,函数的返回值将被存放在RPC寄存器中。

一个被调用函数需要进行以下步骤:

1) 如果被调用函数修改了XAR1、XAR2、或者XAR3,则必须保存修前的值,因为调用函数在这些寄存器中保存了变量,其他寄存器使用之前并不需要预先保存;

2) 被调用函数在stack中为局部变量、临时变量、函数可能使用的参数分配了足够的内存空间,在函数初始化时增加常量到SP寄存器中,内存空间的分配会发生;

3) 如果被调用函数需要使用结构体参数,它只会接收到一个结构体指针。如果被调用函数需要对该结构进行写操作,该结构体必须在stack中有一个本地保存的局部变量,接收的结构体指针被copy到本地保存的局部变量中。如果对于该结构没有写操作,被调用函数直接使用该指针参数作为引用。

当被调用函数需哟啊接收一个结构体参数时,必须谨慎的声明函数,包括它们被使用的地方(结构体参数为作为地址传递的)和它们被声明的地方(函数知道copy该结构体到本地局部变量)。

4) 被调用函数执行函数的code;

5) 被调用函数返回值被保存在寄存器中,规则如下:

 16-bit 整形变量:AL

 32-bit 整形变量:ACC

 16-或者22-bit 指针:XAR4

如果函数返回结构体,调用者会为这个结构体申请内存空间,同时将被调用函数的返回内存空间地址传递进去(XAR4),对于返回结构体,被调用函数通过外部参数copy结构体到内存块中。

通过这种方法,调用者可以通知被调用函数是否返回结构体。

6) 被调用函数分配内存通过减去之前加在SP的值。

7) 被调用函数恢复之前Step1保存的所有寄存器变量。

8) 被调用函数通过LRETR指令返回。PC使用RPC寄存器保存的变量,之前RPC的值从stack中pop出,并保存。

2008-1-13

写中断程序时,需要注意以下几点:

1) 中断程序没有参数,即使声明了,它们也会被忽略掉;

2) 中断程序可以被一般的C/C++代码调用,但是其效率很低,因为调用时会保存所有的寄存器;

3) 中断程序能够响应一个中断或者多个中断。编译器不会为中断增加特殊代码,除了系统复位中断程序:c_init00。当进入中断程序时,不能认为run-time的stack已经建立起来了,因此,你无法分配局部变量以及保存任何信息在run-time stack中。

4) 为了使得中断程序和中断结合,中断函数的地址必须放在合适的中断向量表中。可以使用assembler和linker通过.sect创建中断地址表。

5) 在汇编程序中,记得在符号名称前增加下划线,例如:c_int00到_c_int00。

c_int00函数执行了以下操作,初始化C/C++环境:

1) 为run-time stack申请内存空间,设置初始的stack pointer变量;

2) 初始化寄存器状态位,并设置寄存器为期望值;

3) 将.cinit内初始化表的数据copy到申请内存空间的.bss内,在RAM自动初始化模式下,loader在函数运行前进行这一步的操作(而不是由boot程序);

4) 执行.pinit段中断全局构造;

5) 调用main()函数开始C/C++程序。

本书详细介绍了TMS320C28x系列DSP的事件管理器、模-数转换器、32位CPU定时器、多通道缓冲串行口、串行外设接口、串行通信接口、增强型区域网络控制器、通用输入/输出多路复用器,以及电气特性和机械数据等内容。本书可供高等学校电子、通信、计算机、自动控制和电力电子技术等专业的高年级本科生及研究生作为教科书或参考书,也可作为各领域中从事信号处理、控制和电力电子技术的科研及工程技术人员的参考书籍 目录 第11章事件管理器(EV) 11.1事件管理器功能概述 11.1.1事件管理器功能 11.1.2 EV的增强特性 11.1.3事件管理器的寄存器地址 11.1.4通用目的(GP)定时器 11.1.5使用GP定时器产生PWM输出 11.1.6全比较单元 11.2 PWM电路 11.2.1有比较单元的PWM电路 11.2.2 PWM信号的产生 11.2.3空间向量PWM 11.3捕捉单元 11.3.1捕捉单元概述 11.3.2捕捉单元的操作 11.3.3捕捉单元的FIFO堆栈 11.3.4捕捉中断 11.3.5正交编码脉冲电路(QEP) 11.4事件管理器的中断 11.4.1事件管理器中断概述 11.4.2 EV中断请求和服务 11.5事件管理器的寄存器 11.5.1 寄存器概述 11.5.2定时器寄存器 11.5.3比较控制寄存器 11.5.4 比较行为控制寄存器 11.5.5捕捉单元寄存器 11.5.6事件管理器中断标志寄存器 11.5.7事件管理器控制寄存器 11.5.8寄存器位设置的区别 第12章模-数转换器(ADC) 12.1 ADC模块的特点 12.2 自动转换序列发生器的工作原理 12.2.1序列采样模式 12.2.2并发采样模式 12.2.3并发采样双序列发生器模式举例 12.2.4并发采样级联序列发生器模式举例 12.3连续自动序列化模式 12.3.1序列发生器启动/停止模式 12.3.2并发采样模式 12.3.3输入触发描述 12.3.4序列转换过程中的中断操作 12.4 ADC时钟预定标器 12.5低功耗方式 12.6加电顺序 12.7序列发生器的替换特性 12.8 ADC寄存器 12.8.1 ADC控制寄存器 12.8.2最大转换通道寄存器 12.8.3 自动序列状态寄存器 12.8.4 ADC状态和标志寄存器 12.8.5 ADC输入通道选择序列控制寄存器 12.8.6 ADC转换结果缓冲寄存器 第13章 32位CPU定时器O/1/2 13.1 CPU定时器的结构与工作原理 13.2 CPU定时器的寄存器 13.2.1定时器计数器寄存器 13.2.2定时器计数器寄存器高位 13.2.3定时器周期寄存器 13.2.4定时器周期寄存器 13.2.5定时器控制寄存器 13.2.6定时器预定标计数器低位 13.2.7定时器预定标计数器高位 第14章 多通道缓冲串行E!(McBSP) 14.1概述 14.1.1 McBSP介绍 14.1.2寄存器一览 14.1.3 McBSP操作 14.1.4 McBSP的采样率发生器 14.1.5 McBSP的意外/出错情况 14.2多通道选择模式 14.2.1通道、模块、分区 14.2.2 A-bis模式 14.2.3 SPI仂、议 14.3配置接收器和发送器 14.3.1接收器配置 14.3.2发送器配置 14.4仿真和复位事项 14.4.1 McBSP仿真模式 14.4.2数据打包实例 14.4.3 GPIO功能 14.5 McBSP的FIFO和中断 14.5.1 McBSP的FIFO概述 14.5.2 FIFO模式下McBSP的功能性与局限性 14.5.3 McBSP的FIFO操作 14.5.4 McBSP接收中断的产生 14.5.5 McBSP发送中断的产生 14.5.6 McBSP FIFO寄存器的说明 14.6 McBSP寄存器 14.6.1 数据接收和发送寄存器 14.6.2串行口控制寄存器(SPCRl和SPCR2) 14.6.3接收控制寄存器(RCRl和RCR2) 14.6.4发送控制寄存器(XCRl和XCR2) 14.6.5 采样率产生器寄存器(SRGRl和SRGR2) 14.6.6多通道控制寄存器(MCRl和MCR2) 14.6.7引脚控制寄存器(PCR) 14.6.8接收通道使能寄存器(RCERA-RCERH) 14.6.9发送通道使能寄存器(XCERA-XCERH) 14.6.10寄存器总结 第15章 串行外围接口(SPl) 15.1增强型SPI模块概述 15.2 SPI模块结构及工作原理 15.2.1 SPI模块信号总结 15.2.2 SPI模块寄存器概述 15.2.3 SPI操作 15.2.4 SPI中断 15.2.5数据格式 15.2.6波特率和时钟方案 15.2.7复位的初始化 15.2.8 SPI FIFO说明 15.3 SPI的寄存器组 15.3.1 SPI配置控制寄存器 15.3.2 SPI 512作控制寄存器 15.3.3 SPI状态寄存器 15.3.4 SPI波特率寄存器 15.3.5 SPI仿真缓冲寄存器 15.3.6 SPI串行接收缓冲寄存器 15.3.7 SPI串行发送缓冲寄存器 15.3.8 SPI串行数据寄存器 15.3.9 SPI FIFO发送、接收及控制寄存器 15.3.10 SPI优先权控制寄存器 15.4 SPI范例波形 第16章 串行通信接口(SCl) 16.1增强型SCI模块概述 16.2 SCI模块结构及工作原理 16.2.1 SCI模块信号总结 16.2.2多处理器和异步处理模式 16.2.3 SCI可编程数据格式 16.2.4 SCI多处理器通信 16.2.5空闲线多处理器模式 16.2.6地址位多处理器模式 16.2.7 SCI通信格式 16.2.8 SCI端口的中断 16.2.9 SCI波特率计算 16.2.10 SCI增强型特点 16.3 SCI寄存器组 16.3.1 SCI模块寄存器一览 16.3.2 SCI通信控制寄存器 16.3.3 SCI控制寄存器1 16.3.4 SCI波特率选择寄存器组 16.3.5 SCI控制寄存器2 16.3.6 SCI接收状态寄存器 16.3.7接收数据缓冲寄存器 16.3.8 SCI发送数据缓冲寄存器 16.3.9 SCI FIFO寄存器组 16.3.10优先权控制寄存器 第17章 增强型区域网络控制器(eCAN) 17.1 eCAN的结构 17.1.1 CAN概述 17.1.2 CAN网络和模块 17.1.3 eCAN控制器概述 17.1.4 消息对象 17.1.5消息邮箱 17.2 eCAN的寄存器 17.3 eCAN配置 17.3.1 CAN模块初始化 17.3.2分步配置eCAN 17.3.3远程帧邮箱操作 17.3.4中断 17.3.5 CAN功率下降模式 第18章 通用输入/输出(GPIO)多路复用器 18.1 GPIO多路复用器 18.2 GPIO多路复用器的寄存器 第19章 电气特性和机械数据 19.1 电气特性 19.2 机械数据 附录A寄存器速查参考 附录A.1 CPU寄存器速查参考 A.1.1访问CPU寄存器的指令和复位值 A.1.2寄存器图解 附录A.2事件管理器EV寄存器一览 附录A.3 片内ADC寄存器一览 附录A.4串行外围接El SPI寄存器一览 附录A.5 串行通信接 SCI寄存器一览 附录A.6 CPU定时器0/1/2的寄存器一览 附录A.7多通道缓冲串行ISl McBSP寄存器一览 附录A.8 eCAN寄存器一览 附录A.9通用I/0 H GPIO寄存器一览 附录A.IO时钟、系统控制及PIE寄存器一览 附录A.11片内Flash、OTP寄存器一览 附录A.12外设接H XINTF的寄存器一览 附录B 词汇表 参考文献
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值