Тива с неявной функцией
Я пытаюсь построить простой логический анализатор с 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.h и rom_map.h
3 ответа
Вы, вероятно, не определили целевое устройство. Попробуйте добавить что-то вроде -DTARGET_IS_TM4C123_RB1
на ваш Makefile. Это определение необходимо для определения символов ROM_*.
Вы используете комбинацию 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, а затем с префиксом вызовов driverlib MAP_ после того, как узнал, что все работает. Я никогда не возвращался, чтобы удалить мои включения для скомпилированных в библиотеках driverlib. Кажется, инструментальная цепочка достаточно умна, чтобы не компилировать их после того, как я перестал их вызывать. Теперь я хочу попробовать это.
Для ясности, ROM_ или MAP_ вызывает DriverLib-вызовы из встроенного ПЗУ.
Я подозреваю, что вы не уверены, что на самом деле используете код, и что он делает, когда вы смешиваете библиотеки DRM и driverlib. Я НАСТОЯТЕЛЬНО предлагаю вам потратить время, чтобы пройти онлайн-семинар для Tiva C. Это серия коротких видео и лабораторных работ, которые прояснят все это. Я умышленно шел невротически медленно, и это заняло у меня выходные. Вы можете сделать это за день, и это будет хорошо проведенный день. Это спасет вас так много раз. Это немного устарело, поскольку компоновщик кода идет, но это все еще полезно. У меня есть все мои студенты, прежде чем они начнут работать на этой платформе.
http://processors.wiki.ti.com/index.php/Getting_Started_with_the_TIVA™ _C_Series_TM4C123G_LaunchPad
Изменить: да, и, как указывает Витор, вам также нужно это определение.
Я бы рекомендовал использовать "driverlib/gpio.h" и "driverlib/sysctl.h" для конфигурации Pin с устройствами TM4C