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.

[参考译文] CCS/TMDSICE3359:RTOS 驱动程序配置问题

Guru**** 2559190 points
Other Parts Discussed in Thread: SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/608435/ccs-tmdsice3359-rtos-driver-configuration-issue

器件型号:TMDSICE3359
Thread 中讨论的其他器件:SYSBIOS

工具/软件:Code Composer Studio

您好!

我不熟悉 Code Composer、Sitara 和 TI-RTOS。 为了了解如何配置 SO 和 Sitara 外设、我希望创建一个基本程序来编写一条消息、发送 ICE v2 AM335x UART。

我以 SYS/BIOS 最小示例作为项目的起点。 ccs6中的项目配置:

从一开始、我就遇到了大量问题、需要将外设驱动程序添加到项目中。 尽管我包含 了 RTOS 指南中提到的头文件、 但由于'Undefined reference to Board_init'错误、我无法编译。

由于 TI-RTOS 和 Sitara 配置没有太多信息、我需要花一些时间来确定、我不得不在.cfg 文件中添加对驱动程序的引用。 不仅限于指南中提到的那些(板和 UART)、还包括 OSAL 和 CSL 封装。 我通过阅读文章找到了这里!! 没有车间或指南提到这一点!!

加载这些软件包后、由于某些 I2C 和 UART 的"未定义引用"、我仍然有编译问题、在某些时候、这些问题已得到解决。 老实说,我不确定如何... 可能是我将软件包添加到.cfg 文件中的顺序??

读取 此帖子的晶圆 我向 MMU 和高速缓存添加了 sport。

那么、现在 mi .cfg 文件看起来像这样:

/*
 * ==== app.cfg ===========
 *
VAR 默认值= xdc.useModule('xdc.runtime.Defaults');
VAR 诊断= xdc.useModule('xdc.runtime.Diags');
VAR 错误= xdc.useModule('xdc.runtime.Error');
VAR 日志= xdc.useModule('xdc.runtime.Log');
VAR LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
VAR Main = xdc.useModule('xdc.runtime.Main');
VAR SysMin = xdc.useModule('xdc.runtime.SysMin');
VAR 系统= xdc.useModule('xdc.runtime.System');
var text = xdc.useModule('xdc.runtime.Text');
VAR BIOS = xdc.useModule('ti.sysbios.BIOS');
VAR 空闲= xdc.useModule('ti.sysbios.knl.Idle');
/*
 *取消注释此行以全局禁用断言。
 *所有模块继承'库'模块的默认值。  您
 *可以使用 Module.common$按模块覆盖这些默认值。
 *禁用断言将节省代码空间并提高运行时性能。
Defaults.common$.diags_ASSERT = Diags.always_off;
 *
/*
 *取消注释此行以防止模块名称加载到目标上。
 *模块名称字符串放置在.const 段中。 设置此值
 *将参数设置为 false 将节省.const 段中的空间。  误差和
 *断言消息将包含"未知模块"前缀
 实际模块名称的*。
 *
Defaults.common$.namedModule = false;
/*
 *最小化系统中的 EXIT 处理程序数组。  系统模块包括
 *向 System_atexit()注册的函数数数组
 *由 System_exit()调用。
 *
System.maxAtexitHandlers = 4;
/*
 *取消注释此行以禁用错误打印功能。
 *禁用此功能时,我们会丢失错误信息,因为错误是这样
 *未打印。  如果禁用 raiseHook、则会节省一些代码空间
 *由于 Error_print()函数,您的应用程序未使用 System_printf()
 *调用 System_printf()。
error.raiseHook =空;
 *
/*
 *取消注释此行以防止 Error、Assert 和 Log 字符串成为字符串
 *加载到目标上。  这些字符串放置在.const 段中。
 *将此参数设置为 false 将节省.const 段中的空间。
 *错误、断言和日志消息将打印原始 ID 和 args 而不是
 *格式化的邮件。
 *
text.isLoaded = false;
/*
 *取消注释此行以禁用 SysMin 的字符输出
 *程序退出时。  SysMin 向循环缓冲区写入字符。
 *可以使用 ROV 中的 SysMin Output 视图查看该缓冲器。
 *
SysMin。flushAtExit = false;
/*
 * BIOS 模块将为系统创建默认堆。
 *指定此默认堆的大小。
 *
BIOS.heapSize = 0x0;
/*系统堆栈大小(由 ISR 和 Swi 使用)*/
program.stack = 0x400;
System_printf()的/*循环缓冲区大小*/
SYSMIN.bufSize = 128;
/*
 *为整个系统创建并安装记录器
 *
var logerBufParams = new LoggerBuf.Params();
LoggerBufParams.numEntry = 4;
var logger0 = LoggerBuf.create (logerBufParams);
Defaults.common$.logger = logger0;
Main.common$.diags_INFO = Diags.always_on;
System.SupportProxy = SysMin;
/*
 *构建自定义 BIOS 库。  自定义库将小于
 *预构建的"已检测"(默认)和"未检测"库。
 *
 * BIOS.logsEnabled 参数指定是否启用日志记录
 *在 BIOS 中执行此自定义构建。  RTA 和使用了这些日志
 * UIA 分析工具。
 *
 * BIOS.sertsEnabled 参数指定 BIOS 代码是否会
 * include assert()检查。  将此参数设置为"false"将生成
 *建议使用更小、更快的代码、但启用断言
 *早期开发过程中的 assert()检查将捕获大量编程
 *错误(无效参数等)
 *
BIOS.libType = BIOS.LibType_Custom;
BIOS.logsEnabled = false;
BIOS.sertsEnabled = true;
/*========================= 驱动程序配置=================== *
/*加载 OSAL 封装*/
var osType ="tirtos"
VAR OSAL = xdc.useModule('ti.osal.Settings');
OSAL.osType = osType;
/*使用 CSL 封装*/
VAR socType      ="AM335x";
VAR_l = XDC.loadPackage ('ti.CSL');
Csl.Settings.deviceType = socType;
/*加载 UART 软件包*/
VAR UART        = xdc.loadPackage ('ti.drv.uart');
UART.Settings.socType = socType;
/*加载 SPI 包*/
VAR I2C       = xdc.loadPackage ('ti.drv.i2c');
I2C.Settings.socType = socType;
/*加载 GPIO 包*/
VAR GpioPackage = XDC.loadPackage ('ti.drv.GPIO');
GpioPackage.Settings.enableProfiling = true;
/*加载电路板封装*/
VAR 板= XDC.loadPackage ('ti.board');
board.Settings.boardName ="icev2AM335x";
idleFxns[0]=“&UartWriteSomething”;

