paparazzi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[paparazzi-commits] [6308] initial version for an 3 line LCD


From: Martin Mueller
Subject: [paparazzi-commits] [6308] initial version for an 3 line LCD
Date: Sat, 30 Oct 2010 22:01:10 +0000

Revision: 6308
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=6308
Author:   mmm
Date:     2010-10-30 22:01:09 +0000 (Sat, 30 Oct 2010)
Log Message:
-----------
initial version for an 3 line LCD

Added Paths:
-----------
    paparazzi3/trunk/conf/modules/lcd_dogm.xml
    paparazzi3/trunk/sw/airborne/arch/lpc21/modules/display/
    paparazzi3/trunk/sw/airborne/arch/lpc21/modules/display/lcd_dogm_hw.c
    paparazzi3/trunk/sw/airborne/arch/lpc21/modules/display/lcd_dogm_hw.h
    paparazzi3/trunk/sw/airborne/modules/display/
    paparazzi3/trunk/sw/airborne/modules/display/lcd_dogm.c
    paparazzi3/trunk/sw/airborne/modules/display/lcd_dogm.h

Added: paparazzi3/trunk/conf/modules/lcd_dogm.xml
===================================================================
--- paparazzi3/trunk/conf/modules/lcd_dogm.xml                          (rev 0)
+++ paparazzi3/trunk/conf/modules/lcd_dogm.xml  2010-10-30 22:01:09 UTC (rev 
6308)
@@ -0,0 +1,15 @@
+<!DOCTYPE module SYSTEM "module.dtd">
+
+<!-- Driver for the EA DOG-M163 LCD (SPI) -->
+
+<module name="lcd_dogm" dir="display">
+  <header>
+    <file name="lcd_dogm.h"/>
+  </header>
+  <init fun="lcd_dogm_init()"/>
+  <makefile target="ap">
+    <file_hw name="lcd_dogm_hw.c"/>
+    <file name="lcd_dogm.c"/>
+  </makefile>
+</module>
+

Added: paparazzi3/trunk/sw/airborne/arch/lpc21/modules/display/lcd_dogm_hw.c
===================================================================
--- paparazzi3/trunk/sw/airborne/arch/lpc21/modules/display/lcd_dogm_hw.c       
                        (rev 0)
+++ paparazzi3/trunk/sw/airborne/arch/lpc21/modules/display/lcd_dogm_hw.c       
2010-10-30 22:01:09 UTC (rev 6308)
@@ -0,0 +1,98 @@
+/*
+ * $Id$
+ *  
+ * Copyright (C) 2009  ENAC
+ *
+ * This file is part of paparazzi.
+ *
+ * paparazzi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * paparazzi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with paparazzi; see the file COPYING.  If not, write to
+ * the Free Software Foundation, 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA. 
+ *
+ */
+
+#include "LPC21xx.h"
+#include "interrupt_hw.h" 
+#include "lcd_dogm_hw.h"  
+
+
+static void SPI1_ISR(void) __attribute__((naked));
+
+#define PINSEL1_SCK  (2 << 2)
+#define PINSEL1_MOSI (2 << 6)
+#define PINSEL1_SSEL (2 << 8)
+
+/* SSPCR0 settings */
+#define SSP_DSS  0x07 << 0  /* data size            : 8 bits    */
+#define SSP_FRF  0x00 << 4  /* frame format         : SPI       */
+#define SSP_CPOL 0x01 << 6  /* clock polarity       : idle high */  
+#define SSP_CPHA 0x01 << 7  /* clock phase          : low->high */
+#define SSP_SCR  0x1F << 8  /* serial clock rate    : 29.3kHz, SSP input clock 
/ 16 */
+
+/* SSPCR1 settings */
+#define SSP_LBM  0x00 << 0  /* loopback mode     : disabled                  */
+#define SSP_SSE  0x00 << 1  /* SSP enable        : disabled                  */
+#define SSP_MS   0x00 << 2  /* master slave mode : master                    */
+#define SSP_SOD  0x00 << 3  /* slave output disable : don't care when master */
+
+#ifndef SSPCPSR_VAL
+#define SSPCPSR_VAL 0x04
+#endif
+
+
+void lcd_spi_tx(uint8_t data) {
+  SpiClearRti();
+  SpiEnableRti();
+  SpiEnable();
+  SSPDR = data;
+}
+
+void lcd_dogm_init_hw( void ) {
+  /* setup pins for SSP (SCK, MOSI) */
+  PINSEL1 |= PINSEL1_SCK | PINSEL1_MOSI;
+
+  /* setup SSP */
+  SSPCR0 = SSP_DSS | SSP_FRF | SSP_CPOL | SSP_CPHA | SSP_SCR;
+  SSPCR1 = SSP_LBM | SSP_MS | SSP_SOD;
+  SSPCPSR = SSPCPSR_VAL; /* Prescaler */
+
+  /* SS, RS pin is output */
+  SetBit(LCDDOGM_SS_IODIR, LCDDOGM_SS_PIN);
+  SetBit(LCDDOGM_RS_IODIR, LCDDOGM_RS_PIN);
+  /* unselected lcd */
+  lcddogmUnselect();
+
+  /* Configure interrupt vector for SPI */
+  VICIntSelect &= ~VIC_BIT(VIC_SPI1);   /* SPI1 selected as IRQ */
+  VICIntEnable = VIC_BIT(VIC_SPI1);     /* SPI1 interrupt enabled */
+  VICVectCntl7 = VIC_ENABLE | VIC_SPI1;
+  VICVectAddr7 = (uint32_t)SPI1_ISR;    /* address of the ISR */
+}
+
+void SPI1_ISR(void) {
+  ISR_ENTRY();
+
+  while (bit_is_set(SSPSR, RNE)) {
+    uint16_t foo __attribute__ ((unused));
+    foo = SSPDR;
+  }
+  SpiClearRti();                  /* clear interrupt */
+  SpiDisableRti();    
+  SpiDisable ();
+  lcddogmUnselect();
+
+  VICVectAddr = 0x00000000; /* clear this interrupt from the VIC */
+  ISR_EXIT();
+}
+

