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

OMAPL138 ARM侧裸机无法运行

新建的一个hello world工程,CCS10版本,编译器是TI V20.2.3.LTS,程序编译通过后,进调试模式,用调试器能正确链接ARM目标,下载代码后,就马上显示In Reset,电机暂停按钮,就显示如下信息

ARM9_0: Trouble Halting Target CPU: (Error -2062 @ 0x14C3) Unable to halt device. Reset the device, and retry the operation. If error persists, confirm configuration, power-cycle the board, and/or try more reliable JTAG settings (e.g. lower TCLK). (Emulation package 9.2.0.00002)

这个是工程配置没有正确,还是哪里的问题啊,DSP侧的裸机跑的好好的,ARM侧这个问题,试了很多次,都这样

Shine:

请问是自己的板子么?target configuration file里面有没有选择ARM GEL文件?

,

user18914063:

买的开发板,合众志达的板子,GEL文件加载了的

,

Shine:

试一下例程是不是可以加载?如果不能加载的话,可能要联系开发板厂家看看是不是硬件问题。

,

user18914063:

问题基本定位出来了,测试代码中我要用到GPIO,然后初始化了系统控制寄存器,代码如下
//———————————————
//GPIO 管脚复用配置,选择引脚功能
//GPIO0_0,0_1,0_2,0_5分别对应PCB上4个LED
//———————————————
void Pin_Function_Select(void)
{SYSCFG0Regs.KICK0R = 0x83E70B13;SYSCFG0Regs.KICK1R = 0x95A4F1E0;
SYSCFG0Regs.PINMUX1.bit.PINMUX1_31_28 = 8;//GPIO0_0SYSCFG0Regs.PINMUX18.bit.PINMUX18_31_28 = 8;//GPIO8_10SYSCFG0Regs.KICK0R = 0x0;SYSCFG0Regs.KICK1R = 0x0;
}
以上是我自己编写的寄存器位域结构体,结构体最终在CMD文件里声明的,和C2000的那种完全一样。程序里只要调用了这个初始化函数,一加载.out文件程序不进main,程序跑飞。同样的这个结构体,我改成指针形式,如下
//———————————————
//GPIO 管脚复用配置,选择引脚功能
//GPIO0_0,0_1,0_2,0_5分别对应PCB上4个LED
//———————————————
void Pin_Function_Select(void)
{SYSCFG0Regs->KICK0R = 0x83E70B13;SYSCFG0Regs->KICK1R = 0x95A4F1E0;
SYSCFG0Regs->PINMUX1.bit.PINMUX1_31_28 = 8;//GPIO0_0
SYSCFG0Regs->PINMUX18.bit.PINMUX18_31_28 = 8;//GPIO8_10SYSCFG0Regs->KICK0R = 0x0;SYSCFG0Regs->KICK1R = 0x0;
}
则程序不会跑飞,调试模式下,加载了.OUT文件后能进main函数。进main函数后,我在寄存器观察窗口查看了SYSCFG0寄存器,发现映射的内存空间和手册上的对比都是一致的,说明寄存器位域结构体应该是没任何问题的,但是SYSCFG0Regs->PINMUXxxx这些寄存器显示红色,无法读取其内容,本来上面那个函数是让GPIO引脚复用成GPIO功能,然后相应的IO口配置为输出模式,我打断点发现对应的IO口寄存器状态确实改变了,然而拿逻辑分析仪查看IO口却无任何动作,所以怀疑是SYSCFG0配置不成功,然后我直接在GEL文件里面配置SYSCFG0,代码如下
OnTargetConnect( )
{Clear_Memory_Map();Setup_Memory_Map();
PSC_All_On_Full_EVM();Core_300MHz_mDDR_150MHz();Wake_DSP();DEVICE_kickUnlock();/*寄存器解锁*/PINMUX1= 0x80000000;/*GPIO功能*/PINMUX18= 0x80000000;/*GPIO功能*/DEVICE_kicklock();/*寄存器上锁*/
}
这样配置后,GPIO初始化成功了,IO口电平状态能完全受代码控制
综上,我分析一开始程序跑飞,是因为在位域结构体环境下访问寄存器SYSCFG0Regs.PINMUXxxx寄存器时,可能没有获取相应的权限或者别的什么原因,导致的程序跑飞,然后改成指针形式后,部分获取了访问权限,所以能部分访问SYSYCFG0寄存器的内容。如果是这样的话,那我该如何操作能正确的访问SYSCFG0的所有寄存器呢,特别是要在位域结构体的形式下访问

赞(0)
未经允许不得转载:TI中文支持网 » OMAPL138 ARM侧裸机无法运行
分享到: 更多 (0)