/*========================= 高速缓存和 MMU 配置=================== *

VAR Cache = xdc.useModule('ti.sysbios.family.arm.a8.Cache');
cache.enableCache = true;

VAR MMU = xdc.useModule('ti.sysbios.family.arm.a8.Mmu');
MM4.enableMMU = true;

/*强制外设部分为不可高速缓存的严格排序存储器*/
VAR 外设 Attrs ={
键入:MMU.FirstLevelDesc_section,//段描述符
TEX:0、
可缓冲:false,//可缓冲
可高速缓存:false,//可高速缓存
可共享:false,//可共享
NoExecute:true,//不可执行
};

/*定义外设所在的1Meg 页的基址。 *
VAR 外设 BaseAddr = 0x44e00400;

/*相应地配置相应的 MMU 页描述符*/
Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
peripheralBaseAddr、
peripheralAttrs);


/*定义外设所在的1Meg 页的基址。 *
VAR 外设 BaseAddr = 0x481a6000;

/*相应地配置相应的 MMU 页描述符*/
Mmu.setFirstLevelDescMeta(peripheralBaseAddr、
peripheralBaseAddr、
peripheralAttrs);

现在、它会进行编译、但仍然无法正常工作。 我已经尝试调试这个问题、但是当主函数调用 Board_init 时、它会给我一个错误、并跳转到 syscalls.c 文件。 我已经尝试在 Board_init 函数内进行调试、但无法在那里设置任何唤醒点、此外、当我要转到定义时、它会转到头文件、而不是定义它的 icev2AM335x.c 文件。
我想它与我的项目配置有关、所以我在这里发布构建输出、mi main.c 文件和它给我的错误。 请帮助我找到我所犯的错误。
这是成功编译时我获得的编译输出:

