Dependencies:   lpc1768

Aim

This program demonstrates the very simplest of programs, a flashing led, other projects have built on this library to use the ethernet, RTC, timers, SPI, uart1 and GPIO peripherals.

Files at this revision

API Documentation at this revision

Comitter:
andrewboyson
Date:
Thu Dec 06 11:23:34 2018 +0000
Commit message:
Created as had 'repository error' on the original program.

Changed in this revision

lpc1768.lib Show annotated file Show diff for this revision Revisions of this file
main/handlers.c Show annotated file Show diff for this revision Revisions of this file
main/main.c Show annotated file Show diff for this revision Revisions of this file
main/periphs.c Show annotated file Show diff for this revision Revisions of this file
main/periphs.h Show annotated file Show diff for this revision Revisions of this file
main/vectors.S Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lpc1768.lib	Thu Dec 06 11:23:34 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/andrewboyson/code/lpc1768/#98729c466609
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/handlers.c	Thu Dec 06 11:23:34 2018 +0000
@@ -0,0 +1,35 @@
+#include "led.h"
+
+__irq void DefaultHandler()
+{
+    int value = 0;
+    int count = 0;
+    while (1)
+    {
+        count++;
+        if (count > 10000000)
+        {
+            value = !value;
+            Led1Set( value);
+            Led2Set(!value);
+            Led3Set(!value);
+            Led4Set( value);
+            count = 0;
+        }
+    }
+}
+__irq void HardFaultHandler()
+{
+    int value = 0;
+    int count = 0;
+    while (1)
+    {
+        count++;
+        if (count > 10000000)
+        {
+            value = !value;
+            Led4Set(value);
+            count = 0;
+        }
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/main.c	Thu Dec 06 11:23:34 2018 +0000
@@ -0,0 +1,24 @@
+#include <stdint.h>
+#include <stdbool.h>
+
+#include "periphs.h"
+#include "system.h"
+#include "led.h"
+
+int main()
+{
+    PeriphsInit();
+    SystemInit();
+    LedInit();
+    
+    int count = 0;
+    while (true)
+    {
+        ++count;
+        if (count > 10000000)
+        {
+            Led1Tgl();
+            count = 0;
+        }
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/periphs.c	Thu Dec 06 11:23:34 2018 +0000
@@ -0,0 +1,54 @@
+#define PCONP    (*((volatile unsigned *) 0x400FC0C4))
+#define PCLKSEL0 (*((volatile unsigned *) 0x400FC1A8))
+#define PCLKSEL1 (*((volatile unsigned *) 0x400FC1AC))
+#define PINSEL0  (*((volatile unsigned *) 0x4002C000))
+#define PINSEL1  (*((volatile unsigned *) 0x4002C004))
+#define PINSEL2  (*((volatile unsigned *) 0x4002C008))
+#define PINSEL3  (*((volatile unsigned *) 0x4002C00C))
+
+
+void PeriphsInit (void)
+{
+    //Peripheral power - Table 46
+    PCONP  = 0;
+    PCONP |= 1U <<  1; //TIMER0
+    PCONP |= 1U <<  3; //UART0
+    PCONP |= 1U <<  4; //UART1
+    PCONP |= 1U <<  9; //RTC
+    PCONP |= 1U << 10; //SSP1
+    PCONP |= 1U << 15; //GPIO
+    PCONP |= 1U << 30; //ENET                 
+
+    //Peripheral clocks; default is 0b00 to divide by 4; specify 0b01 to divide by 1
+    PCLKSEL0  = 0;
+    PCLKSEL0 |= 1U <<  2;  //TIM0
+    PCLKSEL0 |= 1U <<  6;  //UART0
+    PCLKSEL0 |= 1U <<  8;  //UART1
+    PCLKSEL0 |= 1U << 20;  //SSP1
+
+    //Pin functions table 80.
+    PINSEL0  = 0;
+    PINSEL0 |= 1U <<  4; //P0.02 01 TXD0  UART0
+    PINSEL0 |= 1U <<  6; //P0.03 01 RXD0  UART0
+    PINSEL0 |= 2U << 14; //P0.07 10 SCK1   SSP1
+    PINSEL0 |= 2U << 16; //P0.08 10 MISO1  SSP1
+    PINSEL0 |= 2U << 18; //P0.09 10 MOSI1  SSP1
+    PINSEL0 |= 1U << 30; //P0.15 01 TXD1  UART1
+    
+    PINSEL1  = 0;
+    PINSEL1 |= 1U <<  0; //P0.16 01 RXD1  UART1
+    
+    PINSEL2  = 0;
+    PINSEL2 |= 1U <<  0; //P1.00 01 ENET_TXD0
+    PINSEL2 |= 1U <<  2; //P1.01 01 ENET_TXD1
+    PINSEL2 |= 1U <<  8; //P1.04 01 ENET_TX_EN
+    PINSEL2 |= 1U << 16; //P1.08 01 ENET_CRS
+    PINSEL2 |= 1U << 18; //P1.09 01 ENET_RXD0
+    PINSEL2 |= 1U << 20; //P1.10 01 ENET_RXD1
+    PINSEL2 |= 1U << 28; //P1.14 01 ENET_RX_ER
+    PINSEL2 |= 1U << 30; //P1.15 01 ENET_REF_CLK
+    
+    PINSEL3  = 0;
+    PINSEL3 |= 1U <<  0; //P1.16 01 ENET_MDC
+    PINSEL3 |= 1U <<  2; //P1.17 01 ENET_MDIO
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/periphs.h	Thu Dec 06 11:23:34 2018 +0000
@@ -0,0 +1,1 @@
+extern void PeriphsInit (void);
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/vectors.S	Thu Dec 06 11:23:34 2018 +0000
@@ -0,0 +1,68 @@
+
+__initial_sp        EQU     0x10008000  ; Top of RAM from LPC1768
+
+                PRESERVE8
+                THUMB
+
+; Vector Table Mapped to Address 0 at Reset
+
+                AREA    RESET, DATA, READONLY
+                EXPORT  __Vectors
+                IMPORT  __main
+                IMPORT  DefaultHandler
+                IMPORT  HardFaultHandler
+
+__Vectors       DCD     __initial_sp              ; Top of Stack
+                DCD     __main                    ; Reset Handler
+                DCD     DefaultHandler            ; NMI Handler
+                DCD     HardFaultHandler          ; Hard Fault Handler
+                DCD     DefaultHandler            ; MPU Fault Handler
+                DCD     DefaultHandler            ; Bus Fault Handler
+                DCD     DefaultHandler            ; Usage Fault Handler
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     0                         ; Reserved
+                DCD     DefaultHandler            ; SVCall Handler
+                DCD     DefaultHandler            ; Debug Monitor Handler
+                DCD     0                         ; Reserved
+                DCD     DefaultHandler            ; PendSV Handler
+                DCD     DefaultHandler            ; SysTick Handler
+
+                ; External Interrupts
+                DCD     DefaultHandler            ; Watchdog Timer
+                DCD     DefaultHandler            ; Timer0
+                DCD     DefaultHandler            ; Timer1
+                DCD     DefaultHandler            ; Timer2
+                DCD     DefaultHandler            ; Timer3
+                DCD     DefaultHandler            ; UART0
+                DCD     DefaultHandler            ; UART1
+                DCD     DefaultHandler            ; UART2
+                DCD     DefaultHandler            ; UART3
+                DCD     DefaultHandler            ; PWM1
+                DCD     DefaultHandler            ; I2C0
+                DCD     DefaultHandler            ; I2C1
+                DCD     DefaultHandler            ; I2C2
+                DCD     DefaultHandler            ; SPI
+                DCD     DefaultHandler            ; SSP0
+                DCD     DefaultHandler            ; SSP1
+                DCD     DefaultHandler            ; PLL0 Lock (Main PLL)
+                DCD     DefaultHandler            ; Real Time Clock
+                DCD     DefaultHandler            ; External Interrupt 0
+                DCD     DefaultHandler            ; External Interrupt 1
+                DCD     DefaultHandler            ; External Interrupt 2
+                DCD     DefaultHandler            ; External Interrupt 3
+                DCD     DefaultHandler            ; A/D Converter
+                DCD     DefaultHandler            ; Brown-Out Detect
+                DCD     DefaultHandler            ; USB
+                DCD     DefaultHandler            ; CAN
+                DCD     DefaultHandler            ; General Purpose DMA
+                DCD     DefaultHandler            ; I2S
+                DCD     DefaultHandler            ; Ethernet
+                DCD     DefaultHandler            ; Repetitive Interrupt Timer
+                DCD     DefaultHandler            ; Motor Control PWM
+                DCD     DefaultHandler            ; Quadrature Encoder Interface
+                DCD     DefaultHandler            ; PLL1 Lock (USB PLL)
+
+                ALIGN
+                END