我正在尝试使用TM4c123构建一个简单的逻辑分析器,但是当我使用函数ROM _____时,它似乎是一个错误(隐含功能ROM_ ..)任何人都知道为什么?
例如:
ROM_FPUEnable();
ROM_FPULazyStackingEnable();
// run from crystal, 80 MHz
ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
// enable peripherals
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
// set UART pins
GPIOPinConfigure(0x00000001);
GPIOPinConfigure(0x00000401);
ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
// init PORTB
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIO_PORTB_DIR_R = 0x00;
GPIO_PORTB_DEN_R = 0xff;
// configure uart
ROM_UARTConfigSetExpClk(UART0_BASE, ROM_SysCtlClockGet(), 115200,
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
所有的功能ROM都是错误,为什么?我已经包含了rom.h和rom_map.h
答案 0 :(得分:0)
我建议使用" driverlib / gpio.h"和" driverlib / sysctl.h" 用于TM4C器件的引脚配置
答案 1 :(得分:0)
您可能没有定义目标设备。
尝试在Makefile中添加-DTARGET_IS_TM4C123_RB1
之类的内容。
为了定义ROM_ *符号,必须使用此定义。
答案 2 :(得分:0)
您正在使用driverlib(tivaware)和直接寄存器修改(DRM)的组合。使用一个或另一个,最好是driverlib。
您实际应该使用MAP_调用而不是ROM_。 ROM_已弃用但仍可用于测试。不要将ROM_放在生产代码中。我知道这些例子仍然使用ROM_。
您无论如何都缺少ROM的头文件。如果要使用ROM_,则需要包含driverlib / rom.h。这就是为什么它抱怨隐式函数调用。没有定义对ROM_somethingsomethingdarkside()的任何调用。您还需要包含stdint和stdbool,因为driverlib使用这些c99类型。要使用地图调用,您需要包含driverlib / rom_map.h
您可能还需要包含driverlib / gpio.h,driverlib / sysctrl.h。不确定。我从来没有像你那样混合过的东西,我总是首先使用编译的driverlib进行调试,然后在我知道事情正常工作之后使用MAP_为驱动程序调用前缀。我还没有回去删除我在驱动程序库中编译的包含。在我停止调用它们之后,工具链看起来很聪明,不能编译它们。现在我有点想尝试一下。
要清楚,ROM_或MAP_正在调用片外ROM中的driverlib调用。
我怀疑您不确定您使用的代码到底是什么,以及您通过混合DRM和driverlib库的方式做了什么。我强烈建议您花点时间浏览Tiva C的在线研讨会。这是一系列简短的视频和实验室,将清理所有这些。我故意神经衰弱,这让我度过了一个周末。你可以在一天内完成,这将是一天的好花。它会拯救你很多次。就代码编写者来说,它已经过时了,但它仍然可用。在我们开始在这个平台上工作之前,我让所有学生都通过了。
http://processors.wiki.ti.com/index.php/Getting_Started_with_the_TIVA™_C_Series_TM4C123G_LaunchPad
编辑:是的,正如vitor指出的那样,你也需要定义。