****项目 pdk_Drivers_Test_ICEv2AM3359的配置调试构建****

"C:\\ti\\ccsv6\\utils\\bin\\gmake"-k all
'生成文件:./app.cfg '
'调用:XDCtools '
"C:/ti/xdctools_3_32_01_22_core/xs "--xdcpath="C:/ti/bios_6_46_04_53/packages;C:/ti/pdk_am335x_1_0_6/packages;C:/ti/uia_2_20_00_02/packages;C:/ti/ccsv6/ccs_base;" xdc.tools.configuro -o configPkg -t GNU.targets.arm.A8F -p ti.platforms.evmAM3359 -r release -c "C:/ti/gcc-arm-none-eabi-4_9-2015q3 "..app.cfg
正在制作 package.mak (由于 package.bld)...
正在为软件包 configPkg 生成接口(因为 package/package.xdc.inc 比 package.XDC 旧)...
从 package/cfg/app_pa8fg.cfg 配置 app.xa8fg ...
正在生成自定义 ti.sysbios 库 makefile ...
链接库 ti.board:./lib/icev2AM335x/a8/release/ti.board.aa8fg
链接库 ti.drv.gpio:./lib/a8/release/ti.drv.gpio.profiling.aa8fg
链接库 ti.drv.i2c:./lib/am335x/a8/release/ti.drv.i2c.aa8fg
链接库 ti.drv.UART:./lib/am335x/a8/release/ti.drv.uart.aa8fg
链接库 ti.csl:./lib/am335x/a8/release/ti.csl.aa8fg
链接库 ti.osal:/lib/tirtos/a8/release/ti.osal.aa8fg
正在开始构建库源...
制作 C:/ti/blink_ICE_test/PDK_Drivers_Test_ICEv2AM3359/src/sysbios/sysbios.aa8fg ...
gmake[1]:输入目录`C:/ti/blink_ICE_test/PDK_Drivers_Test_ICEv2AM3359/src/sysbios
asma8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/IntrinsicsSupport_asm_gnu.asm……
asma8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/TaskSupport_asm_gnu.asm……
asma8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/a8/Cache_asm_gnu.sv7A……
asma8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/a8/Mmu_asm_gnu.sv7A……
asma8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/a8/TimestampProvider_asm_gnu.sv7A……
asma8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/timers/dmtimer/Timer_asm_gnu.sv7A……
asma8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/a8/intcps/Hwi_asm_gnu.sv7A……
asma8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/exc/Exception_asm_gnu.asm……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/BIOS.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/IntrinsicsSupport.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/TaskSupport.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/knl/Clock.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/knl/Idle.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/knl/Intrinsics.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/knl/Queue.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/knl/Semaphore.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/knl/Swi.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/knl/Swi_andn.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/knl/Task.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/a8/Cache.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/a8/Mmu.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/a8/TimestampProvider.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/hal/Cache.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/hal/Core.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/hal/CoreNull.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/hal/Hwi.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/hal/Hwi_stack.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/hal/Hwi_startup.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/timers/dmtimer/Timer.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/a8/ti81xx/TimerSupport.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/gates/GateHwi.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/gates/GateMutex.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/a8/intcps/Hwi.c……
cla8fg C:/ti/bios_6_46_04_53/packages/ti/sysbios/family/arm/exc/Exception.c……
ara8fg arm_intrinsicsSupport_asm_ng.o arm_TaskSupport_asm_ng.o A8_cache_asm_ng.o A8_MMU_asmu_gnu.o A8_TimestampProvider_as_asm_rgng.o dmor_gmtask_ge_ngc.o tincru.o tine_ngam.o tinu.o rfu.o rgam_zh_clu.o tinu.o ngu.h inu.h incru.o h ngam_zh_clu.o h inu.o h inu.o h inu.h inu.o h inu.h inu.h
gmake[1]:离开目录`C:/ti/blink_ICE_test/PDK_Drivers_Test_ICEv2AM3359/src/sysbios
已完成库构建。
cla8fg 封装/cfg/app_pa8fg.c……
'完成构建:./app.cfg '
'
1个弓形活体(copiado)。
正在制作./src/sysbios/sysbios.aa8fg ...
gmake[1]:输入目录'C:/ti/blink_ICE_test/PDK_Drivers_Test_ICEv2AM3359/src/sysbios
gmake[1]:没有为"全部"执行任何操作。
gmake[1]:离开目录'C:/ti/blink_ICE_test/PDK_Drivers_Test_ICEv2AM3359/src/sysbios
'生成文件:./main.c'
'调用:GNU 编译器'
"c:/ti/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-gcc.exe "-c -mcpu=cortex-A8 -mtun=cortex-A8 -March =armv7-a -marm -mfloat-abi=hard -mcpu=neon -Dam3359 -Dicev2AM335x -DSOC_AM335x -DBUILDCFG_MD_UART -i"c:mf-nex"-mpr-md /ti/gcc-arm-none-eabi-4_9-2015q3/arm-none-eabi/include -md -md -md -md -mc"-mc"-mcr -mcr -md -mpru.g"-md -md -md -md -md -md -md -md -md -md -md -md -md -md -md -m @/ti/pdk_am335x_1_0_6/packages
'完工建筑:./main.c'
'
'构建目标:pdk_Drivers_Test_ICEv2AM3359.OUT'
'调用:GNU 连接器'
"c:/ti/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-gcc.exe -mcpu=cortex-A8 -March =armv7-a -marm -mfloat-abi=hard -mfpu=neon -Dam3359 -Dicev2AM335x -DScm_AM335x -DBUILDCFG_MOD_UART -g -gdwarf-3 -gstrict-dwarf-dwl -dwl -dicht -dicht /ti/bios_6_46_04_53/packages/gnu/targets/arm/libs/install-native/arm-none-eabi/lib/fpu -wlm -m-t/cn/semdich-inchinese-t-m.clus-m-m-m-nick-m-m.ldempf-nick-m-m-m-m-m.clus-m-m-m-m-m-m-m.clus-m-m-m-m-m-m.ldempf-nick-m-m-m-m-m-m-m-m.clus-m-m-m-m-m-m-m-m-m-m-m.ldempf-nich-m.ldse-v-m-m.
'完成的构建目标:pdk_Drivers_Test_ICEv2AM3359.OUT"
'