Added: paparazzi3/trunk/sw/airborne/arch/lpc21/modules/display/lcd_dogm_hw.h
===================================================================
--- paparazzi3/trunk/sw/airborne/arch/lpc21/modules/display/lcd_dogm_hw.h       
                        (rev 0)
+++ paparazzi3/trunk/sw/airborne/arch/lpc21/modules/display/lcd_dogm_hw.h       
2010-10-30 22:01:09 UTC (rev 6308)
@@ -0,0 +1,48 @@
+#ifndef LCD_DOGM_HW_H
+#define LCD_DOGM_HW_H
+
+#include <stdbool.h>
+#include "std.h"
+#include "spi_hw.h"
+#include "led.h"
+
+
+#define LCDDOGM_SS_PORT 0
+#define LCDDOGM_SS_PIN 20
+
+#define LCDDOGM_RS_PORT 0
+#define LCDDOGM_RS_PIN 16
+
+#define LCDDOGM_IO__(port, reg) IO ## port ## reg
+#define LCDDOGM_IO_(port, reg) LCDDOGM_IO__(port, reg)
+
+#define LCDDOGM_SS_IOCLR LCDDOGM_IO_(LCDDOGM_SS_PORT, CLR)
+#define LCDDOGM_SS_IODIR LCDDOGM_IO_(LCDDOGM_SS_PORT, DIR)
+#define LCDDOGM_SS_IOSET LCDDOGM_IO_(LCDDOGM_SS_PORT, SET)
+
+#define LCDDOGM_RS_IOCLR LCDDOGM_IO_(LCDDOGM_RS_PORT, CLR)
+#define LCDDOGM_RS_IODIR LCDDOGM_IO_(LCDDOGM_RS_PORT, DIR)
+#define LCDDOGM_RS_IOSET LCDDOGM_IO_(LCDDOGM_RS_PORT, SET)
+
+#define lcddogmSelect() {      \
+    SetBit(LCDDOGM_SS_IOCLR, LCDDOGM_SS_PIN);  \
+  }
+
+#define lcddogmUnselect() { \
+    SetBit(LCDDOGM_SS_IOSET, LCDDOGM_SS_PIN);  \
+  }
+
+#define lcddogmCmdMode() {     \
+    SetBit(LCDDOGM_RS_IOCLR, LCDDOGM_RS_PIN);  \
+  }
+
+#define lcddogmDataMode() { \
+    SetBit(LCDDOGM_RS_IOSET, LCDDOGM_RS_PIN);  \
+  }
+
+extern void lcd_spi_tx(uint8_t data);
+extern void lcd_dogm_init_hw( void );
+
+
+#endif /* LCD_DOGM_HW_H */
+

Added: paparazzi3/trunk/sw/airborne/modules/display/lcd_dogm.c
===================================================================
--- paparazzi3/trunk/sw/airborne/modules/display/lcd_dogm.c                     
        (rev 0)
