请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28377S 主题中讨论的其他器件:SFRA、
我已经为具有 SFRA 库的 TMS320F28377S 准备了一个新项目。 该库的添加方式与 F2877S 的"spruhz5a"和 数字降压示例中的添加方式相同。
当我按"Connect to the GUI"、程序跳至 ILLEGAL_ISR 时、就会出现此问题。 当我取消注释 SFRA_F_INject 和 SFRA_F_Collect 时、或者当我未连接到 GUI 时、程序似乎正常工作。 我的链接器脚本基于 数字降压示例、并进行了一些修改、例如新扩展名为".TI.ramfunc"。
我观察到了 SFRA_F_INject 函数的奇怪行为 。 当我将参数设置为0.5时、它返回大约2000而不是0.5。
我不理解有关 SFRA_F_Collect 和 SFRA_F_Inject 的警告-请参阅附件。 这意味着什么?
============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ 用于
从闪存运行的*//*特定于用户的链接器命令文件*/
/*==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== */
/*文件:F28069_flash_DP_BoosterPack.CMD */
* */
/*说明:用户自定义段的链接器命令文件、专用于从
闪存运行*//*。*/
* */
/*目标:TMS320F28069*/
* */
*版本:1.00*/
* */
//*--------------------------------------------------------------------------------------------------------------- */
/*版权所有德州仪器(TI)
2015*/
//*--------------------------------------------------------------------------------------------------------------- */
/*修订历史记录: */
//*--------------------------------------------------------------------------------------------------------------- */
/*日期|说明 */
//*--------------------------------------------------------------------------------------------------------------- */
* 01/20/15|版本1.0新版本。 */
//*--------------------------------------------------------------------------------------------------------------- //
//*定义 F2806x
页的内存块开始/长度0将用于组织程序段
页1将用于组织数据段
注:
F28069上的存储器块是一致的(也是相同的
物理存储器)。
不应该是相同的存储器区域
同时为 PAGE 0和 PAGE 1定义。
这样做将导致程序损坏
和/或数据。
可组合连续 SARAM 存储器块
如果需要创建更大的存储器块。
*/
MEMORY
{
PAGE 0:
/* BEGIN 用于"引导至 SARAM"引导加载程序模式*/
BEGIN:origin = 0x000000,length = 0x000002
RAMM0:origin = 0x000122、length = 0x0002DE
RAMD0:origin = 0x00B000、length = 0x000800
RAMLS0:origin = 0x008000、length = 0x000800
RAMLS1_LS2 :origin = 0x008800,length = 0x001800
// RAMLS3:origin = 0x009800,length = 0x000800
RAMLS4:origin = 0x00A000、length = 0x000800
reset:origin = 0x3FFFC0,length = 0x000002
page 1:
boot_RSVD :origin = 0x000002、length = 0x000120 // M0的一部分,引导 ROM 将此用于栈*/
RAMM1 :origin = 0x000400、length = 0x000400 /*片上 RAM 块 M1 */
RAMD1 :origin = 0x00B800,length = 0x000800
RAMLS5 :origin = 0x00A800,length = 0x000800
RAMGS0 :origin = 0x00C000、length = 0x001000
RAMGS1 :origin = 0x00D000、length = 0x001000
// RAMGS2 :origin = 0x00E000、length = 0x001000
RAMGS3 :origin = 0x00FE20、length = 0x0001E0
RAMGS4 :origin = 0x010000,length = 0x002000
RAMGS5 :origin = 0x012000,length = 0x001000
RAMGS6 :origin = 0x013000、length = 0x001000
RAMGS7 :origin = 0x014000、length = 0x001000
RAMGS8 :origin = 0x015000,length = 0x001000
RAMGS9 :origin = 0x016000,length = 0x001000
RAMGS10 :origin = 0x017000、length = 0x001000
RAMGS11 :origin = 0x018000、length = 0x001000
RAMGS12 :origin = 0x019000、length = 0x001000
RAMGS13 :origin = 0x01A000、length = 0x001000
RAMGS14 :origin = 0x01B000、length = 0x001000
RAMGS15 :origin = 0x01C000、length = 0x001000
DataRAM :origin = 0x009800,length = 0x000800//片上 RAM 块 LS3 */
IQTABLES:origin = 0x00E000,length = 0x000B50 // RAMGS2的一部分中的 IQ Math 表*/
IQTABLES2:origin = 0x00EB50,length = 0x00008C // RAMGLS2的一部分
中的 IQ Math 表*:*: origin = 0x00EBDC、length = 0x0000AA/* RAMGS2中的 IQMath 表*/
IQMath :origin = 0x00EC86,length = 0x000afa// RAMGS2和 RAMGS3中的 IQMath 函数*/
FPUTABLES:origin = 0x00F780,length = 0x0006A0// RAMGS2和 RAMGS3中的 FPU 表*/
}//
////*将段分配给内存块。
注:
DSP28_CodeStartBranch.asm 中用于重定向代码的 codestart 用户定义段
闪存时执行
ramfuncs 用户定义的段来存储将从闪存复制到 RAM 中的函数
*/
段
{
//分配程序区域:*/
.cinit :> RAMM0, PAGE = 0.Pinit
:> RAMM0, PAGE = 0.text
:>>RAMM0| RAMD0| RAMLS0 | RAMLS1_LS2,PAGE=0
codestart :>开始 PAGE = 0
#ifdef __TI_Compiler_version__
#if __TI_Compiler_version__>=15009000
.TI.ramfunc:>> RAMLS1_LS2 | RAMLS4,PAGE = 0
{
--library=SFRA_F_Lib.lib
--library=SFRA_F_Lib.lib
}
#else
ramfuncs :>> RAMLS1_LS2 | RAMLS4,PAGE = 0
{
--library=SFRA_F_Lib.lib
--library=SFRA_F_Lib.lib
}
#endif
#endif
/*分配未初始化的数据段:*/
.stack :> RAMM1 PAGE = 1.ebss
:>> RAMLS5 | RAMGS0 | RAMGS1 PAGE = 1
.esysmem :> RAMLS5 PAGE = 1
/*初始化段进入闪存*/
.econst :> RAMLS5,page = 1.
switch :> RAMM0, PAGE = 0.reset
:>重置, PAGE = 0、TYPE = DSECT /*未使用、*/
IQmath :> IQMath, PAGE = 1
IQmathTables :>IQTABLES,page =1
FPUmathTables:>FPUTABLES,page =1
/*如果调用 IQNexp()或 IQexp(),请取消注释以下部分
库中的函数、以便利用
引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM
1个等待状态)。 如果此部分未注释、则为 IQmathTables2
将被加载到其他存储器(SARAM、闪存等)中并将采用
上行空间、但0等待状态是可能的。
//
/*
IQmathTables2:> IQTABLES2,page = 0,type = NoLoad
{
IQMath.lib (IQmathTablesRam)
}*/
/*如果调用 IQNasin()或 IQasin(),请取消注释以下部分
库中的函数、以便利用
引导 ROM 中的相关 IQ Math 表(这可以节省空间和引导 ROM
1个等待状态)。 如果此部分未注释、则为 IQmathTables2
将被加载到其他存储器(SARAM、闪存等)中并将采用
上行空间、但0等待状态是可能的。
//
/*
IQmathTables3:> IQTABLES3,page = 0,type = NoLoad
{
IQMath.lib (IQmathTablesRam)}*/
}
部分
{/*********
DPLIB 部分 C28x ***** /
//* ADCADRV_1CH 部分*/
ADCADRV_1CH_SECTION:> DataRAMPAGE = 1
//* ADCDRV_4ch 段*/
ADCDRV_4ch_SECTION:> DataRAMPAGE = 1
//* CNTL_2P2Z 段*
/ CNTL_2P2Z_SECTION:> DataRAMPAGE = 1
CNTL_2P2Z:> DataRAM
>DataRAMpage = 1
/* CNTL_3P3Z section */
CNTL_3P3Z_Section:>DataRAMpage = 1
CNTL_3P3Z_InternalData:>DataRAMpage = 1
CNTL_3P3Z_Coef:>DataRAMpage = 1
/* DACDRV_ramp section */
DACDRV_DAC_1*1:1 DCD_OCH_SECTION:* 1 DRAM_OCH * 1
>DataRAMpage = 1
DLOG_buff:>DataRAMpage = 1
/* MATH_EMAVG section */
MATH_EMAVG_SECTION:>DataRAMpage = 1
/* PFC_ICMD section*/
PFC_ICMD_SECTION:>DataRAMpage = 1
/ DataPFC_INVSQR section*/
PFC_INVSQR_SECTION*:/PWRV_PWRV_SECTION*
1 *:/PWRV_PWRV_SECTION 1 * 1 * >DataRAMpage = 1
/* PWMDRV_1chHIRes driver section */
PWMDRV_1chHIRes_Section:> DataRAMpage = 1
/* PWMDRV_PFC2PHIL driver section */
PWMDRV_PFC2PHIL_Section:> DataRAMpage = 1
/* PWMDRV_PSRV_UDPWCLV_SECTION
* PWMDRV_DUT_UPWMDRV_SECTION:* PWMDRV_UPDRV_SECTION *
>DataRAMpage = 1/*
PWMDRV_ComplPairDB driver section */
PWMDRV_ComplPairDB_Section:>DataRAMpage = 1/*
ZeroNet_Section */
ZeroNet_Section:>DataRAMpage = 1/*
SFRA Data */
SFRA_F_Data:> DataRAM,align = 64,page = 1
}