This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我前几天下载了C2000,导入了一个280025的例程epwm_ex2_updown_aq,下载到RAM里运行正常,但是下载到ROM提示成功但没有反应,不出波形。在线调试,发现问题好像是SysCtl_setClock(DEVICE_SETCLOCK_CFG)这句话导致的,注释掉这句话,可以出波形,但PWM频率完全不准。然后我尝试打开SysCtl_setClock定义,只在sysctrl.h中找到了extern bool SysCtl_setClock(uint32_t config)这句,还是看不到这个函数到底怎么执行的。请问贵方能否提供解决办法或者给一些建议,非常感谢!!
你好,首先要确认一下,你是如何将程序设置为下载到rom的?以及,你的硬件是否能确认可以正常输出PWM?
因为一般来说TI提供的例程都不会有什么大问题,一般是使用的时候设置或者硬件出问题的比较常见。
准确的说是用28002x_generic_ram_lnk.cmd时正常,用示波器可以看到正常的PWM波形;用28002x_generic_flash_lnk.cmd把程序写进去后,拿掉仿真器则不能出波形。程序好像是SysCtl_setClock(DEVICE_SETCLOCK_CFG)这句话导致的,注释掉这句话,可以出波形,但PWM频率完全不准。我今天找到了SysCtl_setClock函数的程序,在sysctl.c中,这个文件不在工程文件夹中,在c2000中,工程通过include将C:\ti\c2000\C2000Ware_3_04_00_00\driverlib\f28002x\driverlib都包含进去了,不知道为什么不行,请贵方提供点帮助,非常感谢!
你是手动将cmd文件从ram.cmd更换为flash.cmd的吗?有没有试过编译的时候点击小锤子旁边的倒三角,在里面切换编译模式为CPU1_FLASH?
你提到的那句代码是用来设置PLL锁相环和时钟分频,也就是用来设置芯片主频的,不应该注释掉。
对,我是通过设置exclude from build手动将cmd从ram.cmd更改为flash.cmd,我用28335也都是这么用的,这个例程这样操作不行是么?那我在编译里模式改位CPU1_FLASH就可以了么?那句代码肯定是不应该注释掉的,那是我为了查明原因临时注释掉的。
是的,你可以看一下项目属性中的Predefined Symbols,如果只是exclude/include from build的话Pre-define NAME中不会出现_FLASH,对应的程序中的这段代码就不会参与编译
#ifdef _FLASH
//
// Copy time critical code and flash setup code to RAM. This includes the
// following functions: InitFlash();
//
// The RamfuncsLoadStart, RamfuncsLoadSize, and RamfuncsRunStart symbols
// are created by the linker. Refer to the device .cmd file.
//
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
//
// Call Flash Initialization to setup flash waitstates. This function must
// reside in RAM.
//
Flash_initModule(FLASH0CTRL_BASE, FLASH0ECC_BASE, DEVICE_FLASH_WAITSTATES);
#endif
因为新例程大多会设置预编译,还有其他地方一些预编译的地方也是如此。
谢谢您的回复,我按找您的说法操作,程序下进flash还是不能正常出波形。带着仿真器运行也没有波形,暂停则提示:no source available for" SysCtl_delay() at .........workspace_v10\epwm_ex2_updown_aq\CPU1_FLASH\epwm_ex2_updown_aq.out:{3} 0xc057{4}.
请问我这是什么问题?
谢谢你的回答。问题现象是,选择RAM方式,用不用仿真器都可以出波形,选择flash用不用仿真器都不行。发现在用flash单步调试,遇到SysCtl_delay()就走不动了,暂停就提示就是no source available for SysCtl_delay()..,我现在把程序中所有遇到SysCtl_delay()的地方全部注释掉,程序就可以写进flash了,也可以正常发出波形了。所以请教下,这个SysCtl_delay()的问题可能出现在哪里?
你好,因为一般情况例程都是经过多次调试修改才发布的,所以不会有问题。我今天在我的TI开发板上也进行了这个例程的ram和flash烧写测试,测试结果也验证了这个例程是可以正常运行的,烧写、运行、退出仿真等等都没有出现你的问题。
所以我这边建议
1、你的C200WARE是否已经是最新版本4.01?如果不是的话可以尝试更新最新版本
2、尝试一下其他例程(推荐是gpio_ex2_toggle.c例程,因为控制GPIO口翻转的最方便观测),如果其他例程也有类似的问题,那可能就是你的板子问题,比如晶振
3、不知道你对例程是否做过修改?如果有的话把修改的地方说明一下
1.我用的CCS10,最开始下的C2000 4.1版本用不了,现在用的3.4版本。2.我例程我确实改动过,但就是把中断注释掉了,然后把PWM模块的初始值改了,只发送固定的PWM波。
// Interrupt_enable(INT_EPWM1);
// Interrupt_enable(INT_EPWM2);
// Interrupt_enable(INT_EPWM3);
至于板子硬件问题,找了很久也没有发现哪里有问题,但至少晶振应该没问题吧,晶振有问题芯片不能工作吧