/ BGM111

BGM111 UART Ausgabe mit Hilfe des Treibers UARTDRV

Seid gegrüßt Freunde,

heute eine kurze Anleitung, wie man den UART Treiber "UARTDRV" für verschiedene Module von Silicon Labs in ein Projekt einbindet.
Da einige Leute Schwierigkeiten damit haben, wie beispielsweise hier, zeige ich welche Dateien dem Projekt hinzugefügt werden müssen und wie die erste Ausgabe erfolgen kann.

In diesem Beispiel werde ich die Bluetooth SDK 2.8 verwenden. Als Erstes erstelle ich ein IBeacon Beispielprojekt.

Nun müssen die folgendenen Dateien in unser Project kopiert werden:

/opt/SimplicityStudio_v4/developer/sdks/gecko_sdk_suite/v2.2/platform/emlib/inc/em_leuart.h
/opt/SimplicityStudio_v4/developer/sdks/gecko_sdk_suite/v2.2/platform/emlib/inc/em_ldma.h
/opt/SimplicityStudio_v4/developer/sdks/gecko_sdk_suite/v2.2/platform/emlib/src/em_leuart.c
/opt/SimplicityStudio_v4/developer/sdks/gecko_sdk_suite/v2.2/platform/emlib/src/em_ldma.c

und die folgenden Ordner:

/opt/SimplicityStudio_v4/developer/sdks/gecko_sdk_suite/v2.2/platform/emdrv/uartdrv/src
/opt/SimplicityStudio_v4/developer/sdks/gecko_sdk_suite/v2.2/platform/emdrv/dmadrv/
/emdrv/gpiointerrupt/src

Anschließend muss noch der Pfad zu dmadrv/inc gesetzt werden. Die Header Dateien der Treiber gpiointerrupt und uartdrv sind bei dem Beispiel automatisch hinzugefügt worden.
Properties-->C/C++ General-->Paths and Symbols
im Tab Includes drücken wir auf Add. Hier Setzen wir die Häkchen bei Add to all configurations und bei Add to all languages
SL-A-NodeFound

und drücken auf Workspace. Hier wählen wir unser Projekt aus und klicken uns zu PROJECT/platform/emdrv/dmadrv/inc
SL-A-NodeFound

So nun haben wir alle benötigten Dateien hinzugefügt und wir können den Quellcode anpassen. Der folgende Code ist von der Dokumentation des Treibers.

#include "uartdrv.h"
// Define receive/transmit operation queues
DEFINE_BUF_QUEUE(EMDRV_UARTDRV_MAX_CONCURRENT_RX_BUFS, rxBufferQueue);
DEFINE_BUF_QUEUE(EMDRV_UARTDRV_MAX_CONCURRENT_TX_BUFS, txBufferQueue);
// Configuration for USART0, location 11
#define MY_UART                                     \
{                                                   \
  USART0,                                           \
  115200,                                           \
  _USART_ROUTELOC0_TXLOC_LOC11,                     \
  _USART_ROUTELOC0_RXLOC_LOC11,                     \
  usartStopbits1,                                   \
  usartNoParity,                                    \
  usartOVS16,                                       \
  false,                                            \
  uartdrvFlowControlHwUart,                         \
  gpioPortA,                                        \
  4,                                                \
  gpioPortA,                                        \
  5,                                                \
  (UARTDRV_Buffer_FifoQueue_t *)&rxBufferQueue,     \
  (UARTDRV_Buffer_FifoQueue_t *)&txBufferQueue,     \
  _USART_ROUTELOC1_CTSLOC_LOC11,                    \
  _USART_ROUTELOC1_RTSLOC_LOC11                     \
}
UARTDRV_HandleData_t handleData;
UARTDRV_Handle_t handle = &handleData;
uint8_t buffer[64];
void callback(UARTDRV_Handle_t handle,
              Ecode_t transferStatus,
              uint8_t *data,
              UARTDRV_Count_t transferCount)
{
  (void)handle;
  (void)transferStatus;
  (void)data;
  (void)transferCount;
}

Es muss lediglich die Locations angepasst werden. Diese können dem Datenblatt des jeweiligen Moduls entnommen werden.

Wir initialisieren den Treiber noch vor der while Schleife und den Events.

void main(void) {
  ...
  // Initialize driver handle
  UARTDRV_InitUart_t initData = MY_UART;
  UARTDRV_InitUart(handle, &initData);
  ...
  while(1) {
    ...

Und nun kann eine Ausgabe mit UARTDRV_Transmit ausgeführt werden

UARTDRV_Transmit(handle, "Seid gegrüßt\r\n", 14, callback);

So das war es auch schon.

Viele Grüße
Arthur

BGM111 UART Ausgabe mit Hilfe des Treibers UARTDRV
Share this