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.
工具/软件:Code Composer Studio
我刚刚收到一个在 基于 F28M35x controlCARD 的设计中使用 F28M35H52C 的新 PCB、但一些 GPIO 已经被移动。 我正在尝试让一个简单的闪烁程序运行(我使它在 F28M35x controlCARD 上工作)、但我无法让 LED 闪烁。 到目前为止、我所做的是:
我将 blinky_dc_c28和 blinky_dc_m3程序加载到 CC7中、并能够对其进行编译
然后、我创建了自己的 my_pinout.h 文件、其中包含一个 LED 的替代#define 语句...
#define DS_LED_0_DIR_REG GpioG1CtrlRegs.GPADIR.bit.GPIO29
#define DS_LED_0_DAT_REG GpioG1DataRegs.GPADAT.bit.GPIO29
请注意、我在前面添加了"DS_"、对这些语句的更改是 GPIO70更改为 GPIO29、并抛出错误提示 GPIO29在 GPCD 中没有 GPIO29、因此我查找了它并将 GPCD 更改为 GPCA、然后更改了 LED…… 针对 LED0的语句连接到我自己的 DS_LED…… blinky_dc_C28中的语句 、这些语句需要编译代码。
3.我能够将 M3和 C28代码加载到我的新板中。
4.然后,我使用了 debug>conctocard.ccxml 对话框,能够连接到两个内核并控制它们都运行,但我的 LED 不闪烁。 我将 GPIO29输出引脚设置为低电平、 我限定了 X1/X2引脚的范围、并看到一个干净的20MHz 时钟信号。
我想我需要做的是创建我自己的 set_pinout.h 文件、其中重新定义了我的所有 GPIO 和外设、但现在我怀疑还有更多变化、以便切换每个 GPIO 引脚-我很感激提供一些指导。 也许我需要创建一个新的 targetconfiguration.ccxml 文件吗? 我使用了这个想法、但看不到如何使.ccxml 文件拥有示例程序。
TED
我花了更多的时间来查看这一点、问题可能出在引脚权限的设置上。
基本上、我要做的就是更改标准双核闪烁程序、将 GPIO29 (PE5)用作从 GPIO70 (PC6)引脚示例程序中驱动 LED0的输出。
在 blinky_dc_c28.c 中、我更改了以下内容
第46行和第48行重新引用了 LED_0_DIR_REG 和 LED_0_DAT_REG、因此我查找了这些定义并发现它们位于 F28M35x_set_pinout.h 中、因此我修改了以下引用:
//#define LED_0_DIR_REG GpioG1CtrlRegs.GPCDIR.bit.GPIO70
//#define LED_0_DAT_REG GpioG1DataRegs.GPCDAT.bit.GPIO70
#define LED_0_DIR_REG GpioG1CtrlRegs.GPADIR.bit.GPIO29
#define LED_0_DAT_REG GpioG1DataRegs.GPADAT.bit.GPIO29
注意原始行已注释掉。
LED_0_DAT_REG 在 for (;;)循环中再次引用、因此我认为 c28程序就是这样。
----
在 blinky_dc_m3.c 程序中、我进行了以下更改...
104至114行是指 LED_0_Periph、LED_0_BASE 和 LED_0_PIN、它们在 set_pinout_f28m35x.h 中定义、我修改如下:
//
//用于用户 LED 的 GPIO
//
//#define LED_0_Periph SYSCTL_Periph_GPIOC
#define LED_0_PERIPh SYSCTL_PERIPH_GPIOE // TM GPIO29为 PE5
//#define LED_0_BASE GPIO_PORTC_BASE
#define LED_0_BASE GPIO_Porte _BASE
//#define LED_0_PIN GPIO_PIN_6
#define LED_0_PIN GPIO_PIN_5
#define LED_1_PERIPh SYSCTL_PERIPH_GPIOC
#define LED_1_base GPIO_PORTC_BASE
#define LED_1_PIN GPIO_PIN_7
请注意、我已对原始行进行了注释
blinky_dc_m3.c 程序将 LED_0的控制提供给第109行的 C28内核、如下所示:
//为端口 C 引脚6提供 C28控制
GPIOPinConfigureCoreSelect (LED_0_BASE、LED_0_PIN、GPIO_PIN_C_CORE_SELECT);
但是、对 set_pinout_f28m35x.h 所做的更改应注意以下事实:我的 LED0位于 GPIO29而不是 GPIO70上
blinky_dc_m3.c 的其余部分继续设置 LED3并使该 LED 闪烁、但这不应影响我的程序。
我试过它、它不起作用。 我确信我的 LED 状态良好、并以正确的方式连接-阳极连接到 GPIO29、阴极通过150欧姆电阻接地。
我重新加载了所有内容、并重新从头开始进行更改、以确保我没有在文件中弄乱任何内容。 仍然不奏效。
我被卡住了
谢谢、客户现在已经承认这个芯片可能已经过压-也许高达12伏。 我将更换 PCB 上的芯片。
安装了新处理器、它完全相同。 我会一直看着、想从头开始编写代码、但这令人沮丧。
我认为我对 CCS 环境设置的理解有问题。 我可以让我的板运行、但只能在特定 的操作序列下运行。 如果您可以查看下面我的屏幕截图、我有双路闪烁示例、该示例实际上已设置回标准设置、并且我已将 LED 连接到 GPIO71 (此外、我还能够使用示波器探测 GPIO70) 无论如何、当我使它运行时、我可以看到两个都在"闪烁"、但我只能通过执行以下步骤使它运行:
1.单击工具栏上的调试按钮或项目1:Blinky_dc_m3 -然后告诉我正在加载程序 blinky_dc_m3.out
然后、我在调试窗口中看到2个内核、M3已连接但已挂起、C28已断开连接
然后、我运行 M3部分、显示为"正在运行"(C28显示为"已断开连接")
然后、我右键单击 C28行并选择连接目标、然后看到 C28内核显示为"已暂停"
5.在选择了 C28部分的情况下,我单击运行按钮,两个内核随后显示正在运行,GPIO 端口开始闪烁-在此步骤之前两个内核都不闪烁
6.然后我可以点击停止按钮、退出 CCS 会话中的调试、但硬件在 LED 闪烁的情况下保持运行
7.如果我对 PCB 进行下电上电、则它不会启动(闪存)(无论 XDS100V2是否已连接都无关紧要
我认为代码运行后、每当硬件上电时、代码都会启动。 我还认为我应该通过选择其中一个.ccxml 文件来运行-我尝试创建自己的文件、但它不起作用、 当我加载项目时、也不会出现这种情况、即 Concerto Card.ccxml -这些文件似乎加载和控制内核、但当我暂停它们时、它们显示为"正在运行"、处理器内核似乎处于空闲状态。
您能不能从该描述中说明我的错误? 如果您希望我做进一步的测试、请告诉我。
这可能是问题、硬件设计人员没有在引导引脚上提供上拉或下拉-是否有其他方法可以设置这些引脚、或者我是否可以将引导引脚重新分配给其他 GPIO?
更新了。 客户意识到他们给了我一个旧的原型芯片、于是他们给我一个修订版1芯片、我将这个芯片换至 PCB 上。 现在、我应该能够将电阻器焊接到未使用的引脚以实现缺失的引导模式引脚、并且、鉴于这是一次性(OTP)操作、我想获得一些有关如何执行此操作的指导。
参考手册(spruh22h.pdf)在第539页上说明... "要将默认引导模式引脚更改为 GPIOx、请在相应的位字段中对 GPIOx+1进行编程。"
我知道我需要将(GPIOx+1)数字编程到 Bmode1、2、3、4寄存器中、但我该怎么做? 是在 CCS 中完成的吗?
提前感谢。
因此、我现在安装了一个替换版本1芯片、这意味着我应该能够将引导模式引脚分配给备用 GPIO 引脚; 我意识到、要将默认引导模式引脚更改为 GPIOx、我需要在 BMODE_Pinx 引脚的相应位字段中对 GPIOx+1进行编程 、但我该怎么做? 它是通过 Code Composer Studio 实现的吗?
提前感谢。
谢谢、我不理解"使用链接器"的建议。 您的意思是、我只需将 pragma 语句添加到代码中、然后刷写器件即可?
我将#pragma 语句添加到我的 C 文件中、然后进行构建、我的额外行如下所示
#pragma DATA_SECTION (TedsVariable、".TedsNewSection")
无符号长整型 TedsVariable = 0x48474645;
我很确定我需要做的是将0x48474645存储到位置0x680824中、从而使 GPIO71、70、69、68分别成为引导引脚4、3、2、1 -任何可以确认的人、请执行此操作。
我意识到我需要打开和编辑链接器文件以添加指令、告诉它将我的新变量存储在哪里、并且建议我先在 RAM 或闪存位置中测试它。
我的问题是、在 CCS 中、我可以在哪里找到、打开和编辑链接器文件?
谢谢。
Chris、
我运行的是 CCS 7.2、我使用的是双 Blinky M3示例(我的 PC 上的默认安装位置)、所附图片显示了选项对话框中的页面、请确认我认为 C:\ti\controlSUITE\device_support\f28m35x\V210\Mware\cm\cmF28M35x_generic_m3文件需要编辑 linker.cmd。
有人建议我使用0x680824以外的其他位置来首次测试、我可以写入数据并查看其写入情况、然后再尝试使用 OTP、 我进入了处理器 f28m35h52c.pdf 的数据表、 在第156页的存储器映射部分中、有一个从0068 0818 - 0070 00FF "已恢复"的块、这让我担心在没有其他更改的情况下写入将不起作用。 此外、您能否建议一个区域从哪个区域中选择一个用于测试写入的地址?
Chris、
我今天查看了实际的链接文件、这是存储器部分...
内存 { INTVECS (rwx):origin = 0x20000000,length = 0x01B0 C0 (rwx) :origin = 0x200001B0,length = 0x1E50 C1 (rwx) :origin = 0x20002000、length = 0x2000 BOOT_RSVD (RX):origin = 0x20004000,length = 0x0900 C2_1 (rwx) :origin = 0x20004900,length = 0x0700 RESETISR (rwx):origin = 0x20005000,length = 0x0008 C2_2 (rwx) :origin = 0x20005008、length = 0x0FF8 C3 (rwx) :origin = 0x20006000、length = 0x2000 CTOMRAM (RX) :origin = 0x2007F000,length = 0x0800 MTOCRAM (rwx):origin = 0x2007F800,length = 0x0800 OTPSECLOCK :origin = 0x00680800,length = 0x0004 OTP_Reserved1:origin = 0x00680804,length = 0x0004 OTP_Reserved2:origin = 0x00680808,length = 0x0004 OTP_Z2_FLASH_START_ADDR :origin = 0x00680C,length = 0x0004 OTP_EMACID :origin = 0x00680810,length = 0x0008 OTP_Reserved3:origin = 0x00680818,length = 0x0004 Customer_OTP_MAIN_OSC_CLK_FREQ :origin = 0x0068081C,length = 0x0004 OTP_Reserved4:origin = 0x00680820,length = 0x0004 OTP_BOOT_MODE_GPIO_configure :origin = 0x00680824,length = 0x0004 OTP_Reserved5:origin = 0x00680828,length = 0x0004 OTP_Entry_point:origin = 0x0068082C,length = 0x0004 OTP_Reserved6:origin = 0x00680830,length = 0x0010 }
请注意,在这里有一个"otp_boot_mode_gpio_configure:origin = 0x00680824,length = 0x0004",所以我不能只在主代码中写入类似这样的内容。
OTP_BOOT_MODE_GPIO_configure = 0x48474645;
请提供建议。
嗯、它不起作用。
我添加了名为 TedsVariable 的变量、为其分配了所需的值、并编辑了.cmd 文件、使其存储在 TedsNewSection 中。 我尝试运行该程序、没有错误。 因此、我在未连接 CCS 的情况下重新启动、发现代码未运行。 重新连接后、我尝试查看0x680824的内容或 TedsVariable 的内容、但我似乎无法在 Debug watch 窗口中看到任何变量... sigh
现在、我只想查看位于0x680824处的 OTP 引导模式寄存器的内容
在我看到的某个地方、有一个闪存配置 GUI 工具、这可能有帮助吗?
TED、
在 CCS 中、连接并调试器件时、您是否尝试了内存浏览器(View->Memory Browser)?
编辑:如果不编辑通过目标配置文件加载的 GEL 文件,您可能无法在内存窗口中看到它。 您可能正在使用 GEL "f28m35h52c_m3.gel"。 如果您进入 CCS 安装-> CCS_base ->仿真-> GEL 并找到此文件。 使用文本编辑器打开、并将第113行更改为:
GEL_MapAddStr (0x680C、 0、0x00100、 "R"、 0); /* OTP 组1应用2 *
保存并重新启动 CCS、它现在应该在 MEMORY 窗口中可见。
另外、请注意、此位置具有 ECC、请在 TRM 的"6.5.6 M-Boot ROM User OTP"中阅读更多信息。
此致
Chris
我编辑了.gel 文件、现在我可以看到存储器的内容、0x680824包含0xFFFFFFFF、因此很明显、我的代码不允许将值写入 OTP。 我会继续尝试。
TED、
[引用 USER="Ted Mawson 3.0">您确定下面的#pragma 语句会导致将值0x48474645写入到我的变量中吗?
#pragma DATA_SECTION (TedsVariable、".TedsNewSection")
无符号长整型 TedsVariable = 0x48474645;[/引用]
以上内容将不起作用。 相反、它所做的是声明一个全局变量并将其放置在.tedsNewSection 中、然后运行时初始化代码将尝试在程序到达 main 之前初始化该变量、它将不起作用。
尝试向变量中添加"const"、然后查看变量是否发生变化。
或
您可以执行此用户在以下帖子中所做的操作
pragma RETAIN (BOOT_OTP)
#pragma LOCATION (BOOT_OTP、0x00680824);
const unsigned long boot_otp = 0x21212121;
希望这对您有所帮助。
此致
Santosh Athuru
Santosh、
谢谢、我让它对 OTP 进行编程。
只需在变量声明前面加上"const"就不起作用、但您刚才以正确的值(对于我而言) 0x48474645发布的3行是成功的、我的 F28M35H52C 本身也无法运行。
TED、
感谢您的确认。 如果您在项目进展时有任何其他问题或反馈、请使用论坛。
此致
Santosh Athuru