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.

[参考译文] 编译器/EK-TM4C129EXL:#1965不能打开源文件"inc/hw_memmap.h"

Guru**** 2482105 points
Other Parts Discussed in Thread: TM4C129ENCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/711990/compiler-ek-tm4c129exl-1965-cannot-open-source-file-inc-hw_memmap-h

器件型号:EK-TM4C129EXL
主题中讨论的其他器件:TM4C129ENCPDT

工具/软件:TI C/C++编译器

我已经尝试导入 C:\ti\TivaWare_C_Series-2.1.3.156\examples\peripherals\SSI 上的.c 文件。   我已经通过 Project properties (项目属性)-> ARM Compiler (ARM 编译器)-> Include options (包含选项)包含了头文件、但仍然无法修复以下错误。  

 

#1965无法打开源文件"inc/hw_memmap.h"

 

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

    a)请升级到最新的 TivaWare 版本2.1.4.178

    b)请发布 CCS 工程属性设置的屏幕截图、以便我了解您是如何包含这些文件的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ralph、

         我已经安装了最新版本的 Tivaware 2.1.4.178、并尝试调试代码、仍然发现代码有一些问题。这些是错误...

    #include 
    #include 
    #include "inc/hw_memmap.h"
    #include "driverlib/gpio.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/ssi.h"
    #include "driverlib/sysctl.h"
    #include "utils/uartdio.h"
    #include "utils/uartdio.h"
    
    
    //
    //! \addtogroup SSI_examples_list
    //! 

    SPI 主器件(SPI_MASTER)

    //! //! 此示例展示了如何将 SSI0配置为 SPI 主设备。 代码将 //! 在主 Tx 上发送三个字符、然后轮询接收 FIFO、直到 //! 在主 Rx 上接收3个字符。 //! //! 此示例使用以下外设和 I/O 信号。 您必须 //! 查看这些内容并根据您自己的董事会需要进行更改: //! - SSI0外设 //! - GPIO 端口 A 外设(用于 SSI0引脚) //! SSI0Clk - PA2 //! - SSI0Fss - PA3 //! - SSI0Rx - PA4 //! - SSI0Tx - PA5 //! //! 以下 UART 信号仅配置为显示控制台 //! 消息。 SSI0的运行不需要这些。 //! - UART0外设 //! - GPIO 端口 A 外设(用于 UART0引脚) //! - UART0RX - PA0 //! - UART0TX - PA1 //! //! 此示例使用以下中断处理程序。 要使用此示例 //! 在您自己的应用程序中、您必须将这些中断处理程序添加到 您的//! 矢量表。 //! -无。 //// ***************** // // //要发送和接收的字节数。 //// ***************** #define NUM_SSI_DATA 3 //********* // //此函数将 UART0设置为用于控制台,以便 在示例运行时显示信息//。 //// ***************** void InitConsole (void) { // //启用用于 UART0引脚的 GPIO 端口 A。 // TODO:将其更改为您正在使用的 GPIO 端口。 // SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); // 为端口 A0和 A1上的 UART0功能配置引脚复用。 //如果您的器件不支持引脚复用、则无需执行此步骤。 // TODO:更改此选项以选择您正在使用的端口/引脚。 // GPIOPinConfigure (GPIO_PA0_U0RX); GPIOPinConfigure (GPIO_PA1_U0TX); // 启用 UART0以便我们可以配置时钟。 // SysCtlPeripheralEnable (SYSCTL_Periph_UART0); // 使用内部16MHz 振荡器作为 UART 时钟源。 // UARTClockSourceSet (UART0_BASE、UART_CLOCK _PIOSC); // 为这些引脚选择备用(UART)功能。 // TODO:更改此选项以选择您正在使用的端口/引脚。 // GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1); // 初始化控制台 I/O 的 UART // UARTStdioConfig (0、115200、16000000); } //********* // //在主 Freescale (SPI)模式下配置 SSI0。 此示例将发出 // 3个字节的数据,然后等待3个字节的数据进入。 这将全部由 //使用轮询方法完成。 //// ***************** int main (void) { #if defined (target_IS_TM4C129_RA0)||\ defined (target_IS_TM4C129_RA1)||\ defined (target_IS_TM4C129_RA2) uint32_t ui32SysClock; #endif uint32_t pu32DataTx[target_is_u32_RA2] ;uint32 u_u_u32_u_uatr/ uintu32_u_u32_u/uu32u/u/u32u/u/u32uu/u/uu/u32u/u/uintu/u/u/u/u32u/u/u // TODO:必须更改 SYSCTL_XTAL_值以匹配 电路板上//晶体的值。 // #if defined (target_IS_TM4C129_RA0)||\ defined (target_IS_TM4C129_RA1)||\ defined (target_IS_TM4C129_RA2) ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz)|\SysSet_OSC_SYSC_UST_SYSC_UST_SYSC_UST_SYSC_UST_SC_UST_SYSC_UST_SYSC_UST_SC_UST_SSC_UST_SYSC_SET_UST_SYSC/ #SYSC_UST_SYSC_UST_SYSC_SC_UST_SYSC_UST_SYSC_SC_UST_SYSC_UST_SYSC_UST_SYSC_SC_SET_UST_SYSC/#SYSC_UST_SYSC/ 这只是 针对这个示例程序的//、而不是 SSI 操作所需的。 // InitConsole(); // 在控制台上显示设置。 // UARTprintf ("SSI ->\n"); UARTprintf ("模式:SPI\n"); UARTprintf ("数据:8位\n"); // 必须启用 SSI0外设才能使用。 // SysCtlPeripheralEnable (SYSCTL_Periph_SSI0); // 对于此示例,SSI0与 Porta[5:2]一起使用。 实际使用的端口和引脚//在您的器件上可能不同、请参阅数据表了解更多 //信息。 GPIO 端口 A 需要启用、以便可以使用这些引脚。 // TODO:将其更改为您正在使用的 GPIO 端口。 // SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); // 为端口 A2、A3、A4和 A5上的 SSI0功能配置引脚复用。 //如果您的器件不支持引脚复用、则无需执行此步骤。 // TODO:更改此选项以选择您正在使用的端口/引脚。 // GPIOPinConfigure (GPIO_PA2_SSI0CLK); GPIOPinConfigure (GPIO_PA3_SSI0FSS); GPIOPinConfigure (GPIO_PA4_SSI0RX); GPIOPinConfigure (GPIO_PA5_SSI0TX); // 配置 SSI 引脚的 GPIO 设置。 此功能还将 这些引脚的//控制提供给 SSI 硬件。 请参阅数据表来 //查看每个引脚分配的函数。 //引脚按如下方式分配: // PA5 - SSI0Tx // PA4 - SSI0Rx // PA3 - SSI0Fss // PA2 - SSI0CLK // TODO:更改此选项以选择要使用的端口/引脚。 // GPIOPinTypeSSI (GPIO_Porta_base、GPIO_PIN_5 | GPIO_PIN_4 | GPIO_PIN_3 | GPIO_PIN_2); // 为 SPI 主控模式配置和启用 SSI 端口。 在 //飞思卡尔 SPI 模式、主控模式、1MHz SSI 频率和8位数据中使用 SSI0、//系统时钟电源、空闲时钟低电平和低电平有效时钟。 //对于 SPI 模式,可以在 SSI //单元空闲时设置 SSI 时钟的极性。 您还可以配置要 //捕获数据的时钟边沿。 有关 //不同 SPI 模式的更多信息、请参考数据表。 // #if defined (target_Is_TM4C129_RA0)||\ defined (target_Is_TM4C129_RA1)||\ defined (target_is_TM4C129_RA2) SSIConfigSetExpClk (SSI0_BASE、ui32SysClock、SSI_FRF_MOTO_MODE_0、SSI_MASTER、1000000 、SSI_MODE、SSI_MODE 8); #else SSIConfigSetExpClk (SSI0_BASE、SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_MODE_0、 SSI_MODE_MASTER、 1000000、8); #endif // //启用 SSI0模块。 // SSIEnable (SSI0_BASE); // 从 SSI 端口读取任何残留数据。 这样可确保接收 // FIFO 为空,因此我们不会读取任何不需要的垃圾。 这是在这里完成 //因为 SPI SSI 模式是全双工的,允许您 同时发送和//接收。 SSIDataGetNonBlocking 函数在 返回数据时返回//"true"、在未返回数据时返回"false"。 //“非阻塞”函数检查接收 FIFO 中是否有数据//如果没有数据,则不会“挂起”。 // while (SSIDataGetNonBlocking (SSI0_BASE、&pui32DataRx[0]) { // //初始化要发送的数据。 // pui32DataTx[0]="S"; pui32DataTx[1]='p'; pui32DataTx[2]='I'; // 显示 SSI 正在传输数据的指示。 // UARTprintf ("已发送:\n "); // //发送3个字节的数据。 // for (ui32Index = 0;ui32Index < NUM_SSI_DATA;ui32Index++) { // 显示 SSI 正在传输的数据。 // UARTprintf ("'%c'"、pui32DataTx[ui32Index]); // 使用"blocking" Put 函数发送数据。 此函数 //将等待发送 FIFO 中有空间后再返回。 //这使您可以确保发送的所有数据都将其放入 //发送 FIFO 中。 // SSIDataPut (SSI0_BASE、pui32DataTx[ui32Index]); } // //等待 SSI0完成传输发送 FIFO 中的所有数据。 // while (SSIBusy (SSI0_BASE) ){ } // 显示 SSI 正在接收数据的指示。 // UARTprintf ("\n 接收:\n "); // //接收3个字节的数据。 // for (ui32Index = 0;ui32Index < NUM_SSI_DATA;ui32Index++) { // //使用“阻止”GET 函数接收数据。 此函数 //将等待接收 FIFO 中有数据后再返回。 // SSIDataGet (SSI0_BASE、&pui32DataRx[ui32Index]); // 由于我们使用的是8位数据,因此屏蔽 MSB。 // pui32DataRx[ui32Index]&= 0x00FF; // 显示 SSI0接收到的数据。 // UARTprintf ("'%c'"、pui32DataRx[ui32Index]); } // 返回无错误 // return (0); }

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

    啊,就是我所怀疑的。 您将包含"inc"、"driverlib"和"utils" TivaWare 文件夹的链接、但这不是正确的方法。

    您应该只连接主 TivaWare 文件夹。

    对#include "inc/hw_memmap.h"的调用只需要 TivaWare 主文件夹。 就是转到 C:\ti\TivaWare_C_Series-2.1.4.178并将/inc/hw_memmap.h 附加到其中、以创建 C:\ti\TivaWare_C_Series-2.1.4.178/inc/hw_memmap.h 的完整目录

    但是、按照您的设置方式、它将查找以下内容、但未找到它:C:\ti\TivaWare_C_Series-2.1.4.178\inc/inc/inc/hw_memmap.h

    换而言之、您需要删除 Include Options 中 TivaWare 的3个文件夹链接、并将其替换为 C:\ti\TivaWare_C_Series-2.1.4.178

    请进行建议的调整、然后查看您的项目是否编译。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ralph、

        这些 "inc"、"driverlib"和"utils"错误都消失了、但我遇到了一个无法修复的新错误。 该错误的屏幕截图可以是、

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

    您好!

    感谢供应商的 Ralph -您即将到达...   您所使用的示例代码似乎是针对"不太复杂(可能较旧)的供应商 MCU"和"这一事实"的、说明了您当前的错误。

    请注意、文件 'pin_map.h' (正确)包含这些引脚'定义。   这些定义与您(过去)使用的代码不同。

    对于   "所有 TM4C 器件"、文件"pin_map.h"很大-因为它在"基于单个 MCU"的情况下通过承载引脚定义进行充电。

    // TM4C129ENCPDT 端口/引脚映射定义

    //

    #ifdef PART_TM4C129ENCPDT

    #define GPIO_PA4_U3RX      0x00001001

    #define GPIO_PA4_T2CCP0     0x00001003.

    #define GPIO_PA4_I2C7SCL    0x00001002

    #define GPIO_PA4_SSI0XDAT0   0x0000100F       请注意(过去) "GPIO_PA4_SSI0RX"中的更改


    #define GPIO_PA5_U3TX      0x00001401

    #define GPIO_PA5_T2CCP1     0x00001403

    #define GPIO_PA5_I2C7SDA    0x00001402

    #define GPIO_PA5_SSI0XDAT1   0x0000140F      请注意(过去)"GPIO_PA5_SSI0TX"的变化

    [CB1] 可能存在"直至其他" 这种"细微冲突"。    这种"深度"进入"pin_map.h" (现在在这里)应该 "支撑您"-"放置 任何隐藏/剩余的龙。。。"

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

    这是 PIN_MAP。 H 文件、

    因尺寸过大而被移除

    此处的引脚映射保持不变。  

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

    我删除了 pin_map.h 复制粘贴、它超过了10k 行、对于 E2E 来说太长了。

    然后、CB1的表述是完全正确的。

    GPIO_PA4_SSI0RX 和 GPIO_PA5_SSI0TX 定义适用于 TM4C123x 处理器

    GPIO_PA4_SSI0XDAT0和 GPIO_PA5_SSI0XDAT1定义适用于您使用的 TM4C129x 处理器。

    如果您在 pin_map.h 文件中搜索这两组定义、您将自行看到这种情况。

    该示例是在 TM4C123x 处理器上开发的。

    我会将129x 的不匹配记录为错误、以便我们可以考虑添加 ifdefs、以避免将来的混淆。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    哦,拉尔夫 因此、我想在海报的"PIN_MAP.h"文件演示文稿中单击"类似"。
    尽管-这里的大多数人(尤其是)会(滚动到痛苦的结尾)这么大的文件!

    请注意、我(曾尝试)引导此海报说明 必须"滚动到他的 MCU - w/in pin_map.h!"    这是不确定的——“他是否采用了这种纪律!”   请注意、还解释了"他过去的代码可能"针对"较旧和/或功能较差的 MCU -。   (在我的帖子中...  然后跟随/放大您的。)   

    我不知道如何改进我的:

    // TM4C129ENCPDT 端口/引脚映射定义

    #ifdef PART_TM4C129ENCPDT

    #define GPIO_PA4_U3RX      0x00001001

    #define GPIO_PA4_SSI0XDAT0   0x0000100F       请注意(过去) "GPIO_PA4_SSI0RX"中的更改

    颜色编码-锚定-详细说明-似乎没有引起他的注意...

    显然、"巨大的绿色"是您的、也是一个小的绿色-应该到达我的"喜欢"的家门口...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为缺少的唯一细节是确认 #define 从123x 更改为他正在使用的129x、而不仅仅是您的演示文稿是郊区、这就是为什么我只选择您的黄色点击帖子、我可以将其作为对客户的建议。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    “还会” (但不会太多) ——我的“迷住”心!    ( "不是"粗鲁"的员工"补货" - 即使在" 超级"奖授予之后、 也不可能很快调暗...)

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

     您好 CB1_MOBILE 和 Ralph,

           我已经进行了上述更正、PIN_MAP 问题现在已修复、但我遇到了新错误、我不知道该错误。

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

    'SPI_Test'是您的视在项目的名称-(花了一段时间-但我"得到了。")    

    此 IDE 报告的这3个"最新"错误不是特别有用-它们是吗?   这些 最新的3个错误是否出现在其他地方- 有 (部分) 可用的详细信息?

    Fior/I 采用"PRO IDE - IAR"、因此我没有 "用于和/或体验" 仅提供供应商...

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

    这些错误的描述性不够强、无法让我了解错误发生的情况。 尽管我猜您会有两个*_ccs.c 文件或两个.cmd 文件等重叠文件