2015-02-15 8 views
0

Я пытаюсь сделать CMSIS UART драйвер пример работы на моем Тыва Launchpad: https://www.keil.com/pack/doc/CMSIS/Driver/html/group__usart__interface__gr.htmlCMSIS UART для Тыва Launchpad

Мой код выглядит следующим образом:

#include "Driver_USART.h" 
#include <cmsis_os.h> /* ARM::CMSIS:RTOS:Keil RTX */ 
#include <stdio.h> 
#include <string.h> 


/* USART Driver */ 
extern ARM_DRIVER_USART Driver_UART0; 

void myUART_Thread(void const *argument); 
osThreadId tid_myUART_Thread; 



void myUSART_callback(uint32_t event) 
{ 
switch (event) 
{ 
case ARM_USART_EVENT_RECEIVE_COMPLETE: 
case ARM_USART_EVENT_TRANSFER_COMPLETE: 
case ARM_USART_EVENT_SEND_COMPLETE: 
case ARM_USART_EVENT_TX_COMPLETE: 
/* Success: Wakeup Thread */ 
osSignalSet(tid_myUART_Thread, 0x01); 
break; 

case ARM_USART_EVENT_RX_TIMEOUT: 
__breakpoint(0); /* Error: Call debugger or replace with custom error  handling */ 
break; 

case ARM_USART_EVENT_RX_OVERFLOW: 
case ARM_USART_EVENT_TX_UNDERFLOW: 
__breakpoint(0); /* Error: Call debugger or replace with custom error handling */ 
break; 
} 
} 

/* CMSIS-RTOS Thread - UART command thread */ 
void myUART_Thread(const void* args) 
{ // static ARM_DRIVER_USART * USARTdrv = &Driver_UART0; 
ARM_DRIVER_VERSION version; 
ARM_USART_CAPABILITIES drv_capabilities; 
char cmd; 


/*Initialize the USART driver */ 
Driver_UART0.Initialize(myUSART_callback); 
/*Power up the USART peripheral */ 
Driver_UART0.PowerControl(ARM_POWER_FULL); 
/*Configure the USART to 4800 Bits/sec */ 
Driver_UART0.Control(ARM_USART_MODE_ASYNCHRONOUS | 
ARM_USART_DATA_BITS_8 | 
ARM_USART_PARITY_NONE | 
ARM_USART_STOP_BITS_1 | 
ARM_USART_FLOW_CONTROL_NONE, 4800); 

/* Enable Receiver and Transmitter lines */ 
Driver_UART0.Control (ARM_USART_CONTROL_TX, 1); 
Driver_UART0.Control (ARM_USART_CONTROL_RX, 1); 

Driver_UART0.Send("\nPress Enter to receive a message", 34); 
osSignalWait(0x01, osWaitForever); 

while (1) 
{ 
Driver_UART0.Receive(&cmd, 1); /* Get byte from UART */ 
osSignalWait(0x01, osWaitForever); 
if (cmd == 13) /* CR, send greeting */ 
{ 
Driver_UART0.Send("\nHello World!", 12); 
osSignalWait(0x01, osWaitForever); 
} 

} 
} 

int main(void){ 
osKernelInitialize(); // initialize CMSIS-RTOS 
osKernelStart(); // start thread execution 


} 

Теперь я не ожидаю, он работает сразу же, однако мой строитель начинает жаловаться на фазу связи, что Driver_UART0 не определен:

. \ Objects \ bl.axf: Ошибка: L6218E: Неопределенный символ Driver_UART0 (ссылка от blinky.o).

Любая идея, что я мог бы сделать, чтобы исправить это?

Спасибо,

Botond

ответ

0

К сожалению TI не поддерживает драйвера API CMSIS в это время. Я работаю над созданием этого API самостоятельно и есть рабочий пример в моем GitHub хранилище:

Это пример: https://github.com/AllAboutEE/ARM-Programming-Examples-TM4C/blob/master/CMSIS-Driver-Examples/UART-CMSIS-Driver/main.c

Вы должны установить ваш путь включить в опциях проекта в этой папке: https://github.com/AllAboutEE/ARM-Programming-Examples-TM4C/tree/master/inc

добавить также файлы в этой папке для вашего проекта: https://github.com/AllAboutEE/ARM-Programming-Examples-TM4C/tree/master/src

, а также этот файл https://github.com/AllAboutEE/ARM-Programming-Examples-TM4C/blob/master/startup_LM4F.s

+0

Большое спасибо! Позвольте мне попробовать и вернуться к вам! – Botond

+0

Эй вам не нужно добавлять команды для включения линий TX и RX, то есть ptrUSART-> Control (ARM_USART_CONTROL_TX, 1); ptrUSART-> Control (ARM_USART_CONTROL_RX, 1); , как показано на https://www.keil.com/pack/doc/CMSIS/Driver/html/group__usart__interface__gr.html –