TI中文支持网
TI专业的中文技术问题搜集分享网站

官方板子TMDSSK3358跑裸机中断异常

Other Parts Discussed in Thread:TMDSSK3358, AM3359, AM3358

这块TMDSSK3358板子是在咸鱼上买的二手的,上面CPU实际是AM3359,我手头另外还有个在官网买的ICEAM3359,在CCS9中建了一个以ICEAM3359为平台的裸机工程,加载的是ICEAM3359的gel文件,该工程跑的是个裸机环境下的定时器2中断,目前遇到的具体问题是:

           1  该定时器中断在ICEAM3359中只能进入大概两三次中断服务函数,之后就再也不进中断了

           2 不改变gel文件,工程不做任何更改,直接使用TMDSSK3358板子,结果每次进定时器中断都是跑到中断函数结尾处的花括号那个位置,根本不是从中断函

              数的头部开始执行的,而且不像上面问题1中那样进两三次就不在进入中断函数,是一直进入中断函数,只是每次都是定时中断到了PC指针就直接跳到末尾

           的 花括号那里了。开始怀疑是不是TMDSSK3358应该加载这块板子自己的gel文件,因为ICEAM3359就有自己独立的gel文件,但在CCS所在的文件夹里并未

            找  到专门针对TMDSSK3358板子的gel文件

        针对问题1,我在ICEAM3359中关闭定时器中断,然后开启eCAP的辅助PWM的比较中断,结果该中断运行良好,该中断在TMDSSK3358中仍然遇到和问

       题2一样的情况。

       补充一下,我在工程中采用的是超级监控模式,该模式是最高权限吧,这种模式有可能导致上面两种问题的出现吗

      以下是我的C工程中为获取超级监控模式而加入的汇编语句

     

; \file super_startup.asm
;
; \brief Firmware startup for supervisor mode
;
; @author mansoor.ahamed@ti.com

 .sect ".text"
 .state32
 .global mystartup
 .global _c_int00

mystartup:
 ldr pc, RTS_JUMP ;Jump to rtslib _c_int00 but skip 4 instructions      ;which puts cpu in user modeRTS_JUMP  .long (_c_int00 + 0x10)
 .end

Nancy Wang:

TMDSSK3358上是测试的哪个例程?请贴出具体路径。

,

user18914063:

是我自己建的工程,不是官方的例程,问题2中已说明了

,

Nancy Wang:

不清楚是否与模式有关。
建议参考StarterWare中timer裸机中断程序。
AM335X_StarterWare\examples\evmskAM335x\dmtimer
www.ti.com/…/STARTERWARE-SITARA
以及TRM中第六章节 Interrupts的描述
www.ti.com.cn/…/spruh73q.pdf

,

user18914063:

那TMDSSK3358这块板子有独立的gel文件吗,有没有可能和这个gel文件有关系

,

Nancy Wang:

GEL:ccsv8\ccs_base\emulation\boards\sk_am3358
GEL文件一般就是做一些初始化,应该不会是GEL文件的问题,跑一下例程看一下有没有问题。

,

user18914063:

我的是CCS9,里面没有TMDSSK3358板子的,而且这个板子实际是3359,不是3358

,

Nancy Wang:

ccsv9也是一样的路径,am3358和am3359差别不是很大,支持的主频/MIPS/工业协议有差别,建议使用sk_am3358。
数据手册 Table 3-1. Device Features Comparison有对比。

,

user18914063:

找到了sK_am3358的gel文件,在目标配置里面加载了这个gel文件,然后跑ICEAM3359的eCAP辅助PWM中断,仍然跑的好好的,换成TMDSSK3358就不行了,还是老问题,进中断是直接跳到中断服务函数末尾的花括号那里去了。既然ICEAM3359中断跑的好好的,那中断配置本身肯定是没啥问题的吧,唯一不同的就是两个板子的外围器件不一样,不知道外部器件的不同会不会导致这个中断的问题,两个板子我都是用的板载的调试器

,

user18914063:

CMD里面配置的中断向量表是在0x402f0400这个地址段,这个地址是内部SRAM范围,另外拷贝中断向量表的函数是这样的:
static void CopyVectorTable(void)
{Uint32 vectorBase = 0x40300000;
Uint32 ocmcRamSize = 64U * 1024U;
vectorBase = vectorBase + ocmcRamSize – 0x400U;
Uint32 *dest = (Uint32 *)vectorBase;Uint32 *src =(Uint32 *)vecTbl;Uint32 count;
CP15VectorBaseAddrSet(vectorBase);
for(count = 0; count < sizeof(vecTbl)/sizeof(vecTbl[0]); count++){dest[count] = src[count];}
}
中断向量表映射到了0x40300000这个地址段,这个地址仍然是片内存储器地址,都没有和外部存储器发生关联的,所以虽然两个板子外部存储器可能不同,但中断配置和对应的存储空间都是在内部的

,

user18914063:

注意到一个细节问题,ICEAM3359板子上AM3359的型号编码是AM3359BZCZA80,而TMDSSK3358板子上的AM3359型号编码是XAM3359ZCZ,在论坛里搜索了下,发现前缀带X的XAM3359是工程样片,不知道会不会和这个有关系。我在论坛里别人的提问里看到说是工程样片和正常片子在同样的电路结构上运行同一个代码会出现不同的现象。

,

user18914063:

TI的工程师有空的话,帮我看看我的问题吧,谢谢

赞(0)
未经允许不得转载:TI中文支持网 » 官方板子TMDSSK3358跑裸机中断异常
分享到: 更多 (0)