More UART fixes, and test of all UARTS.
[dtplug] / apps / dtplug / usb / main.c
1 /****************************************************************************
2  *   apps/adc/main.c
3  *
4  * ADC example
5  *
6  * Copyright 2013-2014 Nathael Pajani <nathael.pajani@ed3l.fr>
7  *
8  *
9  * This program is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation, either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
21  *
22  *************************************************************************** */
25 #include <stdint.h>
26 #include "core/lpc_regs_17xx.h"
27 #include "core/lpc_core_cm3.h"
28 #include "core/pio.h"
29 #include "core/system.h"
30 #include "core/systick.h"
31 #include "drivers/serial.h"
32 #include "drivers/gpio.h"
33 #include "drivers/usbcore.h"
34 #include "lib/stdio.h"
35 #include "lib/usb.h"
38 #define BOARD_VERSION    0x11
39 #define BOARD_NAME      "DTPlug"
42 #define SELECTED_FREQ  FREQ_SEL_100MHz
44 /***************************************************************************** */
45 /* Pins configuration */
46 /* pins blocks are passed to set_pins() for pins configuration.
47  * Unused pin blocks can be removed safely with the corresponding set_pins() call
48  * All pins blocks may be safelly merged in a single block for single set_pins() call..
49  */
50 const struct pio_config common_pins[] = {
51         /* UART 0 */
52         { LPC_UART0_TX_PIO_0_2, 0 },
53         { LPC_UART0_RX_PIO_0_3, LPC_IO_MODE_NO_PULL },
54         /* UART 1 */
55         { LPC_UART1_TX_PIO_0_15, 0 },
56         { LPC_UART1_RX_PIO_0_16, LPC_IO_MODE_NO_PULL },
57         /* UART 2 */
58         { LPC_UART2_TX_PIO_0_10, 0 },
59         { LPC_UART2_RX_PIO_0_11, LPC_IO_MODE_NO_PULL },
60         /* UART 3 */
61         { LPC_UART3_TX_PIO_0_0, 0 },
62         { LPC_UART3_RX_PIO_0_1, LPC_IO_MODE_NO_PULL },
63         /* SSP0 - Modules SPI */
64         { LPC_SSP0_SCLK_PIO_1_20, 0 },
65         { LPC_SSP0_SSEL_PIO_1_21, 0 },
66         { LPC_SSP0_MISO_PIO_1_23, 0 },
67         { LPC_SSP0_MOSI_PIO_1_24, 0 },
68         { LPC_GPIO_1_25, LPC_IO_MODE_PULL_UP }, /* SSP0 Chip Select 0 */
69         { LPC_GPIO_1_26, LPC_IO_MODE_PULL_UP }, /* SSP0 Chip Select 1 */
70         { LPC_GPIO_1_28, LPC_IO_MODE_PULL_UP }, /* SSP0 Chip Select 2 */
71         { LPC_GPIO_1_29, LPC_IO_MODE_PULL_UP }, /* SSP0 Chip Select 3 */
72         /* SSP1 - On-board SD-Card */
73         { LPC_SSP1_SSEL_PIO_0_6, 0 },
74         { LPC_SSP1_SCLK_PIO_0_7, 0 },
75         { LPC_SSP1_MISO_PIO_0_8, 0 },
76         { LPC_SSP1_MOSI_PIO_0_9, 0 },
77         /* I2C 0 - On-board system EEPROM */
78         { LPC_I2C0_SDA_PIO_0_27, LPC_IO_MODE_OPEN_DRAIN },
79         { LPC_I2C0_SCL_PIO_0_28, LPC_IO_MODE_OPEN_DRAIN },
80         /* I2C 1 - Modules I2C */
81         { LPC_I2C1_SDA_PIO_0_19, LPC_IO_MODE_OPEN_DRAIN },
82         { LPC_I2C1_SCL_PIO_0_20, LPC_IO_MODE_OPEN_DRAIN },
83         /* USB */
84         { LPC_USB_DP_PIO_0_29, 0 },
85         { LPC_USB_DM_PIO_0_30, 0 },
86         { LPC_USB_UP_LED_PIO_1_18, 0 }, /* USB Power Up led */
87         { LPC_USB_PPWR_PIO_1_19, 0 },   /* USB PowerUp Detect out signal */
88         { LPC_USB_VBUS_PIO_1_30, 0 },   /* USB Power detect */
89         { LPC_USB_CONNECT_PIO_2_9, 0 }, /* USB Connect */
90         /* Ethernet */
91         { LPC_ETHER_TXD0_PIO_1_0, 0 },
92         { LPC_ETHER_TXD1_PIO_1_1, 0 },
93         { LPC_ETHER_TX_EN_PIO_1_4, 0 },
94         { LPC_ETHER_CRS_PIO_1_8, 0 },
95         { LPC_ETHER_RXD0_PIO_1_9, 0 },
96         { LPC_ETHER_RXD1_PIO_1_10, 0 },
97         { LPC_ETHER_RX_ER_PIO_1_14, 0 },
98         { LPC_ETHER_REF_CLK_PIO_1_15, 0 },
99         { LPC_ETHER_MDC_PIO_1_16, 0 },
100         { LPC_ETHER_MDIO_PIO_1_17, 0 },
101         /* ADC */
102         { LPC_ADC_AD0_PIO_0_23, 0 },
103         { LPC_ADC_AD1_PIO_0_24, 0 },
104         { LPC_ADC_AD2_PIO_0_25, 0 },
105         { LPC_ADC_AD3_PIO_0_26, 0 },
106         /* GPIO */
107         { LPC_GPIO_0_4, LPC_IO_MODE_PULL_UP },  /* External GPIO 0 */
108         { LPC_GPIO_0_5, LPC_IO_MODE_PULL_UP },  /* External GPIO 1 */
109         { LPC_GPIO_4_29, LPC_IO_MODE_PULL_UP }, /* External GPIO 2 */
110         { LPC_GPIO_4_28, LPC_IO_MODE_PULL_UP }, /* External GPIO 3 */
111         { LPC_GPIO_3_26, LPC_IO_MODE_PULL_UP }, /* External PWM 0 */
112         { LPC_GPIO_3_25, LPC_IO_MODE_PULL_UP }, /* External PWM 1 */
113         { LPC_GPIO_2_0, LPC_IO_MODE_PULL_UP },  /* External PWM 2 */
114         { LPC_GPIO_2_1, LPC_IO_MODE_PULL_UP },  /* External PWM 3 */
115         { LPC_EINT_1_PIO_2_11, LPC_IO_MODE_PULL_UP },  /* External Interrupt IN 1 */
116         { LPC_EINT_2_PIO_2_12, LPC_IO_MODE_PULL_UP },  /* External Interrupt IN 2 */
117         { LPC_GPIO_2_2, LPC_IO_MODE_PULL_UP }, /* CPL GPIO 1 */
118         { LPC_GPIO_2_3, LPC_IO_MODE_PULL_UP }, /* CPL GPIO 2 */
119         { LPC_GPIO_2_4, LPC_IO_MODE_PULL_UP }, /* CPL GPIO 3 */
120         { LPC_GPIO_2_5, LPC_IO_MODE_PULL_UP }, /* CPL GPIO 4 */
121         { LPC_GPIO_2_6, LPC_IO_MODE_PULL_UP }, /* CPL GPIO 5 */
122         ARRAY_LAST_PIO,
123 };
125 struct pio user_led = LPC_GPIO_0_4;
126 struct pio clkout = LPC_CLKOUT_PIO_1_27;
128 /***************************************************************************** */
129 void system_init()
131         clock_config(SELECTED_FREQ);
132         system_brown_out_detection_config(0);
133         system_set_default_power_state();
134         set_pins(common_pins);
135         /* System tick timer MUST be configured and running at 1ms in order to use the sleeping functions */
136         systick_timer_on(1); /* 1ms */
137         systick_start();
140 /* Define our fault handler. This one is not mandatory, the dummy fault handler 
141  * will be used when it's not overridden here.
142  * Note : The default one does a simple infinite loop. If the watchdog is deactivated
143  * the system will hang.
144  */
145 void fault_info(const char* name, uint32_t len)
147         serial_write(0, name, len);
148         /*FIXME : wait for end of Tx and perform soft reset of the micro-controller ! */
153 /***************************************************************************** */
154 int main(void) {
155         int i = 0;
157         system_init();
158         uart_on(0, 115200, NULL);
159         uart_on(1, 115200, NULL);
160         uart_on(2, 115200, NULL);
161         uart_on(3, 115200, NULL);
162         gpio_dir_out(user_led);
163 /*
164         usb_on();
165         usb_start(USB_MAX_PACKET_EP0_SIZE);
166 */
168         while (1) {
169                 gpio_clear(user_led);
170                 serial_write(1, "Coucou\n", 7);
171                 msleep(500);
172                 gpio_set(user_led);
173                 msleep(500);
174                 uprintf(2, "Test\n");
175                 uprintf(3, "Cycle: %d\n", i++);
176         }
177         return 0;