CCS2.2和CCS3.1在读写GEL文件上的区别

来源:互联网 发布:宜家海沃格床垫知乎 编辑:程序博客网 时间:2024/05/18 03:55

CCS2.2和CCS3.1在读写GEL文件上的区别

 

我用的是一块从学长那儿拿过来的DSP开发板,从板子上看不出来是哪家做的,芯片型号是TMS320DM642,从芯片的型号就可以看出这块板子主要是围绕图像处理,仿真器是SEED XD510的,我从合众达的官方网站上找到了CCS2.2、3.1、3.3三个版本的驱动,并搞到了合众达另外一套试验箱图像处理方面的源程序,于是自己想在板子上跑一下。刚开始用的是CCS2.2的版本,虽然比较老,但是和win7竟然也兼容的很好,跑了一些那套程序竟然也基本兼容,看来两套板子在硬件上没什么太大的差别。后来电脑重装系统后我换了CCS3.1,在去跑那套程序发现部分程序就运行不正常了,好了下面换回正题,说一下我遇到的问题:跑灰度图像的处理没什么问题,一切正常,一旦跑彩色图像出来的图像就全花了,于是我又装了一个2.2的版本试试,发现是正常的,原程序也是2.2的版本编译的,难道2.2和3.1兼容性有问题?

先说说2.2和3.1在使用上的区别,最明显的是CCS2.2必须在目标板连接后才能打开,打开软件之后CPU的状态就是HALT,而CCS3.1在软件打开之后的状态时UNKNOWN,需要手动去debug-connect,也就是说CCS3.1需要手动连接目标版,支持离线的编译,其他方面的区别不是特别大(当然这是对于我这个小菜鸟而言)。

    另外就是在芯片配置上面,CCS2.2在配置的最后会出现选择GEL文件,而CCS3.1选择完端口之后直接就完了,刚开始我就忽略了这个问题,GEL文件用的是默认的EVMDM642.gel,导致部分程序运行不正常。

 

这里说一下gel文件,各类文件时芯片的初始化配置文件,往往不同的开发板需要用不同的gel文件,这是因为不同的开发板的硬件连接可能不同,因此很多芯片的地址也就不一样,因此需要不同的文件来进行配置。在打开之后的界面可以看到GELfiles,这里面即是初始化配置文件,因此gel文件很重要。 

在我发现gel文件不一致后,我第一想法是换掉这个文件,于是我重新配置,gel文件由默认的CCStudio_v3.1/cc/gel/EVMDM642.gel换成SEEDDM642.gel。结果在打开CCS的时候弹出警告GEL:Error while executing StartUp(): Target must be connected before calling the function G也不管他,点击确定打开之后连接芯片提示GEL: Error calling OnPreFileLoaded(): memory map prevented write to target memory at 0x01800054,将程序写入之后还是不正常。原来程序不正常我认为是由于gel文件的原因,2.2里面用的是SEEDDM642.gel的配置文件,里面相关是配置显然是根据开发板做了调整,所以正常运行,后来由于设置的是默认的EVMDM642.gel,这个我查了一下是针对TI公司的开发板的,和我手中的板子不太兼容,于是除了问题,现在在3.1的环境下换成了SEEDDM642.gel下载程序都出错显然是2.2和3.1不兼容的地方了。

    下面具体谈一下GEL文件的执行过程。使用CCSStudio Setup工具,可以为在系统配置中的每一个处理器指定一个启动GEL文件。当CCSStudio启动时,GEL文件加载到PC机的内存中,由CCS根据加载的GEL文件对目标板进行初始化。在CCS2.2中,主机和目标板的初始化工作都在GEL文件的Startup()函数中执行,而CCS2.2必须在打开时就会连接目标板同时进行初始化。但是对于支持Connect/Disconnect的CCSStudio例如CCS3.1,打开后目标板并没有被自动连接,这样的GEL文件中的初始化程序并没有正确执行,因为CCSStudio启动时和目标处理器是断开的。当Startup()函数试图访问目标处理器时会出错。因此在CCS3.1中需要回调函数来重新执行初始化。下面可以将SEEDDM642.gel和EVMDM642.gel做一个对比。

首先是SEEDDM642.gel中的StartUp()

 

[cpp] view plaincopyprint?
  1. StartUp()  
  2.  
  3.     setup_memory_map();  
  4.     GEL_Reset();    
  5.     init_emif();  
  6.  

EVMDM642.gel中的StartUp()

 

[cpp] view plaincopyprint?
  1. StartUp()  
  2.  
  3.     setup_memory_map();  
  4.   
  5.       
  6.       
  7.       
  8.       
  9.       
  10.       
  11.     //OnTargetConnect();   
  12.  

从这个函数的对比就可以看到前一个在StartUp()中就已经完成了GEL和emif的初始化工作,而在后一个中就没有,这一点和前面说的软件打开时目标板的连接方式刚好一致。

因此在CCS3.1的gel文件中就多了这样一段函数:

[c-sharp] view plaincopyprint?
  1. OnTargetConnect()  
  2.  
  3.       
  4.       
  5.       
  6.       
  7.       
  8.       
  9.       
  10.       
  11.     //GEL_Reset();   
  12.   
  13.     init_emif();  
  14.   
  15.     GEL_TextOut("GEL StartUp Complete./n");  
  16.  

即在目标板连接的时候进行初始化操作,由此就可以理解为什么前面弹出的警告了,将SEEDDM642.gel对应的部分修改后在运行警告消失,即在软件打开时不对芯片初始化,改在芯片连接时进行。

    同样可以看一下gel文件中的其他函数:

 

[cpp] view plaincopyprint?
  1.   
  2.   
  3.   
  4.   
  5.   
  6.   
  7. OnReset( int nErrorCode  
  8.  
  9.     init_emif();  
  10.  
  11.   
  12.   
  13.   
  14.   
  15.   
  16.   
  17. OnPreFileLoaded()  
  18.  
  19.       
  20.       
  21.       
  22.       
  23.       
  24.       
  25.       
  26.       
  27.     //GEL_Reset();   
  28.   
  29.     flush_cache();  
  30.     IER 0;  
  31.     IFR 0;  
  32.     init_emif();  
  33.  
  34.   
  35.   
  36.   
  37.   
  38.   
  39.   
  40.   
  41.   
  42.   
  43.   
  44.   
  45. OnRestart( int nErrorCode  
  46.  
  47.       
  48.       
  49.       
  50.       
  51.       
  52.     *(int*)0x01848200 0;          // MAR0   
  53.     *(int*)0x01848204 0;          // MAR1   
  54.     *(int*)0x01848208 0;          // MAR2   
  55.     *(int*)0x0184820c 0;          // MAR3   
  56.   
  57.       
  58.       
  59.       
  60.       
  61.       
  62.     *(int*)0x01A0FFA8 0;          // CIERH   
  63.     *(int*)0x01A0FFB4 0;          // EERH   
  64.     *(int*)0x01A0FFB8 0XFFFFFFFF; // ECRH   
  65.   
  66.     *(int*)0x01A0FFE8 0;          // CIERL   
  67.     *(int*)0x01A0FFF4 0;          // EERL   
  68.     *(int*)0x01A0FFF8 0xFFFFFFFF; // ECRL   
  69.   
  70.       
  71.     IER 0;  
  72.     IFR 0;  
  73.  

由此可以更深刻的了解gel文件的作用和两个版本的区别了。

   

0 0