+++ paparazzi3/trunk/sw/airborne/modules/display/lcd_dogm.c     2010-10-30 
22:01:09 UTC (rev 6308)
@@ -0,0 +1,127 @@
+/*
+ * $Id$
+ *  
+ * Copyright (C) 2010  Martin Mueller
+ *
+ * This file is part of paparazzi.
+ *
+ * paparazzi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * paparazzi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with paparazzi; see the file COPYING.  If not, write to
+ * the Free Software Foundation, 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA. 
+ *
+ */
+
+/*
+   initial version, needs polishing!
+
+   3 line LCD at 3.3V
+
+   EA DOGM163 <-> LPC2148 SPI1
+
+   SI             MOSI
+   CLK            SCK
+   RS             DRDY (used to switch cmd/data)
+   CSB            SSEL
+
+*/
+
+#include "display/lcd_dogm_hw.h"  
+#include "lcd_dogm.h"
+
+
+void lcd_cmd(uint8_t command) {
+  uint32_t i;
+  for (i=0;i<20000;i++);
+  lcddogmSelect();
+  lcddogmCmdMode();
+  lcd_spi_tx(command);
+}
+
+void lcd_data(uint8_t data) {
+  uint32_t i;
+  for (i=0;i<100000;i++);
+  lcddogmSelect();
+  lcddogmDataMode();
+  lcd_spi_tx(data);
+}
+
+void lcd_dogm_init( void ) {
+  uint32_t i;
+
+  for (i=0;i<100000;i++);
+  lcd_dogm_init_hw();
+
+  /* Write configuration */
+  lcd_cmd(DOGM_FUN_SET_1);
+  lcd_cmd(DOGM_BIAS_SET);
+  lcd_cmd(DOGM_PWR_CTRL);
+  lcd_cmd(DOGM_FOLLOWER);
+  lcd_cmd(DOGM_CONTRAST);
+  lcd_cmd(DOGM_DISP_ON);
+  lcd_cmd(DOGM_CLEAR);
+  lcd_cmd(DOGM_ENTRY_MODE);
+
+  /* sample data */
+  lcd_data('C');
+  lcd_data('i');
+  lcd_data('r');
+  lcd_data('c');
+  lcd_data('l');
+  lcd_data('e');
+  lcd_data('C');
+  lcd_data('W');
+  lcd_data(' ');
+  lcd_data('9');
+  lcd_data('9');
+  lcd_data(' ');
+  lcd_data('1');
+  lcd_data('0');
+  lcd_data('.');
+  lcd_data('3');
+
+  lcd_data('1');
+  lcd_data('2');
+  lcd_data('.');
+  lcd_data('6');
+  lcd_data(' ');
+  lcd_data('M');
+  lcd_data(' ');
+  lcd_data('1');
+  lcd_data('2');
+  lcd_data('+');
+  lcd_data('3');
+  lcd_data(' ');
+  lcd_data('1');
+  lcd_data('4');
+  lcd_data('9');
+  lcd_data('3');
+
+  lcd_data('o');
+  lcd_data('k');
+  lcd_data(' ');
+  lcd_data('3');
+  lcd_data(' ');
+  lcd_data('0');
+  lcd_data('2');
+  lcd_data('1');
+  lcd_data(':');
+  lcd_data('3');
+  lcd_data('4');
+  lcd_data(' ');
+  lcd_data('1');
+  lcd_data('5');
+  lcd_data('0');
+  lcd_data('0');
+}
+

Added: paparazzi3/trunk/sw/airborne/modules/display/lcd_dogm.h
===================================================================
--- paparazzi3/trunk/sw/airborne/modules/display/lcd_dogm.h                     
        (rev 0)
+++ paparazzi3/trunk/sw/airborne/modules/display/lcd_dogm.h     2010-10-30 
22:01:09 UTC (rev 6308)
@@ -0,0 +1,25 @@
+#ifndef LCD_DOGM_H
+#define LCD_DOGM_H
+
+#include <stdbool.h>
+#include "std.h"
+#include "spi_hw.h"
+#include "led.h"
+
+/* EA DOGM163, 3 line LCD at 3.3V */
+#define DOGM_FUN_SET_1         0x39
+#define DOGM_BIAS_SET   0x15
+#define DOGM_PWR_CTRL   0x55
+#define DOGM_FOLLOWER   0x6E
+#define DOGM_CONTRAST   0x70
+#define DOGM_FUN_SET_2         0x38
+#define DOGM_DISP_ON   0x0C
+#define DOGM_CLEAR     0x01
+#define DOGM_ENTRY_MODE        0x06
+
+extern void lcd_cmd(uint8_t command);
+extern void lcd_data(uint8_t data);
+extern void lcd_dogm_init( void );
+
+#endif /* LCD_DOGM_H */
+




reply via email to

[Prev in Thread] Current Thread [Next in Thread]