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.

[参考译文] MSP432P401R:PMAP 示例

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/669637/msp432p401r-pmap-example

器件型号:MSP432P401R

我只能找到几个 PMAP 示例、所有这些示例都与 PWM 信号相关。

我注意到 P7是引脚可映射的、除了用于 boosterpack 的 Jx 连接器外、不会连接到 launchpad 上的任何硬件、因此我选择 P7作为我的多总线示例。

假设我这样做:

const uint8_t * myP7map[8]={UCA1TXD、UCA1RXD、 UCB1SDA、UCB.S、UCB2SOMI、 UCB2SIMO、UCB2CLK、UCA2TXD}

MAP_PMAP_CONFIGurePorts ((const uint8_t *) myP7MAP、PMAP_P7MAP、8、PMAP_DISABLE_RECONFIGGENT);

P7->SEL0 = 0xFF;// 如果我理解正确,我必须设置辅助功能

P7->SEL1 = 0x00;

//我不需要设置 DIR,因为以上所有函数都将自动执行该操作。

这是否起作用?

谢谢

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

    与上一篇文章一样、链接器在我的 CCS 安装中仍然反对 driverlib 调用、因此我已经重新编写了这个片段用户寄存器级代码。 以下代码段会进行编译和链接、但我尚未尝试下载并执行它。 这至少会让我进一步了解有关 MSP432的"发现之旅"。

       const uint8_t myP7map[8]={PMAP_UCA1TXD、PMAP_UCA1RXD、PMAP_UCB0SDA、PMAP_UCB.S、PMAP_UCB2SOMI、 PMAP_UCB2SIMO、PMAP_UCB2CLK、PMAP_UCA2TXD};
    //   map_PMAP_configurePorts ((const uint8_t *) myP7map、PMAP_P7MAP、8、PMAP_DISABLE_Reconfiguration); //未链接
       uint8_t i;
       volatile uint8_t * ptr;
       PMAP->keyid = PMAP_keyid_VAL;                 //启用写入访问以修改端口映射寄存器
       ptr =(volatile uint8_t *)(&P7MAP -> PMAP_register[0]);
       对于(I = 0;I < 8;I++)
       {
           * ptr = myP7map[i];
           PTR++;
       }

       PMAP->keyid = 0;                       //禁用写访问以修改端口映射寄存器

       P7->SEL0 = 0xFF;// 如果我理解正确,我必须设置辅助功能... 尚未验证
       P7->SEL1 = 0x00;

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

    David、

     链接器确实不应该是问题。 您是否已从 Resource Explorer 中尝试过 pmap_timera_redirection 示例? 它是否编译/链接?

    对于您尝试使用 PMAP 执行的操作、您仍然需要分配给定的引脚外设模块功能和方向(除了使用 PMAP 指定映射到那里的外设之外)。  (请参阅 《MSP432技术参考手册》第12.2.6节第2段、其中提到需要设置 PxDIR 位)。 使用下面的 driverlib API 调用应该可以为您执行此操作。

    例如,从上面的 timera_redirection 代码中,可以看到:

    const uint8_t port_mapping []=

    //端口 P2:
    PMAP_NONE、PMAP_NONE、PMAP_NONE、PMAP_NONE、PMAP_TA1CCR1A、 PMAP_NONE、
    PMAP_NONE、PMAP_NONE
    };

    //将端口映射到 port_mapping 数组中的值(自动处理 keyid/etc)
    MAP_PMAP_CONFIGurePorts ((const uint8_t *) port_mapping、PMAP_P2MAP、1、
    PMAP_DISABLE_RECONFIGGENT);

    //为给定的端口和引脚设置 PAxSEL 和 PAxDIR
    MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN4、GPIO_PRIMARY_MODULE_Function);

    请告诉我这是否适合您,以及 timera_redirection 示例是否编译正确。

    -Bob L.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的建议、但我想 Ive 会混乱 driverlib 安装、因此在我修复之前、我必须使用寄存器级命令。
    我不理解的一件事是为什么您和 pmap_timera_redirection.c 指定 GPIO_primary_module_function (意味着 SEL0=0、SEL1=0、我假设)、
    其中:
    msp432p401x_portmap_01.c、William Goh 2016使用
    P2->SEL0 = 0xFF; // P2.0 - P2.6端口映射功能
    P2->SEL1 = 0; // P2.0 - P2.6端口映射功能
    如果我了解它的工作原理、它会指定次级函数
    SLAU356E 第11.2.2节规定
    通过将相应的 PxSEL.y 位设置为1、端口引脚本身可从通用 I/O 切换到所选的外设/次级功能。
    正如我所说的,我不熟悉 MSP432 .... 到目前为止、我从未下载/运行过单个程序;我正在准备好所有这些程序。 您比我了解更多、但我现在尝试解决不一致之处、而不是在更昂贵的将来解决。

    此外,我上面的整个示例涉及总线信号、UART、I2C、SPI 和方向是由模块设置的,而不是使用 Px->DIR 设置的。
    感谢你的帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    David、

    您能否发送尝试使用 driverlib 调用进行编译时遇到的错误的屏幕截图?

    -Bob

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

    在我的大型程序中、我为所有 driverlib 调用添加了注释、以便进行处理。 我回放一个、简化者:

       MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_PJ、
       GPIO_PIN3 | GPIO_PIN4、GPIO_PRIMARY_MODULE_FUNCTION);  //用于外设/晶体的引脚

    编译阶段结束时的 CDT 编译控制台输出如下:

    '完工建筑:./main.c'
    '
    '构建目标:HomeNetworkMSP432.Out'
    '调用:ARM 链接器'
    "c:/ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.6.LTS/bin/armcl /ti/ccsv7/ccs_base/arm/include /ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.6.LTS/include -mv7M4 --code_state=16 --float_support=FPv4SPD16 -me --advice:pow="all"--define="_MSP432P401R__--define=ccs -g --gcc ---gobj --warnings=225 ---32p_wrap=off -msp432p_rom-display_info-model -msp432_infot_info-link/msp432_infot_infot_ine-mspature/sp4ategot.ip.ip_infot_ine-msp432_infot_infot_infot_ine-msp/sp432_infot_infot_infot_infot_infot_ine-msp/msp432_infot_infot_infot_infot_infot_infot.ip.ip_infot_infot_infot_ine-msp432_infot/msp/msp432_infot_infot_infot_infot.ipot_infot_infot_infot /ti/ccsv7/tools/compiler/ti-cgt-arm_16.9.6.LTS/lib  


     未定义                                  的首次引用
     符号                                             
     ------                                   --------
     GPIO_setPeripheralModuleFunctionOutputPin ./main.obj      

    错误#10234-D:未解析的符号仍然存在
    备注#10372-D:(ULP 4.1)在此项目中检测到未初始化的端口1。 建议初始化所有未使用的端口、以消除未使用引脚上浪费的电流消耗。
    错误#10010:链接期间遇到错误;未构建"HomeNetworkMSP432.out"
    备注#10372-D:(ULP 4.1)在此项目中检测到未初始化的端口2。 建议初始化所有未使用的端口、以消除未使用引脚上浪费的电流消耗。
    备注#10372-D:(ULP 4.1)在此项目中检测到未初始化的端口3。 建议初始化所有未使用的端口、以消除未使用引脚上浪费的电流消耗。
    … 等等

    a)无法链接 driverlib 函数。 它们编译的事实是否意味着发现了 driverlib 头文件?

    b)每个端口都未初始化... 我不知道这是否是相关故障、但端口已初始化。

    c)在我的示例中,没有人回答我关于 P7端口应使用主要功能还是次要功能的问题。但是,我想,下载并执行后,我很快就会发现。

    感谢您的关注。

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

    你好,Bob Landers 您是否能够弄清为什么 Driverlib 无法链接? 如您所见、它会进行编译。

    谢谢。

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

    David、

     从这里、我建议:

    1.从 下载站点重新安装 SimpleLink MSP432P4 SDK。 (确保选择 MSP432、而不是 MSP432E4)。 确保它已安装在 c:\ti

    我意识到您可能不想执行此操作、因此即使您最初选择不执行步骤1、以下步骤也适用。

    2.在 Project Explorer 窗口中右键点击 CCS 工程并选择"Settings"、检查链接器包含路径

    3.在 Settings 窗口中、选择"ARM Linker->File Search Path"、如下所示。 验证设置是否与此处显示的设置相匹配:

    4.接下来,验证是否已为您的安装正确设置了 SimpleLink Resource 变量。 请查看下图以供参考:

    我强烈建议您完成所有这些步骤、包括重新安装、但无论怎样、您显然有一条损坏的 driverlib 调用路径。  

    此致、

     Bob L.