****构建完成****

这是我的 main.c 文件:
/*
 * ==== main.c ======
 *
//---- 默认包括
#include
#include
#include
#include
#include "stdio.h"
#include "stdint.h"
#include "stdlib.h"
#include "string.h"
//---- 我的包括
//板驱动程序
#include
// UART 驱动程序
#include
#include
void UartWriteSomething (void){
UART_printf ("我处于活动状态");
/*
 * ==== main ====
 *
int main()
{  
  /*
   *使用 ROV->SysMin 查看循环缓冲区中的字符
   *
  system_printf ("enter main()\n");
  /*设置 pinmux 和 UART */
  board_initCfg boardCfg;
  boardCfg = Board_init_module_clock | Board_init_PINMUX_config | Board_init_UART_stdio;
  board_init (boardCfg);
  UART_printf ("我处于活动状态");
  BIOS_start();  /*不返回*/
  返回(0);

这是当我在电路板中运行程序时的 ROV 报告:

、emaphoreP_tirtos.c"、第131行:错误{id:0x10000、args:[0x800157a4、0x800157a4]}

 xdc.runtime.Error.raise:终止执行

对正在发生什么情况有什么想法???  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    user4805179、

    对您遇到的问题表示歉意。 为了帮助您继续、我只想指出、PDK 中的 C:\ti\pdk_am335x_1_0_7\packages/MyExampleProjects\UART_BasicExample_evmAM335x_armExampleProject 中有一个 ICEv2 UART RTOS 工程。 默认情况下、该工程不会显示在 PDK 中、必须构建该工程。 有关说明、请访问 processors.wiki.ti.com/.../Rebuilding_The_PDK

    认为这一点有助于解决您在构建过程中遇到的问题、或将该示例用作起点。

    对于培训、不确定您是否已观看此视频 training.ti.com/application-development-using-processor-sdk-rtos 、它提供了使用 Processor SDK RTOS 进行应用开发的指南。

    另请访问 training.ti.com/processor-sdk-training-series 阅读其余的 PRSDK 培训材料

    希望这对您有所帮助。

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的快速响应。

    我已经看过您提到的培训和示例... 它们比我要实现的目标要复杂得多、因此我无法确定哪些模块是我的应用所必需的(只需编写一条传输 UART 的线路)。

    不管怎样、我的程序会在 Board_init 调用中崩溃、这是它首先执行的操作、因此我无法访问 UART 特定的函数... 它调用 syscalls.c 中的_exit (int 代码)函数并中止执行

    能否使用使 Board_init 函数正常工作所需的最小模块发布.cfg 文件???

    我是否必须修改任何特定于电路板的文件?

    我应该考虑一些特别的东西吗??

    是否有任何寄存器可以监控发生的情况?

    为了 使用电路板或 UART 功能、是否需要定义高速缓存和 MMU 配置?

    我确定我在某个地方犯了一个愚蠢的错误、但我完全迷路了...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    用户4805179。

    我已附加在 C:\ti\pdk_am335x_1_0_7\packages\MyExampleProjects\UART_BasicExample_icev2AM335x_armTestProject 创建的 PDK 示例工程、您应该能够将其导入到 CCS 工作区中。 请记住、该项目假定 您在 C:ti\上安装了 pdk_am335x_1_0_7

    还随附了该项目中使用的.cfg 文件。

    我建议您尝试在 MyExampleProjects 的 PDK 中创建示例工程 。 这些示例将是了解示例构建方式的良好起点。

    希望这对您有所帮助。

    Lali

    /cfs-file/__key/communityserver-discussions-components-files/791/UART_5F00_BasicExample_5F00_icev2AM335x_5F00_armTestProject.zip

    /cfs-file/__key/communityserver-discussions-components-files/791/3441.am335x_5F00_app_5F00_icev2am335x.cfg

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答!  

    基于此示例、我添加了一些缺失的包含项、最后它可以正常工作!

    现在、我想使用 UART 作为终端来控制板上的以太网 LED (D1和 D2)。

    为此、我创建了您提到的示例项目、并遵循"GPIO_LedBlink_icev2AM335x_armTestProject"项目。

    该示例在"GPIO_evmAM572x_board.c"文件中设置 LED 代码化、如下所示:

    #define GPIO_USER0_LED_PIN_NUM  (0x10)
    #define GPIO_USER0_LED_PORT_NUM (0x00)
    #define GPIO_User1_LED_PIN_NUM  (0x11)
    #define GPIO_User1_LED_PORT_NUM (0x00)
    /* GPIO 驱动器板特定引脚配置结构*/
    GPIO_PinConfig gpioPinConfigs[]={
      /*启用中断的输入引脚:AM57X_IDK_GRN_LED */
      GPIO_DEVICE_CONFIG ((GPIO_USER0_LED_PORT_NUM + 1)、GPIO_USER0_LED_PIN_NUM)|
      GPIO_CFG_IN_INT_INT_RISING | GPIO_CFG_INPUT、
      /*输出引脚:AM57X_IDK_Yel_LED */
      GPIO_DEVICE_CONFIG ((GPIO_USER0_LED_PORT_NUM + 1)、GPIO_USER0_LED_PIN_NUM)|
      GPIO_CFG_OUTPUT
    };
    并使用如下定义的 ID 来引用它们:
    /*板载 LED 引脚、这些引脚连接到 GPIO 引脚。 *
    typedef 枚举 GPIO_LED{
      USER_LED0 = 0、
      USER_LED1
    }GPIO_LED;
    我有一些问题:

    1. 我假设如果使用 GPIO_DEVICE_CONFIG (GPIO_USER0_LED_PORT_NUM、GPIO_USER0_LED_PIN_NUM)、我将定义 GPIO0_2。 是这样吗?
    2. 为什么 在 gpioPinConfigs 中向 GPIO_USER0_LED_PORT_NUM 添加"+1"?
    3. 为什么在   gpioPinConfigs 中使用相同的端口和引脚编号来定义 USER_LED0和 USER_LED1?  
    4. 如果 USER_LED0 和 USER_LED1呈现相同的 GPIO。 静态配置它作为输入和输出有什么意义? 这是在执行期间将其用作输入/输出的方法吗?

    5. 在哪里可以找到与电路板中其他 LED 相关的引脚和端口号? 我已经检查了原理图和引脚多路复用器、但没有一个将这些 LED 分配给 GPIO1_2 (我想它是在代码中定义的)。  

    再次感谢。

    此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请提供任何反馈?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    user4805179、
    我将研究您的问题。

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很抱歉、回复晚了、在回答之前对问题进行了一些研究。

    代码不是很清楚、所以我会尝试澄清。 +1是由于驱动程序 API 是基于一个驱动程序的。 您可以在 C:\ti\pdk_am335x_1_0_7\packages/ti\drv\gpio\src\v1\gpio_v1.c 中看到、hwAttrs 中有-1U。 这是从 AM57x 等其他平台引入的代码伪影。 我已经提交了一个 TT、以清除 AM335x 源代码中对 AM57x 的任何引用、因为这是令人困惑的。

    您将注意到、1个引脚配置为输入、另1个引脚配置为输出。 不需要、它不要求您配置与输入和输出相同的引脚。 将其中1个引脚配置为输入的原因是 GPIO 闪烁中的中断机制。 这在您的应用中不是必需的;该示例使用此方法来说明 GPIO 以中断闪烁。 该示例的编写方式在配置与输入和输出相同的引脚时令人困惑、我已提交另一个 TT 来解决此问题。

    下面是一段代码片段、可帮助您了解并提供 AM335x ICEv2上 LED 的清晰映射。 请参阅每个映射旁边的注释、了解每个设置所接触的 LED。

    GPIO_icev2AM335x_board.c

    #define GPIO_USER0_LED_PIN_NUM (0x10)//LED D1组 LED_2 -> GPIO0_16
    #define GPIO_USER0_LED_PORT_NUM (0x00)//LED D1组 LED_2 -> GPIO0_16
    
    #define GPIO_User1_PIN_NUM (0x11)/LED
    
    
    组 LED 组0_GPIO_0_GPIO0_GPIO_0_GPIO_0_GPIO0_GPIO_0_GPIO_0_GPIO0_GPIO_0_GPIOR_GPIO1_EN/LED 组#GPIO_0_GPIO_0_GPIO_0_GPIOR_GPIOR_GPIO_EN/GPIO1_EN/GPIO_EN/GPIO1_EN/GPIO_EN/GPIO1_EN/GPIO1_EN/GPIOR_GPIOR_GPIO_EN/GPIOR_GPIOR_GPIO1_EN/GPIOR_GPIO_EN/GPIOR_GPI
    蓝色 LED_3 -> GPIO3_9
    
    #define GPIO_User3_LED_PIN_NUM (0x1E)//LED D2 Red LED_4 -> GPIO1_30
    #define GPIO_User3_LED_PORT_NUM (0x1)//LED D2 Red LED_4 -> GPIO1_30
    
    #define GPIO_User4_LED_NUM-0x20_LED
    (0x1)/GPIO4_LED 指示灯/GPIO4_GPIO_0)/GPIO4_GPIO_0
    
    
    GPIO_USER5_LED_PORT_NUM (0x00)//LED D2 Grn LED_4 -> GPIO0_20
    
    
    /* GPIO 驱动器板特定引脚配置结构*/
    GPIO_PinConfig gpioPinConfigs[]={
    /*启用中断的输入引脚*/
    GPIO_DEVICE_CONFIG ((GPIO_USER0_LED_PORT_NUM + 1)、GPIO_USER0_LED_PIN_NUM)|
    GPIO_CFG_IN_INT_INT_RISING | GPIO_CFG_INPUT、
    
    /*输出引脚*/
    GPIO_DEVICE_CONFIG ((GPIO_User4_LED_PORT_NUM + 1)、GPIO_User4_LED_PIN_NUM)|
    GPIO_CFG_OUTPUT
    };
    

    D1和 D2是 ICEv2 EVM 上的三色 LED。 正如代码片段中的注释所示、它使用不同的 LED 和端口号来映射示例中的不同 LED。

    下面是 ICEv2原理图的屏幕截图、希望 LED 输出引脚。 希望这能解决问题5。 我不知道您从哪里获取 GPIO1_2。 但 LED_4映射到 GPIO1_30、即 D2上的红色 LED。

    Lali