|
|
Codebase für LPC1xxx
[Bearbeiten] Codebase für LPC11xx und LPC13xxFür die Cortex-M0 und -M3 Familien existieren verschiedene Basispakete die als Startausstattung sehr gut geeignet sind. Auf microbuilder.eu findet man eine sehr interessante Version inklusive Dokumentation. Neben weiteren, interessanten Infos findet man dort eine Beta-Version 0.8 für den LPC1114 vom 14. April 2012 (auch wenn dort 2011 steht!) und eine Beta-Version 1.1.1 für den LPC1343 vom 14. April 2012. (Achtung: die aktuellste Version findet sich immer unter dem dort auch gezeigten "github"-Link) Die Original-Dokumentation kann auf der rechten Seite unter "Code Base/Documentation" angewählt werden. Natürlich können die Funktionen die unter LPC1343 gesammelt werden auch für z.B. den LPC1313 eingesetzt werden, jedoch könnte das Ergebnis beim ansprechen von eigentlich nicht vorhandener Peripherie unvorhersehbar sein. Der hier folgende Text ist zum gegenwärtigen Zeitpunkt (Januar 2012) im Wesentlichen eine Übersetzung der Seite von microbilder.eu [Bearbeiten] Allgemeine Informationen zum Aufbau der Code BaseDer Aufbau der Dateien wird am Beispiel für den weiter fortgeschrittenen Stand zur LPC13xx Familie beschrieben, sollte aber weitgehend auch für den LPC1114 anwendbar sein. Die Beispiele der Code-Base beziehen sich auf ein Referenzboard von "microbuilder.eu" das hier verfügbar ist. Download des im Folgenden beschriebenen Code-Packages als github-Zip hier... immer als aktuellste Version Ziel ist, auf dem aktuellen Stand aufzusetzen, bereits vorhandene Grundfunktionen zu erweitern und neue hinzuzufügen, Mitarbeit ist herzlich willkommen.
[Bearbeiten] LizenzDer Author, microBuilder SARL, hat seine Libs unter eine "modifizierte BSD-Lizenz gestellt", die Nutzung und Modifikation erlaubt, sofern der in jedem File enthaltene Paragraph zur Lizenzbeschreibung erhalten bleibt. Details sind aus jedem beliebigen File der Code Base zu entnehmen. [Bearbeiten] Unterstütze Peripherieeinheiten(Stand Januar 2012)
[Bearbeiten] Enthaltene Treiber für externe HW(Stand Januar 2012)
[Bearbeiten] Struktur der Code Baseoder "wo finde ich was" Die LPC1343 Code Base hat - nach einiger Gewöhnungszeit - einen recht einfachen Aufbau:
[Bearbeiten] LPC134x.hUm den Umgang mit der Code Base so einfach wie möglich zu machen wurde ein neues Header-File erzeugt. Obwohl bereits diverse Header-Files für den LPC1343 existieren war der Wunsch die sogenannten "magic-numbers" im Code zu eliminieren. Daher wurde ein "eigenes" erzeugt. Die 134x.h Datei enthält daher für fast jedes Bit das gesetzt oder gelöscht werden kann auch eine entsprechende Definition. Es bedeutet natürlich einen großen Arbeitsaufwand all diese Informationen in ein Header-File zu pakcen, das Resultat ist jedoch ein einfach lesbarer Code, speziell wenn jemand Anderer ihn geschrieben hat. Was sind diese "Magic Numbers"? Unter "Magic Numbers" versteht man hier den Zugriff auf ein Register ohne "define" also die direkte Angabe einer Zahl in beliebigem Format. Klar, die Eingabe ist kürzer und erzeugt den gleichen Code, aber welche Zeile ist wohl ein halbes Jahr später einfacher zu lesen??
[Bearbeiten] projectconfig.h"projectconfig.h" enthält diverse Aufzählungen die innerhalb eines Projektes benutzt werden wie eine Übersicht über die verwendeten Pins, die CPU_Clock, die Zeit für den System-Tick, Baudraten, SSP, USB, ...
[Bearbeiten] Core Peripherie (core/...)Alle Funktionen zum initialisieren der internen Peripherie sowie ein kleines Beispiel ist im Verzeichnis "core" enthalten.
[Bearbeiten] External Hardware (drivers/...)Jeden Code, der mit der externen Hardware irgendwie interagiert findet man im Verzeichnis "drivers". [Bearbeiten] Core/CPUDie maximale Taktfrequenz des LPC1343 ist 72MHz. Beim Start-Up ist automatisch die max. Taktfrequenz (72MHz), und ein externer Quarz mit 12MHz eingestellt. (Der LPC13xx enthält auch einen internen 12MHz Oszillator, der aber nicht so genau wie ein externer Quarz sein kann. Für USB ist die Genauigkeit definitiv nicht ausreichend.) Um den Stromverbrauch zu minimieren werden alle Pins auf GPIO und "Eingang" gesetzt. Der interne Pull-Up Widerstand ist dabei immer in "pull up" Modus. Dies bedeutet, daß alle Pins nach dem Start der CPU auf "High" gesetzt sind. Um diese Voreinstellungen zu ändern muß cpuInit entsprechend angepaßt werden.
[Bearbeiten] cpuInitvoid cpuInit (void) Initialisiert die System-Taktfrequenz, auf max. Speed (12MHz x 6 = 72MHz)und benutzt einen externen Quarz als Taktquelle. Dies sollte die erste Funktion sein, die ausgeführt wird, da sich die CPU sonst nicht wie erwartet verhalten wird. Alle Pins sind auf GPIO mit aktiviertem internen Pull-up gesetzt. Übergabeparameter: Keine
[Bearbeiten] cpuGetDeviceIDcpuDeviceID_t cpuGetDeviceID (void) Liest die CPU-ID aus Übergabeparameter: Keine Rückgabewert: cpuDeviceID_LPC1311, cpuDeviceID_LPC1313, cpuDeviceID_LPC1342, cpuDeviceID_LPC1343 oder cpuDeviceID_Unknown
[Bearbeiten] Core/ADCDer LPC1343 enthält einen 8-Kanal, 10-Bit Analog/Digital Wandler (ADC), der zwischen 0 und 3,6V messen kann. (Achtung: Vcc - meist 3,3V - nicht überschreiten. Jeder Kanal kann separat, oder alle 8 Kanäle nacheinander im 'Burst' Mode gewandelt werden. Derzeit ist der 'Burst' Mode nicht in SW umgesetzt.
[Bearbeiten] adcInitvoid adcInit (void)=== Initialisiert den A/D Konverter und Konfiguriert die Kanäle 0..3 für 10-Bit. Übergabeparameter: Keine
[Bearbeiten] adcReaduint32_t adcRead (uint8_t channelNum) Diese Funktion startet eine AD-Wandlung für einen einzigen Kanal (0..7) und gibt das Ergebnis zurück (0..1023). Übergabeparameter: * uint8_t channelNum: Der Kanal [0..7] der abgetastet werden soll
0, wenn ein Überlauf entsteht, ansonsten ein 10-Bit Wert der das Ergebnis der Wandlung enthält. Warnung: In adcInit werden nur die Kanäle 0..3 als AD-Wandler Input konfiguriert.
[Bearbeiten] Core/GPIOGPIO (General Purpose Input/Output) bezeichnet einen digitalen Ein-/Ausgang (I/O). JederPin kann unabhängig von Anderen beliebig als Eingang oder als Ausgang konfiguriert werden. Zusätzlich kann jeder GPIO Pin am LPC13xx als externer Interrupt Eingang konfiguriert werden. Wenn sich ein Pegel an einem solchen Pin ändert wird. Zusätzlich besitzt jeder GPIO einen internen Widerstand, der sowohl als Pull-up, als Pull-down oder als Repeater konfiguriert werden kann. Dieser interne Widerstand ist auch abschaltbar. Details hierzu bitte im Datenblatt nachschlagen. Dieser Widerstand sorgt nicht nur für eine Verringerung der erforderlichen Bauteile für so ein System, er erhöht außerdem die Flexibilität, erfordert aber auch mehr Sorgfalt bei der Pinkonfiguration
[Bearbeiten] gpioInitvoid gpioInit (void) Initialisiert GPIO und schaltet den GPIO interrupt handler für alle GPIO Ports ein. Übergabeparameter: Keine
[Bearbeiten] gpioSetDirvoid gpioSetDir (uint32_t portNum, uint32_t bitPos, gpioDirection_t dir) Setzt die Richtung (input/output) für einen bestimmten Port Pin. Übergabeparameter: * portNum: die gpio Port Nummer [0..3] * bitPos: die Bit Position für den gpio pin [0..11] * dir: die Pin Richtung (gpioDirection_Input or gpioDirection_Output)
[Bearbeiten] gpioSetValuevoid gpioSetValue (uint32_t portNum, uint32_t bitPos, uint32_t bitVal) Setzt einen Wert für einen bestimmten Port Pin (nur relevant, wenn eder Pin als Ausgang konfiguriert wurde). Übergabeparameter: * portNum: die gpio Port Nummer [0..3] * bitPos: die Bit Position für den gpio pin [0..11] * bitVal: Enthält den neuen Pegen high (1) oder low (0).
[Bearbeiten] gpioGetValueuint32_t gpioGetValue (uint32_t portNum, uint32_t bitPos) Liest einen bestimmten Port Pin aus. Übergabeparameter: * portNum: die gpio Port Nummer [0..3] * bitPos: die Bit Position für den gpio pin [0..11]
1 wenn der Pin gerade high, oder 0 wenn der Pin gerade low ist. Warnung: Alle GPIO Pins des LPC1343 haben interne Pull-up/Pull-down widerstände die beliebig konfiguriert werden können. By default, schaltet der LPC1343 nach dem Reset die pull-up Widerstände an den meisten Pins EIN. Hintergrund dieser Vorgehensweise ist, daß der Stromverbrauch geringer ist, wenn die Pins einen definierten Pegel haben, statt zu "floaten". Dies hat jedoch den Nachteil, daß der zurückgelesene Pegel nicht unbedingt mit dem erwarteten Pegen zu tun haben muss.
[Bearbeiten] gpioSetPullupvoid gpioSetPullup (volatile uint32_t *ioconReg, gpioPullupMode_t mode) Alle GPIO Pins des LPC1343 haben interne Pull-up/Pull-down widerstände die beliebig konfiguriert werden können. Diese Funktion kann dazu verwendet werden den Betriebsmodus der integrierten Widerstände auszufählen (inactive, pull-up, pull-down, or repeater) Übergabeparameter:
* mode: Betriebsmodus des internen Widerstandes (gpioPullupMode_Inactive, gpioPullupMode_PullDown, gpioPullupMode_PullUp or gpioPullupMode_Repeater).
[Bearbeiten] gpioSetInterruptvoid gpioSetInterrupt (uint32_t portNum, uint32_t bitPos, gpioInterruptSense_t sense, gpioInterruptEdge_t edge, gpioInterruptEvent_t event) Jeder GPIO Pin des LPC1343 kann als externe Interrupt Quelle definiert werden. Die Funktion gpioSetInterrupt erlaubt die Festlegung, welcher Pin als Interruptquelle fungieren soll, und spezifiziert die Randbedingungen, unter denen ein Interrupt ausgelöst wird(Pin geht von H==>L oder von L==>H, ...). Abhängig von der portNum, wird der Interrupt durch den PIOINTx_IRQHandler gehandhabt , wobei 'x' der Portnummer entspricht (PIOINT1_IRQHandler wird benutzt wenn der Interrupt z.B. an GPIO Pin 1.8, ausgelöst wird). Übergabeparameter: * portNum: die gpio Port Nummer [0..3] * bitPos: die Bit Position für den gpio pin [0..11] * sense: Flanken, oder Level-sensitive(gpioInterruptSense_Edge oder gpioInterruptSense_Level). * edge: bei Flanke: Flanken-sensitive als Einfache Flanke (gpioInterruptEdge_Single) oder beide Flanken (gpioInterruptEdge_Double). * event: bei Level:, High oder Low Level (gpioInterruptEvent_ActiveHigh) (gpioInterruptEvent_ActiveLow).
[Bearbeiten] gpioIntEnablevoid gpioIntEnable (uint32_t portNum, uint32_t bitPos) Erlaubt einen Interrupt am spezifizierten GPIO-Pin. Übergabeparameter: * portNum: die gpio Port Nummer [0..3] * bitPos: die Bit Position für den gpio pin [0..11]
[Bearbeiten] gpioIntDisablevoid gpioIntDisable (uint32_t portNum, uint32_t bitPos) Schaltet einen Interrupt am spezifizierten GPIO-Pin aus. Übergabeparameter: * portNum: die gpio Port Nummer [0..3] * bitPos: die Bit Position für den gpio pin [0..11]
[Bearbeiten] gpioIntClearvoid gpioIntClear (uint32_t portNum, uint32_t bitPos) Löscht den Interrupt am spezifizierten Pin. Diese Funktion sollte nur aus der Interrupt-Service Routine aufgerufen werden, wenn der Interrupt aufgetreten ist. Übergabeparameter: * portNum: die gpio Port Nummer [0..3] * bitPos: die Bit Position für den gpio pin [0..11]
Siehe Beispiel für for gpioSetInterrupt to configure an interrupt. [Bearbeiten] gpioIntStatusuint32_t gpioIntStatus (uint32_t portNum, uint32_t bitPos) Liest den Interrupt Status des spezifizierten Port-Pins. Übergabeparameter: * portNum: die gpio Port Nummer [0..3] * bitPos: die Bit Position für den gpio pin [0..11]
'1' wenn ein Interrupt an diesem Pin aufgetreten ist ansonsten '0'. Siehe Beispiel für gpioIntClear. [Bearbeiten] Core/PMUKonfiguriert die Power Management Unit (PMU) um den Sleep, Deep-sleep und Power-Down Modus. Jeder GPIO Pin kann so konfiguriert werden, um den Prozessor aus dem Sleep Mode aufzuwecken, aber nur ein low-level an Pin 1.4 (WAKEUP) kann den LPC aus dem Power-Down aufwecken.
[Bearbeiten] pmuInitvoid pmuInit(void) Initialisiert die Power Management Unit und Konfiguriert Pin 0.1 so, da er als Wakeup-Quelle für Sleep oder Deep-Sleep Mode fungieren kann. Übergabeparameter: Keine
Im oment ist nur P0.1 als Wakeup Quelle konfiguriert, aber in pmuSleep besteht die Möglichkeit durch auskommentieren beliebige, andere Pins zu wählen, sofern auch die entsprechende GPIO Konfiguration passend gesetzt ist. Siehe Beispiel für pmuSleep, pmuDeepSleep and pmuPowerDown.
[Bearbeiten] pmuSleepvoid pmuSleep(void) Diese Function versetzt den LPC in den Sleep Mode. Jeder GPIO-Pin kann verwendet werden um den LPC wieder aufzuwecken, der Pin muß entsprechend in pmuInit konfiguriert werden. Übergabeparameter: Keine
[Bearbeiten] pmuDeepSleepvoid pmuDeepSleep( uint32_t sleepCtrl, uint32_t wakeupSeconds ) Diese Function versetzt den LPC in den Deep-Sleep Mode. AJeder GPIO-Pin kann verwendet werden um den LPC wieder aufzuwecken, der Pin muß entsprechend in pmuInit konfiguriert werden. Der sleepCtrl Parameter wird benötigt umd festzulegen welche Peripherieeinheiten in den Sleep-Mode versetzt werden sollen, siehe SCB_PDSLEEPCFG Register für Details). Optional kann ein Wert ungleich null , in wakeupSeconds bereitgestellt werden, der den Prozessor nach der eingestellten Zeit wieder aufweckt. Dabei wird der 32-bit Timer 0 und Pin 0.1 (CT32B0_MAT2) benutzt. Übergabeparameter: * sleepCtrl: hierüber werden die gesetzten Peripherieeinheiten gezielt in Sleep-Mode gesetzt. * wakeupSeconds: Ist dieser Wert größer 0 wird der Prozessor automatisch bach dieser Zeit in Sekunden wieder aufgeweckt.
[Bearbeiten] pmuPowerDownvoid pmuPowerDown( void ) Diese Function konfiguriert das PMU Control Register so, daß der LPC in den deep power-down mode geht. Achtung: Alle Register außer der vier Register (PMU_GPREG0..3) verlieren ihren Inhalt während der Prozessor im Deep-Power Down Mode ist. die 3,3V dürfen dazu nicht wegfallen Übergabeparameter: Keine
[Bearbeiten] Core/SSPGenerischer Code für SSP/SPI Kommunikation. Der SSP Block wird als SPI Master Mode initialisiert
[Bearbeiten] sspInitvoid sspInit (uint32_t portNum, sspClockPolarity_t polarity, sspClockPhase_t phase) Initialisiert den SSP Port. By default, SSP wird als SPI frame-format mit 8-bit Data initialisiert. Pin 2.11 wird als serial clock (SCK) verwendet, und SSEL (0.2) ist als GPIO initialisiert, um manuell den SPI Port ein- bzw. Auszuschalten Überlauf und Timeout Interrupts sind beide ein. Übergabeparameter: * portNum: Port Number. ( Standardmäßig 0, es sei denn auf einem LPC1313/1.) * polarity: Clock High (sspClockPolarity_High) oder Low (sspClockPolarity_Low)als inaktiven Pegel. * phase: Bit Start mit steigender Flanke (sspClockPhase_RisingEdge) oder mit fallender Flanke sspClockPhase_FallingEdge) bei Pegelwechsel von SCK.
sspSelect() und sspDeselect() macros wurden ssp.h definiert, um SSEL kontrollieren zu können, ohne deß der dafür definierte Pin bekannt ist line Siehe Beispiel für sspSend
[Bearbeiten] sspSendvoid sspSend (uint32_t portNum, uint8_t *buf, uint32_t length) Sendet einen Datenblock an den SSP Port Übergabeparameter: * portNum: Port Number. ( Standardmäßig 0, es sei denn auf einem LPC1313/1.) * *buf: Pointer auf den Datenpuffer * length: Block Länge des Datenpuffers
[Bearbeiten] sspReceivevoid sspReceive(uint32_t portNum, uint8_t *buf, uint32_t length) Empfängt einen Datenblock an den SSP Port Übergabeparameter: * portNum: Port Number. ( Standardmäßig 0, es sei denn auf einem LPC1313/1.) * *buf: Pointer auf den Datenpuffer * length: Block Länge des Datenpuffers
[Bearbeiten] Core/SystickSteuert den 24-bit 'system tick' Timer, der sowohl als normaler Timer, alsauch als System-Timer für ein real-time Betriebssystem (FreeRTOS, Crossworks CTL, etc.) verwendet werden kann.
[Bearbeiten] systickInitvoid systickInit (uint32_t delayMs) Initialisiert den Systick Timer in Millisekunden (typischer Wert = 10ms). Dies führt alle z.B. 10ms zu einem Systtick Interrupt und dazu, daß eine unsigned 32-Bit Variable mit dem Namen "msTicks" um 1 hochgezählt wird wenn der Interrupt ausgelöst wird. Übergabeparameter: * delayMs: Indicates the length of time in millaseconds between each system 'tick'. Siehe Beispiel für systickDelay.
[Bearbeiten] systickDelayvoid systickDelay (uint32_t delayTicks) Führt zu einem den Prozessor blockierenden Wartezeit von einer spezifizierten Anzahl an Systick Timer Ticks. Die Länge der Pause hängt von der in der systickInit Function definierten Interruptzeit ab. Übergabeparameter: * delayTicks: The number of systick ticks to wait.
[Bearbeiten] Core/Timer16Steuert alle 16-Bit Timers auf dem LPC1343. Achtung: bei 72MHz deckt ein 16-Bit Timer nur eine Zeit von knapp 0.91mS (or 910uS) ab: 1 mS = CFG_CPU_CCLK / 1000 = 72000000 / 1000
= 72000 'ticks'
Der Maximalwert eines 16-Bit Timers ist 0xFFFF (65535) also 0.910208ms.
[Bearbeiten] timer16Initvoid timer16Init(uint8_t timerNum, uint16_t timerInterval) Initialisiert einen 16-bit timer mit seiner Interruptzeit. Jedes mal, wenn der Zeiraum abgelaufen ist wird der Timer-Interrupt ausgelöst, und die Zählervariable um eins hochgezählt. (z.B. mit Timer CT16B0, wird der 'timer16_0_counter' Inkrementiert). Übergabeparameter: * timerNum: Der 16-Bit Timer der initialisiert werden soll [0..1] * timerInterval: Die Anzahl an Takt-'ticks' zwischen den Interrupts [0..65534]
[Bearbeiten] timer16DelayTicksvoid timer16DelayTicks(uint8_t timerNum, uint16_t delayInTicks) Führt zu einer blockierenden Pause für die definierte Anzahl an Takt-ticks. Übergabeparameter: * timerNum: Der 16-Bit Timer der initialisiert werden soll [0..1] * delayInTicks: Anzahl an Takt ticks die pausiert werden soll [0..65534]
[Bearbeiten] timer16DelayUSvoid timer16DelayUS(uint8_t timerNum, uint16_t delayInUS) Führt zu einer blockierenden Pause für die definierte Anzahl an Mikrosecunden. Übergabeparameter: * timerNum: Der betreffende 16-Bit Timer [0..1] * delayInUS: Anzahl der Mikrosekonden, die gewartet werden soll
[Bearbeiten] timer16Enablevoid timer16Enable(uint8_t timerNum) Schaltet den spezifizierten Timer ein (erlaubt die Auslösung der konfigurierten Interrupts) Übergabeparameter: * timerNum: Der betreffende 16-Bit Timer [0..1]
Schaltet den spezifizierten Timer aus (verbietet die Auslösung der konfigurierten Interrupts) Übergabeparameter: * timerNum: Der betreffende 16-Bit Timer [0..1]
[Bearbeiten] timer16Resetvoid timer16Reset(uint8_t timerNum) Setzt den spezifizierten Timer zurück. Übergabeparameter: * timerNum: The 16-bit timer to reset [0..1]
[Bearbeiten] Core/Timer32Steuert alle 32-Bit Timers auf dem LPC1343. Achtung: der 32-bit timers ermöglicht einen deutlich längeren Timerinterrupt als der 16-Bit Timer. z.B. 1 mS = CFG_CPU_CCLK / 1000 = 72000000 / 1000
= 72000 'ticks'
Der Maximalwert eines 32-Bit Timers ist, 0xFFFFFFFF (4,294,967,295), gleichbedeutend mit 59652ms (etwas weniger als eine Minute, im Vergleich ~0.91ms mit einem 16 Bit Timer @ 72MHz). Sowohl die 16-Bit, alsauch die 32-Bit Timer können in verbindung mit einem externen Pin eingesetzt werden. z.B. setzen/löschen eines Pins, wenn ein "Match" eintritt. Jeses Matchregisters jedes Timers kann auch als PWM Register verwendet werden und ein entsprechendes PWM-Verhältnis ausgeben zu können.
[Bearbeiten] timer32Initvoid timer32Init(uint8_t timerNum, uint32_t timerInterval) Initialisiert einen 32-bit timer mit seiner Interruptzeit. Jedes mal, wenn der Zeiraum abgelaufen ist wird der Timer-Interrupt ausgelöst, und die Zählervariable um eins hochgezählt. (z.B. mit Timer CT16B0, wird der 'timer16_0_counter' Inkrementiert). Übergabeparameter: * timerNum: Der 32-Bit Timer der initialisiert werden soll [0..1] * timerInterval: Die Anzahl an Takt-'ticks' zwischen den Interrupts [0..4,294,967,294] Warnung: Vorsicht bei der Konfiguration der Timer, da die Pins mehrfach mit anderer Peripherie gemultiplext werden, je nach Initialisierung.Diese Funktion dient nur der besseren Veranschaulichung und muß unbedingt an die jeweiligen Randbedingungen angepaßt werden.
[Bearbeiten] timer32Delayvoid timer32Delay(uint8_t timerNum, uint32_t delay) Führt zu einer blockierenden Pause für die definierte Anzahl an Takt-ticks. Übergabeparameter: * timerNum: Der 16-Bit Timer der initialisiert werden soll [0..1] * delayInTicks: Anzahl an Takt ticks die pausiert werden soll
[Bearbeiten] timer32Enablevoid timer32Enable(uint8_t timerNum) Schaltet den spezifizierten Timer ein (erlaubt die Auslösung der konfigurierten Interrupts) Übergabeparameter: * timerNum: Der betreffende 32-Bit Timer [0..1]
[Bearbeiten] timer32Disablevoid timer32Disable(uint8_t timerNum) Schaltet den spezifizierten Timer aus (verbietet die Auslösung der konfigurierten Interrupts) Übergabeparameter: * timerNum: Der betreffende 32-Bit Timer [0..1]
[Bearbeiten] timer32Resetvoid timer32Reset(uint8_t timerNum) Setzt den spezifizierten Timer zurück. Übergabeparameter: * timerNum: Der betreffende 32-Bit Timer [0..1] [Bearbeiten] Core/UARTErmöglicht es einfache Teste über RS232, USB oder FTDI232RL zu senden oder zu empfangen. Jeder eingehende Text wird in einem FIFO gespeichert sodaß Datenverlust nicht auftreten sollte. [Bearbeiten] uart_pcb_tuart_pcb_t *uartGetPCB () Liefert einen Pointer auf den Protokollblock des UART's. Damit kann der Status des UART ermittelt werden, und damit ob der UART initialisiert wurde, ob auf Daten gewartet oder gerade gesendet wird und um eine Referenz auf den Empfangs-FIFO zu erhalten. Übergabeparameter: Keine
[Bearbeiten] uartInitvoid uartInit (uint32_t baudrate) Initialisiert den UART mit einer spezifischen Baud-Rate. Übergabeparameter: * baudRate: Die Baud-Rate, mit der der UART konfiguriert werden soll (z.B. '57600').
[Bearbeiten] uartSendvoid uartSend (uint8_t *bufferPtr, uint32_t length) Sendet den Inhalt des Puffers über den UART. Übergabeparameter: * *bufferPtr: Pointer zum Text Buffer * length: Die Größe des Text Buffers
[Bearbeiten] uartSendBytevoid uartSendByte (uint8_t byte) Schickt ein einzelnes Byte an den UART. Übergabeparameter: * byte: Das zu sendende Byte
[Bearbeiten] uartRxBufferInitvoid uartRxBufferInit () Initialisiert den RX FIFO buffer. Übergabeparameter: Keine No example current available.
[Bearbeiten] uartRxBufferReaduint8_t uartRxBufferRead () Liest ein Byte aus dem RX Buffer. Diese Funktion liefert ein Byte zurück, das durch den Array Index spezifiziert wird. Erreicht der Pointer die max. Buddergröße, beginnt er wieder bei '0'. Übergabeparameter: Keine Siehe Beispiel für uartRxBufferWrite. [Bearbeiten] uartRxBufferWritevoid uartRxBufferWrite(uint8_t data) Schreibt ein Byte in den RX Buffer. Note: Normalerweise ist es nicht notwendig diese Funktion zu benutzen, da alle eingehenden Daten über den UART Interrupt laufen, und jedes Byte in den RX-Buffer geschrieben wird. Übergabeparameter: * uint8_t data: Byte, das in den RX Buffer geschrieben werden soll.
[Bearbeiten] uartRxBufferClearFIFOvoid uartRxBufferClearFIFO () Löscht die RX und TX Pointer und setzt die Längen auf Null. Übergabeparameter: Keine No example currently available. [Bearbeiten] uartRxBufferDataPendingvoid uartRxBufferDataPending() Stellt fest, ob Daten im FIFO sind. Wenn ein odermehr Bytes im FIFO enthalten sind, wird eine '1' zurückgeliefert Ist der Puffer leern wird eine '0' zurückgeliefert. Übergabeparameter: Keine Siehe das Beispiel für uartRxBufferWrite. [Bearbeiten] Core/USBHID-ROMDer LPC1343 enthält eine ROM-basierte Unterstützung für HID (Human Interface Device) und MSCD (Mass Storage Device) was einem eine relativ einfache Möglichkeit liefert USB Klassen schnell und effizient zu implementieren. Eine einfache HID implementierung ist in der Code-Base enthaltenund beinhaltet die Basis-Kommunikation zwischen dem LPC1343 und einem PC or USB-Host Device. In diesem Beispiel wird das Device so konfiguriert, daß "1-Byte! telegramme geschickt werden können. Achtung: dieses Beispiel ist auf das bei microbuilder.eu verfügbare LPC1343 Reference Board abgestimmt. Dieser ROM-basierte HID Driver macht es wirklich außergewöhnlich bequem, ist aber weniger flexibel als ein vollständig SW-basierter USB/HID Stack. Der Hauptunterschied ist, daß man hier auf einen "single Report" limitiert ist. Ein vollständig SW-basierter Stack ist auf der NXP-Website verfügbar. Ein möglicher Kompromiß zwischen Aufwand und flexibilität ist, daß z.B. immer zwei oder mehre Byte-Reports verschickt werden, wobei das erste Byte als eine adt "Komando-ID" bestimmt, wie die nachfolgenden Bytes interpretiert werden sollen. Speicher-Einschränkung: Der ROM-basierte HID Treiber verwendet 0x10000050 to 0x10000180 des On-Chip RAM, was bedeutet, daß im Linkter entsprechend eingestellt werden muß , daß diese Sektion nicht verwendet werden darf. [Bearbeiten] usbHIDInitvoid usbHIDInit (void) Initialisiert das Device für USB HID Support und versucht einen Verbindungsaufbau zum Host. Das Device ist als 1 Byte Report konfiguriert. Übergabeparameter: Keine
[Bearbeiten] usbHIDGetInReportvoid usbHIDGetInReport (uint8_t src[], uint32_t length) Setzt die HID im Report (vom LPC1343 zum USB host). Übergabeparameter: * src[]: Ein Byte-Array für die Report Daten * length: Länge des src
[Bearbeiten] usbHIDSetOutReportvoid usbHIDSetOutReport (uint8_t dst[], uint32_t length) Sezt den HID-out Report (Vom USB-Host zum LPC1343). Übergabeparameter: * src[]: Ein Byte-Array für die Report Daten * length: Länge des src
[Bearbeiten] Core/WDTDer LPC1343 enthält einen Watchdog-Timer der benutzt werden kann das Sytem am laufen zu halten. Damit wird festgestellt, ob der LPC abgestürzt ist, oder nicht. Der 'Watchdog' ist so konfiguriert, daß er alle 'x' Ticks des System-Taktes getriggert werden muss. Wenn dies nicht stattfindet, können verschiedene Aktionen ausgelöst werden, (z.B. System-Reset, oder die Auslösung eines Interrupts). Die Grundeinstellung des in der Code-Base vorhandenen Codes setzt den Watchdog auf eine Togglerate von 250kHz, also einmal alle 250.000 Taktzyklen, und hier wird nur der WDT_IRQHandler ausgelöst.
[Bearbeiten] wdtInitvoid wdtInit (void) Initialisiert den Watchdog Timer und den interrupt. Übergabeparameter: Keine
[Bearbeiten] wdtFeedvoid wdtFeed (void) Toggelt den Watchdog um einen Timeout zu verhindern. Übergabeparameter: Keine
[Bearbeiten] Links |