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.

C6748 BOOT SET疑问,无法用仿真器debug



各位好,

我已经按照BOOT SET要求,将BOOT0配置为0,BOOT1~BOOT4配置为1,BOOT5~BOOT7配置为0,为仿真器调试模式。

现在程序希望将GPIO6[7]配置为低电平输出。按照例程,进行修改,CCS并没有任何报错等异样,经测试,JTAG也已经连接到板子。可是下载后并没有任何变化,好像没有下载到DSP里。

请问这个是为什么?谢谢各位了。

我的代码如下:

#include "hw_types.h"               // 宏命令
#include "hw_syscfg0_C6748.h"       // 系统配置模块寄存器
#include "soc_C6748.h"              // DSP C6748 外设寄存器
#include "hw_pllc_C6748.h"
#include "psc.h"                    // 电源与睡眠控制宏及设备抽象层函数声明
#include "gpio.h"                   // 通用输入输出口宏及设备抽象层函数声明

// 外设使能配置
void PSCInit(void);
// GPIO 管脚复用配置
void GPIOBankPinMuxSet(void);
// GPIO 管脚初始化
void GPIOBankPinInit(void);
void InitPLL(void);
int main(void)
{
 InitPLL();
 // 外设使能配置
 PSCInit();
 // GPIO 管脚复用配置
 GPIOBankPinMuxSet();
 // GPIO 管脚初始化
 GPIOBankPinInit();
 {
  GPIOPinWrite(SOC_GPIO_0_REGS, 104, GPIO_PIN_LOW);
 }while(1);

}
void PSCInit(void)
{
 // 使能 GPIO 模块
 // 对相应外设模块的使能也可以在 BootLoader 中完成
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
}
/****************************************************************************/
/*                                                                          */
/*              GPIO 管脚复用配置                                           */
/*                                                                          */
/****************************************************************************/
void GPIOBankPinMuxSet(void)
{
 unsigned int savePinmuxDATA;
 HWREG(SOC_SYSCFG_0_REGS +SYSCFG0_KICK0R)=SYSCFG_KICK0R_UNLOCK;
 HWREG(SOC_SYSCFG_1_REGS +SYSCFG0_KICK1R)=SYSCFG_KICK1R_UNLOCK;
 savePinmuxDATA=(HWREG(SOC_UPP_0_REGS +SYSCFG0_PINMUX(14)))&
      ~(0x0000000Fu);
 HWREG(SOC_UPP_0_REGS +SYSCFG0_PINMUX(14))=
      (0x00000008u|savePinmuxDATA);
 HWREG(SOC_SYSCFG_0_REGS +SYSCFG0_KICK0R)=0x12121212u;
 HWREG(SOC_SYSCFG_1_REGS +SYSCFG0_KICK1R)=0x12121212u;
}
/****************************************************************************/
/*                                                                          */
/*              GPIO 管脚初始化                                             */
/*                                                                          */
/****************************************************************************/
void GPIOBankPinInit(void)
{
 // 配置 LED 对应管脚为输出管脚
    // OMAPL138 及 DSP C6748 共有 144 个 GPIO
 // 以下为各组 GPIO BANK 起始管脚对应值
    // 范围 1-144
 // GPIO0[0] 1
    // GPIO1[0] 17
 // GPIO2[0] 33
    // GPIO3[0] 49
 // GPIO4[0] 65
    // GPIO5[0] 81
 // GPIO6[0] 97
 // GPIO7[0] 113
 // GPIO8[0] 129
    GPIODirModeSet(SOC_GPIO_0_REGS, 104, GPIO_DIR_OUTPUT);  // GPIO6[7]
}
void InitPLL(void) //对每个需要的模块输出相应的时钟频率,主时钟频率保持在456MHz
{
 static unsigned int templ;
     HWREG(SOC_SYSCFG_0_REGS +SYSCFG0_KICK0R)=SYSCFG_KICK0R_UNLOCK;
     HWREG(SOC_SYSCFG_1_REGS +SYSCFG0_KICK1R)=SYSCFG_KICK1R_UNLOCK;
     //解除SYS寄存器的Lock
     templ=HWREG(SOC_SYSCFG_0_REGS+SYSCFG0_CFGCHIP0)&
       ~(SYSCFG_CFGCHIP0_PLL_MASTER_LOCK );//这里只需对于PLL0进行修改
     HWREG(SOC_SYSCFG_0_REGS+SYSCFG0_CFGCHIP0)=
       (0x00000000|templ);
     templ=HWREG( SOC_PLLC_0_REGS+PLLC_PLLCTL)&
        ~(PLLC_PLLCTL_PLLPWRDN);
     HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)=
       (0x00000002|templ);//将PLL POWER 供电切断
     templ=HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)&
       ~(PLLC_PLLCTL_CLKMODE);
     HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)=
       (0x00000000|templ);//配置clk mode 晶振作为时钟输入
     templ=HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)&
       ~(PLLC_PLLCTL_PLLENSRC);
     HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)=
       (0x00000000|templ);//clear PLLENSRC
     templ=HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)&
       ~(PLLC_PLLCTL_EXTCLKSRC);
     HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)=
       (0x00000000|templ);//晶振作bypass时钟
     templ=HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)&
       ~(PLLC_PLLCTL_PLLEN);
     HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)=
       (0x00000000|templ);

     templ=HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)&
       ~(PLLC_PLLCTL_PLLRST);
     HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)=
       (0x00000000|templ);
     templ=HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)&
       ~(PLLC_PLLCTL_PLLPWRDN);
     HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)=
       (0x00000000|templ);
     templ=HWREG(SOC_PLLC_0_REGS+PLLC_PLLM)&
       ~(PLLC_PLLM_PLLM);
     HWREG(SOC_PLLC_0_REGS+PLLC_PLLM)=
       (0x00000012|templ);//M=19
     templ=HWREG(SOC_PLLC_0_REGS+PLLC_PREDIV)&
       ~(PLLC_PREDIV_PREDEN);
     HWREG(SOC_PLLC_0_REGS+PLLC_PREDIV)=
       (0x00008000|templ);
     templ=HWREG(SOC_PLLC_0_REGS+PLLC_PREDIV)&
       ~(PLLC_PREDIV_RATIO);
     HWREG(SOC_PLLC_0_REGS+PLLC_PREDIV)=
          (0x00000000|templ);// 除法器使能
     templ=HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)&
       ~(PLLC_PLLCTL_PLLRST);
     HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)=
       (0x00000008|templ);//将PLL带出RST
     //数据手册之中应该等待的时间
     templ=HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)&
       (PLLC_PLLCTL_PLLEN);
     HWREG(SOC_PLLC_0_REGS+PLLC_PLLCTL)=
       (0x00000001|templ);
     templ=HWREG(SOC_SYSCFG_0_REGS+SYSCFG0_CFGCHIP0)&
            ~(SYSCFG_CFGCHIP0_PLL_MASTER_LOCK );//这里只需对于PLL0进行修改
     HWREG(SOC_SYSCFG_0_REGS+SYSCFG0_CFGCHIP0)=
            (0x00000010|templ);
     HWREG(SOC_SYSCFG_0_REGS +SYSCFG0_KICK0R)=0x12121212u;
     HWREG(SOC_SYSCFG_1_REGS +SYSCFG0_KICK1R)=0x12121212u;
}
DEBUG时候我的CCS界面如下:
  • View --> Disassembly看一下反汇编窗口里有没有你的代码。

  • 你好,请问你用过CCS3.3调试过C672X吗?

  • 您好,

    debug结束之后,进行反汇编,是有代码的,如图所示:

    但是运行之后,就没有代码了。

    还有个问题想请教一下,我刚刚发现,我的不可屏蔽中断管脚是悬空的,请问是这个会造成无法下载的情况吗?

    谢谢您了。

  • 有可能会影响的。手册上要求是拉高的。

    If NMI is unused, it should be pulled-high externally through a 10k-ohm resistor to supply DVDD3318_B.

     

  • 您好,

    我刚刚更改了电路,加入了不可屏蔽中断的拉高,还是那个问题。

    我现在的疑问是,CCS是否连接上了DSP,因为并没有报错,console也是正常显示,反汇编也运行到了最后的for循环之中,但是我的板子上并没有任何变化,显示的状态依然是上电后的的初始样子,这个难道能说明我的程序已经下载到了DSP里吗?我感觉它并没有进入到DSP之中。但是不知道是为什么CCS没报错。

    以下是运行时候的状态:

    依然谢谢您了。

  • 如果CCS里看到程序在运行的话,说明程序已经下载到DSP里了。

    你可以试试写条printf指令,看CCS有没有显示打印信息。 

    另外,你的板子应该有什么反应?是不是你程序要实现的功能本身没写对?

  • 谢谢您的回复,

    确实是下载到DSP之中了,但是当时就是无法显示正确的现象。后来我烧写到flash之中,就可以显示了,但是我发现不用配置BOOT SET就可以仿真或者从flash中读,也是挺奇怪的。

  • Yao Heinz 说:
    但是我发现不用配置BOOT SET就可以仿真或者从flash中读,也是挺奇怪的。

    连接仿真器进行调试与Boot mode设置成emulation mode是两回事。

    任何boot mode下都要可以连仿真器进行调试。

    emulation mode只是不让芯片ROM的boot loader运行相应的初始化程序,以维持芯片在默认上电后的状态。比如当选择NOR flash boot mode,芯片上电后会配置相应的PINMUX使能EMIFA,而emulation mode下则什么都不会配置的。