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.
Revision 0:f4dd9936dfd9, committed 2018-12-06
- 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
diff -r 000000000000 -r f4dd9936dfd9 lpc1768.lib --- /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
diff -r 000000000000 -r f4dd9936dfd9 main/handlers.c --- /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
diff -r 000000000000 -r f4dd9936dfd9 main/main.c --- /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
diff -r 000000000000 -r f4dd9936dfd9 main/periphs.c --- /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 +}
diff -r 000000000000 -r f4dd9936dfd9 main/periphs.h --- /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
diff -r 000000000000 -r f4dd9936dfd9 main/vectors.S --- /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