authorNathael Pajani <nathael.pajani@ed3l.fr>
Tue, 22 Sep 2015 01:10:22 +0000 (03:10 +0200)
committerNathael Pajani <nathael.pajani@ed3l.fr>
Tue, 22 Sep 2015 01:10:22 +0000 (03:10 +0200)
Note that Chip select for SSP use a modified version of v1.1 board.

apps/dtplug/usb/main.c

index 3a64364..e612f11 100644 (file)
@@ -1,9 +1,9 @@
 /****************************************************************************
- *   apps/adc/main.c
+ *   apps/dtplug/usb/main.c
  *
- * ADC example
+ * USB example
  *
- * Copyright 2013-2014 Nathael Pajani <nathael.pajani@ed3l.fr>
+ * Copyright 2013-2015 Nathael Pajani <nathael.pajani@ed3l.fr>
  *
  *
  * This program is free software: you can redistribute it and/or modify
 #include "core/systick.h"
 #include "drivers/serial.h"
 #include "drivers/gpio.h"
+#include "drivers/adc.h"
+#include "drivers/ssp.h"
 #include "drivers/usbcore.h"
 #include "lib/stdio.h"
 #include "lib/usb.h"
+#include "extdrv/max31855_thermocouple.h"
 
 
 #define BOARD_VERSION    0x11
@@ -62,7 +65,6 @@ const struct pio_config common_pins[] = {
        { LPC_UART3_RX_PIO_0_1, LPC_IO_MODE_NO_PULL },
        /* SSP0 - Modules SPI */
        { LPC_SSP0_SCLK_PIO_1_20, 0 },
-       { LPC_SSP0_SSEL_PIO_1_21, 0 },
        { LPC_SSP0_MISO_PIO_1_23, 0 },
        { LPC_SSP0_MOSI_PIO_1_24, 0 },
        { LPC_GPIO_1_25, LPC_IO_MODE_PULL_UP }, /* SSP0 Chip Select 0 */
@@ -84,7 +86,6 @@ const struct pio_config common_pins[] = {
        { LPC_USB_DP_PIO_0_29, 0 },
        { LPC_USB_DM_PIO_0_30, 0 },
        { LPC_USB_UP_LED_PIO_1_18, 0 }, /* USB Power Up led */
-       { LPC_USB_PPWR_PIO_1_19, 0 },   /* USB PowerUp Detect out signal */
        { LPC_USB_VBUS_PIO_1_30, 0 },   /* USB Power detect */
        { LPC_USB_CONNECT_PIO_2_9, 0 }, /* USB Connect */
        /* Ethernet */
@@ -119,11 +120,19 @@ const struct pio_config common_pins[] = {
        { LPC_GPIO_2_4, LPC_IO_MODE_PULL_UP }, /* CPL GPIO 3 */
        { LPC_GPIO_2_5, LPC_IO_MODE_PULL_UP }, /* CPL GPIO 4 */
        { LPC_GPIO_2_6, LPC_IO_MODE_PULL_UP }, /* CPL GPIO 5 */
+       /* Clk Out */
+       { LPC_CLKOUT_PIO_1_27, 0 },
        ARRAY_LAST_PIO,
 };
 
+#define MODULE_SELECT_0  LPC_GPIO_1_25
+#define MODULE_SELECT_1  LPC_GPIO_1_26
+#define MODULE_SELECT_2  LPC_GPIO_1_28
+#define MODULE_SELECT_3  LPC_GPIO_1_29
+
 struct pio user_led = LPC_GPIO_0_4;
 struct pio clkout = LPC_CLKOUT_PIO_1_27;
+struct pio isp_button = LPC_GPIO_2_10;
 
 /***************************************************************************** */
 void system_init()
@@ -137,7 +146,7 @@ void system_init()
        systick_start();
 }
 
-/* Define our fault handler. This one is not mandatory, the dummy fault handler 
+/* Define our fault handler. This one is not mandatory, the dummy fault handler
  * will be used when it's not overridden here.
  * Note : The default one does a simple infinite loop. If the watchdog is deactivated
  * the system will hang.
@@ -145,34 +154,82 @@ void system_init()
 void fault_info(const char* name, uint32_t len)
 {
        serial_write(0, name, len);
-       /*FIXME : wait for end of Tx and perform soft reset of the micro-controller ! */
+       /* Wait for end of Tx */
+       serial_flush(0);
+       /* FIXME : Perform soft reset of the micro-controller ! */
+       while (1);
 }
 
 
+int adc_display(int adc_num, int uart_num)
+{
+       uint16_t val = 0;
+       int ret = 0;
+
+       adc_start_convertion_once(adc_num, 0);
+       msleep(10);
+       ret = adc_get_value(&val, adc_num);
+       if (ret < 0) {
+               return ret;
+       } else {
+               uprintf(uart_num, "ADC(%d): %d (raw: 0x%04x)\n", adc_num, val, val);
+       }
+       return val;
+}
+
+/* Thermocouple reading */
+const struct max31855_sensor_config thermo = {
+       .ssp_bus_num = 0,
+       .chip_select = MODULE_SELECT_2,
+};
 
 /***************************************************************************** */
-int main(void) {
+int main(void)
+{
        int i = 0;
 
+       /* Global system inits */
        system_init();
+       /* All four module UARTs */
        uart_on(0, 115200, NULL);
        uart_on(1, 115200, NULL);
        uart_on(2, 115200, NULL);
        uart_on(3, 115200, NULL);
+       /* ADC for Extension ports on modules 2 and 3 */
+       adc_on();
+       /* Modules SPI Bus */
+       ssp_master_on(0, LPC_SSP_FRAME_SPI, 8, 4*1000*1000);
+       /* User Led */
        gpio_dir_out(user_led);
+
+
+       max31855_sensor_config(&thermo);
+
 /*
        usb_on();
        usb_start(USB_MAX_PACKET_EP0_SIZE);
 */
 
        while (1) {
+               int centi_degrees = 0, ret = 0;
+               uint32_t raw = 0;
+
                gpio_clear(user_led);
-               serial_write(1, "Coucou\n", 7);
-               msleep(500);
+               msleep(50);
                gpio_set(user_led);
-               msleep(500);
-               uprintf(2, "Test\n");
-               uprintf(3, "Cycle: %d\n", i++);
+               msleep(50);
+               adc_display(0, 1);
+
+               ret = max31855_sensor_read(&thermo, &raw, &centi_degrees);
+               if (ret != 0) {
+                       uprintf(1, "Temp err: %d, raw: 0x%08x, i:%d\n", ret, raw, i++);
+               } else {
+                       int abs_centi = centi_degrees;
+                       if (centi_degrees < 0) {
+                               abs_centi = -centi_degrees;
+                       }
+                       uprintf(1, "Temp: %d.%02d\n", (centi_degrees / 100), (abs_centi % 100));
+               }
        }
        return 0;
 }