热度 11
2016-3-28 11:14
2924 次阅读|
0 个评论
开发环境安装问题 我们当前推荐的用于开发Hercules系列MCU的平台是 CCS V5.3.0 。 用户可以从下面的地址找到: http://www.ti.com/tool/ccstudio 开发工具安装失败问题很多时候是由于以下原因造成的: 安装文件下载不完整 办法: 重新下载,网站支持续传,所以大家只要有耐心即可。 下载了*.zip格式的文件,并在打开后直接运行了其中的*.exe安装文件 直接打开zip文件运行里面的程序时,windows会把zip的内容先解压缩到临时文件夹,一般这个文件夹在用户的系统目录下。 路径过长、系统盘有效空间不够、或包含中文路径等等原因,会使得这样的操作容易导致失败。 办法: 下载了zip文件后,先解压缩到一个路径较短的纯英文路径下(最好到磁盘根目录如D:\tools之类的文件中),再从解压后的文件夹中运行exe文件安装。 安装目标路径 安装软件的目标路径一定不要有中文,最好没有空格和特殊字符。 放在windows桌面的错误经常发生,中文的windows系统的桌面路径一般是 C:\Users\用户名\桌面 也就是说,桌面是包含中文路径的…最好不要把跟项目相关的任何文件放在这里。。。 Pdf文档什么的当然没问题啦。 .net framework 的问题 新版的开发工具一般都使用了C#或Java等高级编程工具,这些语言会调用.net framework的库函数,如果用户没有安装这些库函数,那么开发工具会经常报错。 尤其是Windows XP或更早的操作系统,里面自带的库函数支持非常少,需要用户自行下载安装。 建议大家安装.net frame work 4.0或更高的版本。 下载地址: http://www.microsoft.com/en-us/download/details.aspx?id=17851 CCS license 问题 安装好了CCS以后,用户会自动获得一个评估版的授权,您可以使用大部分CCS的功能,但是工程的代码量限制在32KB。而且只能使用XDS100调试器。这个license没有时间限制。 更改License类型,也可以通过网络获取30天的完整功能license。30天后过期。 如果需要更长时间或更多功能的License,请与TI的销售人员联系。 TI的销售渠道联系方式可以从下面的链接中找到: http://www.ti.com.cn/general/cn/docs/gencontent.tsp?contentId=24957 常用资源链接 TI的处理器维基网站中有Hercules专版,地址: http://processors.wiki.ti.com/index.php/Category:Hercules 这里有非常多用户关心的资源,建议大家一定要去看看。 Hercules板块中分别有TMS470板块,TMS570板块和RM4x板块。 这里以TMS570板块为例提供几个常用资源的维基链接: TMS570 HDK开发板原理图: http://processors.wiki.ti.com/images/5/5b/TMS570LS31_HDK_Schematics.pdf (这里也有源文件版本的原理图) TMS570 337pin BGA封装的器件封装文件(ORCAD版本): http://processors.wiki.ti.com/images/e/e4/TMS570LS31x_ZWT_OrcadSymbol.zip TMS570 Flash Bootloader例程代码: http://processors.wiki.ti.com/images/f/f3/TMS570LS31_Bootloader_v1.0.0.zip TMS570 软件常用例子(包含各种例子,如timer, ADC, Flexray, CAN等): http://processors.wiki.ti.com/index.php/Category:HerculesSWExamples (上面的链接中还包含 以太网 驱动例子) (其他在TI官网上很容易找到的工具,如HALCoGen, HET IDE等等,就不重复累述了。) Cortex-R4F 中断嵌套问题 Cortex-R4F CPU中有IRQ和FIQ两种中断,在Hercules系列MCU里,FIQ中断被设置为NMI,即不可屏蔽中断。 FIQ在硬件上拥有更高的优先级,并且能够打断正在执行中的IRQ服务程序。 FIQ与IRQ的嵌套一般不需要用户做额外的设置。 我们这里主要谈的是IRQ之间的嵌套。 Cortex-R4F CPU中针对IRQ的寄存器组只有一组,也就是说,从硬件角度,CPU无法完成IRQ的嵌套 (没有多余的寄存器组来存储前面一个IRQ的寄存器信息(所谓的“现场”)。) 但这不意味着Cortex-R4F CPU不能支持IRQ的嵌套。 用户只需要把需要保护的“现场”通过软件保存在RAM中,恢复时再从RAM恢复到寄存器组即可。 这个过程可以通过下面的代码来实现: #pragma INTERRUPT(rtiCompare0Interrupt, IRQ) void rtiCompare0Interrupt( void ) { /* USER CODE BEGIN (39) */ /* USER CODE END */ rtiREG1-INTFLAG = 1U; asm (" STMFD SP!, {R0-R12, LR}"); /*Save R0- R12, LR_irq*/ asm (" mrs lr, spsr"); /* Copy SPSR_irq to LR */ asm (" STMFD SP!, {LR}"); /* Save SPSR_irq */ asm (" MSR CPSR_c, #0x1F"); /* Enable IRQ (Sys Mode) */ asm (" STMFD SP!, {LR}"); /* Save LR */ rtiDisableNotification(rtiNOTIFICATION_COMPARE0); /*Disable rtiCompare1 Interrupt itself */ rtiNotification(rtiNOTIFICATION_COMPARE0); //asm(" LDMFD SP!, {R0-R12}"); /*Restore R0-R12*/ asm (" LDMFD SP!, {LR}"); /* Restore LR */ asm (" MSR CPSR_c, #0x92"); /* Disable IRQ (IRQ Mode) */ asm (" LDMFD SP!, {LR}"); /* Restore SPSR_irq to LR */ asm (" MSR SPSR_cxsf, LR"); /* Copy LR to SPSR_irq */ asm (" LDMFD SP!, {R0-R12, LR}"); /* Restore LR */ rtiEnableNotification(rtiNOTIFICATION_COMPARE0); /*Enable rtiCompare1 Interrupt */ /* USER CODE BEGIN (40) */ /* USER CODE END */ } 这个例子是把rtiCompare0Interrupt()这个中断服务函数(ISR)设置为“可以被嵌套”。 当这个ISR执行到rtiNotification(rtiNOTIFICATION_COMPARE0);这个调用时,其他的IRQ就可以打断当前的操作,得到CPU的响应了。 这里加入了防止rtiCompare0Interrupt()自己嵌套自己的保护。 但是并没有加入优先级的判断,也就是说出了rtiCompare0Interrupt()中断之外的所有IRQ,都有可能打断这个ISR。 用户可以通过MASK寄存器,来实现中断嵌套优先级的操作。 最后,在设计时序要求比较严格的应用时,我们不建议使用IRQ的中断嵌套,建议大家: 尽量减少使用IRQ。 IRQ的执行时间和执行周期要做到心中有数,坚决杜绝“overlapping”。 实在需要IRQ嵌套的场合,要多做测试。 JTAG 链接问题 调试器不能连接目标板的问题是比较容易出现的。 这里给出几种常见的解决办法: 调低TCK的时钟频率 TCK是JTAG通信时钟,由于用户的开发环境不同,可能受到不同的干扰,现象是一会儿能连接调试器,一会儿连接不上。 这种情况下,可以尝试调低TCK。 方法是在CCS的工程窗口中打开ccxml文件(如TMS570LS3137.ccxml),选择 选项卡,选中XDS100v2调试器,在下拉菜单中选择 , 然后设置一个较低频率。 擦除芯片中的程序 如果是之前能连接调试器,但是某次下载后,就再也连不上了,硬件没有任何改变。这样的情况下,可以尝试将芯片整体擦除。 建议使用最新的Uniflash工具进行擦除。 Uniflash下载地址: http://www.ti.com/tool/uniflash (建议原来使用nowFlash的用户都切换到Uniflash,这个工具配备最新的DLL,下载连接更快更稳定。) 检查芯片工作状态 如果是用户自己设计的电路板,调试器没有连接成功过的情况,建议检查一下MCU的工作状态是否正常。 最简单的办法是通过芯片的nRST引脚。 这个引脚默认状态下输出芯片的复位状态。 如果调试器始终不能连接成功,那么拔掉JTAG接口,把板子重新上电,然后用示波器观察nRST的电平状态。 如果这个信号为低,那么说明MCU处于复位状态,也就是说MCU不能正常工作,请检查MCU周边的电路如电源,复位信号,接地状态等等。 检查JTAG连接是否正确 如果是用户自己设计的电路板,可以使用Debug JTAG GUI软件或者CCS自带的test connection (也在ccxml的advance选项卡中)按钮测试JTAG连接的正确性。 Debug JTAG GUI的下载地址: http://processors.wiki.ti.com/index.php/DBGJTAG_Graphical_User_Interface 深入了解JTAG连接问题 一般的JTAG连接问题都可以通过上述方法解决,如果用户仍然不能解决连接问题或者想深入了解JTAG连接,可以访问下面的地址: http://processors.wiki.ti.com/index.php/Debugging_JTAG_Connectivity_Problems Flash API 常见问题 用户开发自己的bootloader时,或使用Flash模拟EEPROM操作时,都需要使用Flash API函数库。根据芯片自身的Flash类型,用户需要使用不同的Flash API函数库。 Hercules系列MCU主要使用到两种Flash类型(工艺):F035 (130nm) 和 F021 (65nm) F035 Flash API下载地址: http://www.ti.com/tool/f035flashapi F021 Flash API 下载地址: http://www.ti.com/tool/f021flashapi Flash API 同Bank操作问题 无论哪种Flash类型的芯片,在同一个BANK中都不允许同时进行擦除(或写入)和读取的操作。 这意味着,如果用户的Flash API库函数放在BANK0 的任何一个sector中,通过Flash API去擦除(或写入)BANK0的任意一个其他的sector,都会引起程序失去响应。 因为一旦擦除/写入操作开始,整个BANK的电荷泵(charge pump)就开始工作了,以擦除为例,这个操作会进行几个到几十个毫秒的时间,这段时间中,整个BANK的程序都没有办法被CPU读取,那么这么长时间里,CPU的行为就不可确定了,通常现象是系统没有响应。 所以最好的办法是将Flash API和过程代码都放在RAM中运行。 如果用户的Bootloader本身不需要更新,那么把Flash API放在一个不常用的BANK,如BANK2,也是一个变通的方法。 F035 的Delay参数设置 F035的Flash API函数库需要在调用时给定一个合适的delay参数。 设置Delay参数的方法请参考下面文档中的第5节Flash Delay Parameter Values。 http://www.ti.com/lit/pdf/spnu493 F021 Flash API 函数库使用了-gcc选项 将F021 Flash API函数库包含至工程中后,需要将-gcc选项打开才能正常编译。 打开-gcc选项的位置在: CCS的工程上右键, à à à àEnable support for GCC extensions (--gcc) 在CCS编译时生成*.hex文件 如果用户需要在编译时生成*.hex文件,那么可以参考下面的方法: CCS的工程上右键, -- -- -- "Apply predefined Steps" 需要设置 "-romwidth 32"参数。 使用hex470.exe通过命令行生成hex文件。 这个工具在CCS安装好后就出现在CCS的安装路径下了。 具体使用方法请参考: http://www.ti.com/lit/ug/spnu118k/spnu118k.pdf 手册的11节,Hex Conversion Utility Description。 CPU 相关信息寄存器 Hercules系列MCU使用了ARM的Cortex系列CPU。 在调试中,灵活使用CPU的状态寄存器可以大大方便我们查找问题的过程。 但是CPU状态寄存器的描述在TI的技术手册中(TRM)并没有说明。 用户可以到ARM的文档库中找到。 最常用的是: ARMv7架构技术手册(Cortex CPU的指令集描述): http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0403c/index.html (上面的链接需要访问者注册ARM的账户才能访问,有需要的同学也可以站内联系。) Cortex-M3的技术手册(寄存器描述): http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337i/index.html Cortex-R4的技术手册(寄存器描述): http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0363g/index.html 有了上述的文档,我们就可以通过CPU的CP15寄存器组的值来确定CPU的工作状态了。 比如,经常有的用户发现程序跑飞了,暂停时CPU在dataEntry的死循环中,说明CPU出现了非法的操作数据,但是如何去定位这个数据和错误呢? 有了上述手册,我们就可以通过查看CP15寄存器组中的Data Fault Status Register的值来判断了。比如错误状态是b01101,查表得”permission fault”说明访问了不允许访问的区域。 然后,再看Data Fault Address寄存器的地址,就知道原来CPU是访问了这个地址,而这个地址可能在Memory map中是”reserved”的区域。这可能是程序中某个指针赋值错误,或者是堆栈溢出造成的。这样查找问题就变得更方便更准确了。 在CCS V5 中创建一个终端监视器 由于Windows7操作系统中没有附带类似超级终端一样的工具,用户如果想使用终端功能来进行串口调试就必须要通过第三方的软件来完成了。 有时这样会让人感觉比较麻烦。 这里介绍一种在CCS的调试窗口中建立终端监视器的方法。 详细配置可以参考这个链接: http://processors.wiki.ti.com/index.php/How_to_install_the_terminal_plugin_in_CCSv5 在CCS v5的 下拉菜单中选择 。 点击 Available Software Sites 链接,并找到 http://download.eclipse.org/tm/updates/3.3 对应的网站项,在这一项前面打勾。然后点击 返回。 在当前窗口最上方的 下拉菜单中找到刚才添加的网站项,如图所示。选择该网站后,在下面的装口中找到 插件并勾选。按照提示安装这个插件后,重新启动CCS v5。 (CCS v5需要从选中的网站下载所需的插件文件,可能根据网络情况不同,所花时间不同,请耐心等待。) CCS v5重启完成后,还是进入到 下拉菜单中的 点击右上角的 按钮 在弹出的对话框中输入Name: RXTX repository; Location: http://rxtx.qbang.org/eclipse/ 然后选择最新版本的RXTX End-User Runtime (需要展开插件版本树才能看到),安装插件,并在此重启CCS v5 这时,Terminal就安装完成了。 安装好Terminal后,在CCS v5的 下拉菜单中,点击 ,在弹出的菜单中找到Terminal。 选择Terminal并单击 ,CCS的窗口中就会加入一个终端监视器了,使用前,对其进行基本的设置,串口数据就可以在这个窗口中被显示出来,也可以用这个终端向下位机发送数据和命令。