aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlynxeyed-atsu <lynxeyed@xj9.so-net.ne.jp>2012-09-25 21:32:32 +0900
committerlynxeyed-atsu <lynxeyed@xj9.so-net.ne.jp>2012-09-25 21:32:32 +0900
commit5c9eb1b24ed4cfa7eae59ffbc24bdbbce814ba35 (patch)
tree621f90d90f4a046136411c75b3ebc4889b640f23 /src
parentedb6aabe187a08cb67947fcfce13fefd26e42bb6 (diff)
apply a patch made by audin to a src/coreHEADmaster
audin fixed some bugs about Print class and gpio function with interruption for us. thank you!
Diffstat (limited to 'src')
-rwxr-xr-xsrc/Samples/SpiLcd.cpp457
-rwxr-xr-xsrc/Samples/SpiLcd.h94
-rwxr-xr-xsrc/Samples/TFTLCD.h (renamed from src/TFTLCD/TFTLCD.h)0
-rwxr-xr-xsrc/Samples/maryoled.cpp (renamed from src/core/maryoled.cpp)0
-rwxr-xr-xsrc/Samples/maryoled.h (renamed from src/core/maryoled.h)0
-rwxr-xr-xsrc/core/Print.cpp252
-rwxr-xr-xsrc/core/gpio.cpp685
-rwxr-xr-xsrc/core/gpio_int.cpp306
8 files changed, 1188 insertions, 606 deletions
diff --git a/src/Samples/SpiLcd.cpp b/src/Samples/SpiLcd.cpp
new file mode 100755
index 0000000..10d870c
--- /dev/null
+++ b/src/Samples/SpiLcd.cpp
@@ -0,0 +1,457 @@
+/* mbed Nokia LCD Library
+ * Atsu
+ */
+
+#include "delay.h"
+#include "SpiLcd.h"
+#include <math.h>
+
+
+#define LCD_ROWS 15
+#define LCD_COLS 16
+#define LCD_WIDTH 128
+#define LCD_HEIGHT 160
+#define LCD_FREQUENCY 20000000
+
+//MARY Pin Assign
+//#define LCD_VCC_ON C21
+//#define LCD_CS C33
+//#define LCD_RES C31
+
+//LPCXpresso pin Assign (MARMEX-SLOT1)
+//#define LCD_VCC_ON P0_7
+//#define LCD_CS P0_2
+//#define LCD_RES P0_1
+
+SPILCD slcd;
+
+SPILCD::SPILCD()
+{
+ this->LCD_VCC_ON = C21;
+ this->LCD_CS = C33;
+ this->LCD_RES = C31;
+ this->device = ST7735;
+ port = marySSP0;
+ _row = 0;
+ _column = 0;
+ _foreground = 0x00FFFFFF;
+ _background = 0x00000000;
+
+}
+
+SPILCD::~SPILCD()
+{
+}
+void SPILCD::reset(SSP_PORT port)
+{
+ this->port = port;
+ if(port==LPCXSSP0) //LPCXpresso 1114 + MAPLE
+ {
+ this->LCD_VCC_ON = P0_7;
+ this->LCD_CS = P0_2;
+ this->LCD_RES = P0_1;
+ }
+ pinMode(LCD_VCC_ON,OUTPUT);
+ pinMode(LCD_RES,OUTPUT);
+ pinMode(LCD_CS,OUTPUT);
+
+ digitalWrite(LCD_RES,HIGH);
+ digitalWrite(LCD_VCC_ON,LOW);
+
+ reset();
+ return;
+}
+void SPILCD::reset() {
+
+ command(0x11);//Sleep out
+ delay(120);
+ //ST7735R Frame Rate
+ command(0xB1);
+ data(0x01);
+ data(0x2C);
+ data(0x2D);
+ command(0xB2);
+ data(0x01);
+ data(0x2C);
+ data(0x2D);
+ command(0xB3);
+ data(0x01);
+ data(0x2C);
+ data(0x2D);
+ data(0x01);
+ data(0x2C);
+ data(0x2D);
+ //------------------------------------End ST7735R Frame Rate-----------------------------------------//
+ command(0xB4);//Column inversion
+ data(0x07);
+ //------------------------------------ST7735R Power Sequence-----------------------------------------//
+ command(0xC0);
+ data(0xA2);
+ data(0x02);
+ data(0x84);
+ command(0xC1);
+ data(0xC5);
+ command(0xC2);
+ data(0x0A);
+ data(0x00);
+ command(0xC3);
+ data(0x8A);
+ data(0x2A);
+ command(0xC4);
+ data(0x8A);
+ data(0xEE);
+ //---------------------------------End ST7735R Power Sequence-------------------------------------//
+ command(0xC5);//VCOM
+ data(0x0E);
+ command(0x36);//MX, MY, RGB mode
+ data(0xC8);
+ //------------------------------------ST7735R Gamma Sequence-----------------------------------------//
+ command(0xe0);
+ data(0x02);
+ data(0x1c);
+ data(0x07);
+ data(0x12);
+ data(0x37);
+ data(0x32);
+ data(0x29);
+ data(0x2d);
+ data(0x29);
+ data(0x25);
+ data(0x2b);
+ data(0x39);
+ data(0x00);
+ data(0x01);
+ data(0x03);
+ data(0x10);
+ command(0xe1);
+ data(0x03);
+ data(0x1d);
+ data(0x07);
+ data(0x06);
+ data(0x2e);
+ data(0x2c);
+ data(0x29);
+ data(0x2d);
+ data(0x2e);
+ data(0x2e);
+ data(0x37);
+ data(0x3f);
+ data(0x00);
+ data(0x00);
+ data(0x02);
+ data(0x10);
+ command(0x2A);
+ data(0x00);
+ data(0x02);
+ data(0x00);
+ data(0x81);
+
+ command(0x2B);
+ data(0x00);
+ data(0x01);
+ data(0x00);
+ data(0xA0);
+ //------------------------------------End ST7735R Gamma Sequence-----------------------------------------//
+
+ command(0x3A);
+ data(0x05);
+ //command(0x3A);//65k mode
+ //data(0x05);
+ command(0x29);//Display on
+
+}
+
+void SPILCD::command(int value)
+{
+ digitalWrite(LCD_CS, LOW);
+ digitalWrite(LCD_RES, LOW);
+
+ SPI.transfer(value & 0xff);
+
+ digitalWrite(LCD_CS,HIGH);
+}
+
+void SPILCD::data(int value)
+{
+ digitalWrite(LCD_CS,LOW);
+ digitalWrite(LCD_RES,HIGH);
+
+ SPI.transfer(value & 0xff);
+
+ digitalWrite(LCD_CS, HIGH);
+}
+
+void SPILCD::_window( int x, int y, int width, int height )
+{
+ int x1 = x + 0;
+ int y1 = y + 0;
+ int x2 = x1 + width - 1;
+ int y2 = y1 + height - 1;
+
+// TODO: fix this frame-Command new
+// command( SET_COLUMN_ADDRESS );
+// data( x1 );
+// data( x2 );
+// command( SET_ROW_ADDRESS );
+// data( y1 );
+// data( y2 );
+// command( WRITE_RAM_COMMAND );
+
+}
+
+void SPILCD::WindowReset(void)
+{
+ command( SET_COLUMN_ADDRESS );
+ data( 0 );
+ data( 127 );
+ command( SET_ROW_ADDRESS );
+ data( 0 );
+ data( 127 );
+ command( WRITE_RAM_COMMAND );
+}
+
+
+
+
+const unsigned char FONT8x8[97][8] = {
+ {0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00}, // columns, rows, num_bytes_per_char
+ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space 0x20
+ {0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00}, // !
+ {0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00}, // "
+ {0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00}, // #
+ {0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00}, // $
+ {0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00}, // %
+ {0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00}, // &
+ {0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00}, // '
+ {0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00}, // (
+ {0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00}, // )
+ {0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00}, // *
+ {0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00}, // +
+ {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30}, // ,
+ {0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00}, // -
+ {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00}, // .
+ {0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00}, // / (forward slash)
+ {0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00}, // 0 0x30
+ {0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00}, // 1
+ {0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00}, // 2
+ {0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00}, // 3
+ {0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00}, // 4
+ {0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00}, // 5
+ {0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00}, // 6
+ {0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00}, // 7
+ {0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00}, // 8
+ {0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00}, // 9
+ {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00}, // :
+ {0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30}, // ;
+ {0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00}, // <
+ {0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00}, // =
+ {0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00}, // >
+ {0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00}, // ?
+ {0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00}, // @ 0x40
+ {0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00}, // A
+ {0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00}, // B
+ {0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00}, // C
+ {0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00}, // D
+ {0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00}, // E
+ {0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00}, // F
+ {0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00}, // G
+ {0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00}, // H
+ {0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // I
+ {0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00}, // J
+ {0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00}, // K
+ {0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00}, // L
+ {0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00}, // M
+ {0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00}, // N
+ {0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00}, // O
+ {0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00}, // P 0x50
+ {0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00}, // Q
+ {0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00}, // R
+ {0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00}, // S
+ {0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00}, // T
+ {0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00}, // U
+ {0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00}, // V
+ {0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00}, // W
+ {0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00}, // X
+ {0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00}, // Y
+ {0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00}, // Z
+ {0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00}, // [
+ {0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00}, // \ (back slash)
+ {0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00}, // ]
+ {0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00}, // ^
+ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF}, // _
+ {0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00}, // ` 0x60
+ {0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00}, // a
+ {0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00}, // b
+ {0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00}, // c
+ {0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00}, // d
+ {0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00}, // e
+ {0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00}, // f
+ {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C}, // g
+ {0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00}, // h
+ {0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00}, // i
+ {0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C}, // j
+ {0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00}, // k
+ {0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00}, // l
+ {0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00}, // m
+ {0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00}, // n
+ {0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00}, // o
+ {0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78}, // p
+ {0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F}, // q
+ {0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00}, // r
+ {0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00}, // s
+ {0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00}, // t
+ {0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00}, // u
+ {0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00}, // v
+ {0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00}, // w
+ {0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00}, // x
+ {0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C}, // y
+ {0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00}, // z
+ {0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00}, // {
+ {0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00}, // |
+ {0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00}, // }
+ {0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00}, // ~
+ {0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00}
+}; // DEL
+
+void SPILCD::locate(int column, int row) {
+ _column = column;
+ _row = row;
+}
+
+void SPILCD::newline() {
+ _column = 0;
+ _row++;
+ if (_row >= rows() ) {
+ _row = 0;
+ }
+}
+
+void SPILCD::_putp( int colour ) {
+ /*int cnv = 0;
+
+ cnv = (colour >> 8) & 0xf800;
+ cnv |= (colour >> 5) & 0x07e0;
+ cnv |= (colour >> 3) & 0x001f;
+
+ data( cnv >> 8);
+ data( cnv );
+ */
+ unsigned long data1, data2;
+ data1 = ((colour >> 8) & 0xff) | 0x100;
+ data2 = (colour & 0x0ff) | 0x100;
+ data(data1);
+ data(data2);
+ }
+int SPILCD::_putc(int value) {
+ int x = _column * 8; // FIXME: Char sizes
+ int y = _row * 8;
+ bitblit(x + 1, y + 1, 8, 8, (char*)&(FONT8x8[value - 0x1F][0]));
+
+ _column++;
+
+ if (_column >= SPILCD_COLS) {
+ _row++;
+ _column = 0;
+ }
+
+ if (_row >= SPILCD_ROWS) {
+ _row = 0;
+ }
+
+ return value;
+}
+
+void SPILCD::cls( void ) {
+ fill( 0, 0, SPILCD_WIDTH , SPILCD_HEIGHT, _background );
+ _row = 0;
+ _column = 0;
+}
+
+
+void SPILCD::window(int x, int y, int width, int height) {
+ // digitalWrite( LCD_CS, LOW );
+ _window(x, y, width, height);
+ //digitalWrite( LCD_CS, HIGH );
+}
+
+void SPILCD::putp(int colour) {
+ //digitalWrite( LCD_CS, LOW );
+ _putp(colour);
+ //digitalWrite( LCD_CS, HIGH );
+}
+
+
+void SPILCD::pixel(int x, int y, int colour) {
+ //digitalWrite( LCD_CS, LOW );
+ _window(x, y, 1, 1);
+ _putp(colour);
+ //digitalWrite( LCD_CS, HIGH );
+}
+
+void SPILCD::fill( int x, int y, int width, int height, int colour )
+{
+ digitalWrite( LCD_CS, LOW );
+ _window( x, y, width, height );
+
+ for (int i = 0; i < width * height; i++ ) {
+ _putp( colour );
+ }
+
+ _window( 0, 0, SPILCD_WIDTH, SPILCD_HEIGHT );
+ digitalWrite( LCD_CS, HIGH );
+}
+
+
+void SPILCD::blit( int x, int y, int width, int height, const int* colour ) {
+ digitalWrite( LCD_CS, LOW );
+ _window( x, y, width, height );
+
+ for (int i = 0; i < width * height; i++ ) {
+ _putp( colour[i] );
+ }
+ _window( 0, 0, SPILCD_WIDTH, SPILCD_HEIGHT );
+ digitalWrite( LCD_CS, HIGH );
+}
+
+
+void SPILCD::bitblit( int x, int y, int width, int height, const char* bitstream ) {
+ digitalWrite( LCD_CS, LOW );
+ _window( x, y, width, height );
+
+ for (int i = 0; i < height * width; i++ ) {
+ int byte = i / 8;
+ int bit = i % 8;
+ int colour = ((bitstream[ byte ] << bit) & 0x80) ? _foreground : _background;
+ _putp( colour );
+ }
+ _window( 0, 0, _width, _height );
+ digitalWrite( LCD_CS, HIGH );
+}
+
+void SPILCD::foreground(int c) {
+ _foreground = c;
+ return;
+}
+
+void SPILCD::background(int c) {
+ _background = c;
+ return;
+}
+
+int SPILCD::width() {
+ return SPILCD_WIDTH;
+}
+
+int SPILCD::height() {
+ return SPILCD_HEIGHT;
+}
+
+int SPILCD::columns() {
+ return SPILCD_COLS;
+}
+
+int SPILCD::rows() {
+ return SPILCD_ROWS;
+}
+
+
diff --git a/src/Samples/SpiLcd.h b/src/Samples/SpiLcd.h
new file mode 100755
index 0000000..be912cc
--- /dev/null
+++ b/src/Samples/SpiLcd.h
@@ -0,0 +1,94 @@
+/*
+ * SpiLcd.h
+ *
+ * Created on: 2012/08/01
+ * Author: lynxeyed
+ */
+
+#ifndef SPILCD_H_
+#define SPILCD_H_
+
+/**************************************************************************//**
+ * @file SpiLcd.h
+ * @brief Arduino-like library for Cortex-M0 Series
+ * @version v.0.50
+ * @date 1. August 2011.
+ * @author lynxeyed
+ * @note Copyright (c) 2012 Lynx-EyED's Klavier and Craft-works. <BR>
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions: <BR>
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.<BR>
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ ******************************************************************************/
+
+#include "SPI.h"
+#include "gpio.h"
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+typedef enum {ST7735,Nokia6610,Nokia6100,PCF8833} LCD_DEVICES; // Defaults:ST7735
+
+class SPILCD {
+private:
+ SSP_PORT port;
+ LCD_DEVICES device;
+ int LCD_VCC_ON;
+ int LCD_CS;
+ int LCD_RES;
+ int _row;
+ int _column;
+ int _foreground;
+ int _background;
+ int _width;
+ int _height;
+
+
+
+public:
+ SPILCD(); // announce the constructor to initialize
+ ~SPILCD();
+
+ void reset();
+ void reset(SSP_PORT port);
+ void command( int value );
+ void data( int value );
+ void _window( int x, int y, int width, int height );
+ void locate(int column, int row);
+ void newline();
+ void _putp( int colour );
+ int _putc( int value );
+ void cls( void );
+ void window( int x, int y, int width, int height );
+ void WindowReset(void);
+ void putp( int colour );
+ void pixel( int x, int y, int colour );
+ void fill( int x, int y, int width, int height, int colour );
+ void blit( int x, int y, int width, int height, const int* colour );
+ void bitblit( int x, int y, int width, int height, const char* bitstream );
+ void foreground(int c);
+ void background(int c);
+ int width();
+ int height();
+ int columns();
+ int rows();
+};
+
+extern SPILCD slcd;
+
+#ifdef __cplusplus
+ }
+#endif
+#endif /* SPILCD_H_ */
diff --git a/src/TFTLCD/TFTLCD.h b/src/Samples/TFTLCD.h
index 797383c..797383c 100755
--- a/src/TFTLCD/TFTLCD.h
+++ b/src/Samples/TFTLCD.h
diff --git a/src/core/maryoled.cpp b/src/Samples/maryoled.cpp
index 8df935c..8df935c 100755
--- a/src/core/maryoled.cpp
+++ b/src/Samples/maryoled.cpp
diff --git a/src/core/maryoled.h b/src/Samples/maryoled.h
index 3998f8d..3998f8d 100755
--- a/src/core/maryoled.h
+++ b/src/Samples/maryoled.h
diff --git a/src/core/Print.cpp b/src/core/Print.cpp
index b26848f..e259ac4 100755
--- a/src/core/Print.cpp
+++ b/src/core/Print.cpp
@@ -1,124 +1,128 @@
-#include "Print.h"
-
-void Print::print(const char *s) //uart_puts
-{
- int n;
- for (n = 0; *s; s++, n++) {
- write(*s);
- }
- //return n;
- return;
-}
-
-void Print::print(int val, RADIX_FORMAT format)
-{
- if(format == BYTE)
- {
- write((char)(val & 0xff));
- return;
- }
- char s[33];
- int i,j;
- i=j=0; // header of strings
- if (val<0)
- { //minus value
- s[i]='-';
- val=~val+1;
- i++;
- j++;
- }
- switch(format)
- {
- case BIN:
- while (val>0)
- { // do until zero
- s[i++]=radix_bin[val%format];
- val/=format;
- }
- break;
-
- case OCT:
- while (val>0)
- { // do until zero
- s[i++]=radix_oct[val%format];
- val/=format;
- }
- break;
-
- case DEC: //RADIX = Decimal
- while (val>0)
- { // do until zero
- s[i++]=radix_dec[val%format];
- val/=format;
- }
- break;
-
- case HEX: //RADIX = Hexadecimal
- while (val>0)
- { // do until zero
- s[i++]=radix_hex[val%format];
- val/=format;
- }
- break;
- default:
- break;
- }
- s[i--]='\0'; // EOF
- while (j<i)
- { // reverse strings array
- char t;
- t=s[j]; s[j]=s[i]; s[i]=t;
- j++; i--;
- }
- print(s);
-
- return ;
-}
-
-void Print::write(const char *s, int length)
-{
- int n;
- for(n=0;n<length;s++,n++)
- {
- write(*s);
- }
- return;
-}
-
-void Print::println(const char *s)
-{
- print(s);
- println();
- return;
-}
-
-
-void Print::println(int val, RADIX_FORMAT format)
-{
- print(val,format);
- println();
- return;
-}
-
-void Print::println(void)
-{
- write ('\r');
- write ('\n');
- return;
-}
-
-void Print::print(const char c)
-{
- write(c);
- return;
-}
-
-void Print::println(const char c)
-{
- write(c);
- println();
- return;
-}
-
-
-
+#include "Print.h"
+
+void Print::print(const char *s) //uart_puts
+{
+ int n;
+ for (n = 0; *s; s++, n++) {
+ write(*s);
+ }
+ //return n;
+ return;
+}
+
+void Print::print(int val, RADIX_FORMAT format)
+{
+ if( val == 0){
+ write('0');
+ return;
+ }
+ if(format == BYTE)
+ {
+ write((char)(val & 0xff));
+ return;
+ }
+ char s[33];
+ int i,j;
+ i=j=0; // header of strings
+ if (val<0)
+ { //minus value
+ s[i]='-';
+ val=~val+1;
+ i++;
+ j++;
+ }
+ switch(format)
+ {
+ case BIN:
+ while (val>0)
+ { // do until zero
+ s[i++]=radix_bin[val%format];
+ val/=format;
+ }
+ break;
+
+ case OCT:
+ while (val>0)
+ { // do until zero
+ s[i++]=radix_oct[val%format];
+ val/=format;
+ }
+ break;
+
+ case DEC: //RADIX = Decimal
+ while (val>0)
+ { // do until zero
+ s[i++]=radix_dec[val%format];
+ val/=format;
+ }
+ break;
+
+ case HEX: //RADIX = Hexadecimal
+ while (val>0)
+ { // do until zero
+ s[i++]=radix_hex[val%format];
+ val/=format;
+ }
+ break;
+ default:
+ break;
+ }
+ s[i--]='\0'; // EOF
+ while (j<i)
+ { // reverse strings array
+ char t;
+ t=s[j]; s[j]=s[i]; s[i]=t;
+ j++; i--;
+ }
+ print(s);
+
+ return ;
+}
+
+void Print::write(const char *s, int length)
+{
+ int n;
+ for(n=0;n<length;s++,n++)
+ {
+ write(*s);
+ }
+ return;
+}
+
+void Print::println(const char *s)
+{
+ print(s);
+ println();
+ return;
+}
+
+
+void Print::println(int val, RADIX_FORMAT format)
+{
+ print(val,format);
+ println();
+ return;
+}
+
+void Print::println(void)
+{
+ write ('\r');
+ write ('\n');
+ return;
+}
+
+void Print::print(const char c)
+{
+ write(c);
+ return;
+}
+
+void Print::println(const char c)
+{
+ write(c);
+ println();
+ return;
+}
+
+
+
diff --git a/src/core/gpio.cpp b/src/core/gpio.cpp
index 6cfe41e..db69e14 100755
--- a/src/core/gpio.cpp
+++ b/src/core/gpio.cpp
@@ -1,329 +1,356 @@
-#include "gpio.h"
-
-
-// IOCON:Cortex-M0 depend Settings
-//#ifdef __NXP_LPC1114
-#define PORT_BIT_COUNT 12 // up to 12 I/O lines per port
-#define PORT_COUNT 4 // up to 4 ports
-
-const uint8_t IOCON_LUT[PORT_COUNT][PORT_BIT_COUNT] = {
- { 0x0C, 0x10, 0x1C, 0x2C, 0x30, 0x34, 0x4C, 0x50, 0x60, 0x64, 0x68, 0x74 },
- { 0x78, 0x7C, 0x80, 0x90, 0x94, 0xA0, 0xA4, 0xA8, 0x14, 0x38, 0x6C, 0x98 },
- { 0x08, 0x28, 0x5C, 0x8C, 0x40, 0x44, 0x00, 0x20, 0x24, 0x54, 0x58, 0x70 },
- { 0x84, 0x88, 0x9C, 0xAC, 0x3C, 0x48 }
-};
-
-#define IOCONAddress(port,bit) ((volatile uint16_t * const) (LPC_IOCON_BASE + IOCON_LUT[port][bit]))
-#define SetIOCON(port, bit, ioconmask, ioconbits) \
- *IOCONAddress((port),(bit)) = (*IOCONAddress((port),(bit)) & ~(ioconmask)) | (ioconbits)
-
-typedef enum {
- GPIO_DIR_INPUT = 0,
- GPIO_DIR_OUTPUT = 1,
- IOCON_MODE_MASK = (3<<3),
- IOCON_MODE_PULLUP = (2<<3),
- IOCON_MODE_PULLDOWN = (1<<3),
- IOCON_MODE_REPEATER = (3<<3),
- IOCON_MODE_INACTIVE = (0<<3),
- IOCON_FUNC_MASK = 7,
- IOCON_FUNC_0 = 0,
- IOCON_FUNC_1 = 1,
- IOCON_FUNC_2 = 2,
- IOCON_FUNC_3 = 3,
- IOCON_FUNC_4 = 4,
- IOCON_FUNC_5 = 5,
- IOCON_FUNC_6 = 6,
- IOCON_FUNC_7 = 7,
- IOCON_HYS_MASK = (1<<5),
- IOCON_HYS_ENABLE = (1<<5),
- IOCON_HYS_DISABLE = (0<<5),
- IOCON_ADMODE_MASK = (1<<7),
- IOCON_ADMODE_ANALOG = (0<<7),
- IOCON_ADMODE_DIGITAL = (1<<7)
-} IOCON_BITFIELD_ENUM;
-
-//#endif
-
-/* =======================================
-* Macros and functions for Defining MARY's GPIO Assign
-*
-* CN1_7,8 : (PIO1_2,PIO1_1)
-* should be C17,C18
-*
-* CN2_1...8 : (PIO1_4,PIO1_11,PIO1_7,PIO1_5,PIO3_2,PIO2_0,PIO1_6,PIO0_1)
-* should be C21,C22,C23,C24,C25,C26,C27,C28
-*
-* CN3_1...8 : (PIO1_8,PIO0_3,PIO0_2,PIO3_4,PIO0_4,PIO3_5,PIO0_5,PIO1_7)
-* should be C31,C32,C33,C34,C35,C36,C37,C38
-*
-* CN4_1...7 : (PIO1_9,PIO1_10,PIO0_6,PIO0_11,PIO0_8,PIO1_0,PIO0_9)
-* should be C41,C42,C43,C44,C45,C46,C47
-*
-* see also mary_pinAssign[...] in "gpio.h"
-* =======================================
-*/
-
-
-void pinMode(int pin,pinModeState state)
-{
- if(pin < 22) //arduinoPinAssign(0~21)
- {
- //IOCON settings use as GPIO
- if((arduino_pinAssign[pin * 2]) == 0)//PIO0_X
- {
- switch(arduino_pinAssign[pin * 2 + 1])
- {
- case 11: //P0_11
- SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_1);
- break;
- default: //P0_X
- SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_0);
- break;
- }
- }else if((arduino_pinAssign[pin * 2]) == 1)//PIO1_X
- {
- switch(arduino_pinAssign[pin * 2 + 1])
- {
- case _BIT0:
- case _BIT1:
- case _BIT2:
- case _BIT3:
- SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_1);
- break;
- default:
- SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_0);
- break;
- }
- }else //PIO2_X
- {
- SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_0);
- }
-
- if(state == OUTPUT) //OUTPUT
- {
- LPC_GPIO[ arduino_pinAssign[pin * 2] ]->DIR |= (1 << arduino_pinAssign[pin * 2 + 1]);
-
- }else //INPUT
- {
- LPC_GPIO[ arduino_pinAssign[pin * 2] ]->DIR &= ~((1 << arduino_pinAssign[pin * 2 + 1]));
- }
- return;
- }
-
- if(pin < 100) return; //(20~99:reserved)
-
- if(pin < 200) //maryPinAssign(100~119?)
- {
- pin = pin - 100;
- SetIOCON(mary_pinAssign[pin * 2], mary_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_0);
- if(state == OUTPUT) //OUTPUT
- {
- LPC_GPIO[ mary_pinAssign[pin * 2] ]->DIR |= (1 << mary_pinAssign[pin * 2 + 1]);
- }else //INPUT
- {
- LPC_GPIO[ mary_pinAssign[pin * 2] ]->DIR &= ~((1 << mary_pinAssign[pin * 2 + 1]));
- }
- }
- return;
- }
-
-void digitalWrite(int pin,digitalWriteState state)
-{
- if(pin < 22) //arduinoPinAssign(0~21)
- {
- if(state == HIGH) //HIGH
- {
- if(LPC_GPIO[ arduino_pinAssign[pin * 2] ]->DIR & 1<<arduino_pinAssign[pin * 2 + 1])//pin is output
- {
- LPC_GPIO[ arduino_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << arduino_pinAssign[pin * 2 + 1]) ] = (1 << arduino_pinAssign[pin * 2 + 1]);
- }else//pin is input
- {
- SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_MODE_MASK, IOCON_MODE_PULLUP);
- }
- }else //LOW
- {
- if(LPC_GPIO[ arduino_pinAssign[pin * 2] ]->DIR & 1<<arduino_pinAssign[pin * 2 + 1])//pin is output
- {
- LPC_GPIO[ arduino_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << arduino_pinAssign[pin * 2 + 1]) ] &= ~((1 << arduino_pinAssign[pin * 2 + 1]));
- }else // pin is input
- {
- SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_MODE_MASK, IOCON_MODE_INACTIVE);
- }
- }
-
- return;
- }
-
-
- if(pin < 100) return; //arduinoPinAssign(20~99:reserved)
-
- if(pin < 200) //maryPinAssign(100~119?)
- {
- pin = pin - 100;
- if(state == HIGH) //HIGH
- {
- if(LPC_GPIO[ mary_pinAssign[pin * 2] ]->DIR & 1<<mary_pinAssign[pin * 2 + 1])//pin is output
- {
- LPC_GPIO[ mary_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << mary_pinAssign[pin * 2 + 1]) ] = (1 << mary_pinAssign[pin * 2 + 1]);
- }else//pin is input
- {
- SetIOCON(mary_pinAssign[pin * 2], mary_pinAssign[pin * 2 + 1], IOCON_MODE_MASK, IOCON_MODE_PULLUP);
- }
- }else //LOW
- {
- if(LPC_GPIO[ mary_pinAssign[pin * 2] ]->DIR & 1<<mary_pinAssign[pin * 2 + 1])//pin is output
- {
- LPC_GPIO[ mary_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << mary_pinAssign[pin * 2 + 1]) ] &= ~((1 << mary_pinAssign[pin * 2 + 1]));
- }else // pin is input
- {
- SetIOCON(mary_pinAssign[pin * 2], mary_pinAssign[pin * 2 + 1], IOCON_MODE_MASK, IOCON_MODE_INACTIVE);
- }
- }
- }
- return;
- }
-
-int digitalRead(int pin)
-{
- volatile int readValue;
- if(pin < 22) //arduinoPinAssign(0~21)
- {
- readValue = (LPC_GPIO[ arduino_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << arduino_pinAssign[pin * 2 + 1]) ])? 1 : 0;
- return readValue;
- }
-
- if(pin < 100) return 0; //(20~99:reserved)
-
- if(pin < 200) //maryPinAssign(100~199?)
- {
- pin = pin - 100;
- readValue = (LPC_GPIO[ mary_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << mary_pinAssign[pin * 2 + 1]) ])? 1 : 0;
- return readValue;
- }
- return 0;
-}
-
-/*****************************************************************************
- ** Function name: GPIOSetInterrupt
- **
- ** Descriptions: Set interrupt sense, event, etc.
- ** edge or level, 0 is edge, 1 is level
- ** single or double edge, 0 is single, 1 is double
- ** active high or low, etc.
- **
- ** parameters: pin num, bit position, sense, single/doube, polarity
- ** Returned value: None
- **
- *****************************************************************************/
-void GPIOSetInterrupt(int pin, int sense, int single, int event) {
- if (pin >= 0 && pin < 22) //arduinoPinAssign(0~21)
- {
- if (sense == 0) {
- LPC_GPIO[arduino_pinAssign[pin * 2]]->IS &= ~((1 << arduino_pinAssign[pin * 2 + 1]));
- /* single or double only applies when sense is 0(edge trigger). */
- if (single == 0)
- LPC_GPIO[arduino_pinAssign[pin * 2]]->IBE
- &= ~((1 << arduino_pinAssign[pin * 2 + 1]));
- else
- LPC_GPIO[arduino_pinAssign[pin * 2]]->IBE
- |= ((1 << arduino_pinAssign[pin * 2 + 1]));
- } else
- LPC_GPIO[arduino_pinAssign[pin * 2]]->IS |= ((1 << arduino_pinAssign[pin * 2 + 1]));
-
- if (event == 0)
- LPC_GPIO[arduino_pinAssign[pin * 2]]->IEV
- &= ~((1 << arduino_pinAssign[pin * 2 + 1]));
- else
- LPC_GPIO[arduino_pinAssign[pin * 2]]->IEV |= ((1 << arduino_pinAssign[pin * 2 + 1]));
- } else if (pin >= 22 && pin < 100) {
- //(22~99:reserved)
- } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
- {
- pin = pin - 100;
- if (sense == 0) {
- LPC_GPIO[mary_pinAssign[pin * 2]]->IS &= ~((1 << mary_pinAssign[pin * 2 + 1]));
- /* single or double only applies when sense is 0(edge trigger). */
- if (single == 0)
- LPC_GPIO[mary_pinAssign[pin * 2]]->IBE &= ~((1 << mary_pinAssign[pin * 2 + 1]));
- else
- LPC_GPIO[mary_pinAssign[pin * 2]]->IBE |= ((1 << mary_pinAssign[pin * 2 + 1]));
- } else
- LPC_GPIO[mary_pinAssign[pin * 2]]->IS |= ((1 << mary_pinAssign[pin * 2 + 1]));
-
- if (event == 0)
- LPC_GPIO[mary_pinAssign[pin * 2]]->IEV &= ~((1 << mary_pinAssign[pin * 2 + 1]));
- else
- LPC_GPIO[mary_pinAssign[pin * 2]]->IEV |= ((1 << mary_pinAssign[pin * 2 + 1]));
- }
-
- return;
-}
-
-void GPIOIntEnable(int pin) {
- if (pin >= 0 && pin < 22) //arduinoPinAssign(0~21)
- {
-
- LPC_GPIO[arduino_pinAssign[pin * 2]]->IE |= (1 << arduino_pinAssign[pin * 2 + 1]);
- } else if (pin >= 22 && pin < 100) { //(20~99:reserved)
- } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
- {
- pin = pin - 100;
- LPC_GPIO[mary_pinAssign[pin * 2]]->IE |= (1 << mary_pinAssign[pin * 2 + 1]);
- }
-
- return;
-}
-
-void GPIOIntDisable(int pin) {
- if (pin >= 0 && pin < 22) //arduinoPinAssign(0~21)
- {
-
- LPC_GPIO[arduino_pinAssign[pin * 2]]->IE &= ~((1 << arduino_pinAssign[pin * 2 + 1]));
- } else if (pin >= 22 && pin < 100) {//(22~99:reserved)
- } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
- {
- pin = pin - 100;
- LPC_GPIO[mary_pinAssign[pin * 2]]->IE &= ~((1 << mary_pinAssign[pin * 2 + 1]));
- }
-
- return;
-}
-
-int GPIOIntStatus(int pin) {
- int regVal = 0;
-
- if (pin >= 0 && pin < 22) //arduinoPinAssign(0~21)
- {
- if (LPC_GPIO[arduino_pinAssign[pin * 2]]->MIS
- & (1 << arduino_pinAssign[pin * 2 + 1])) {
- regVal = 1;
- }
- } else if (pin >= 22 && pin < 100) { //(22~99:reserved)
- } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
- {
- pin = pin - 100;
-
- if (LPC_GPIO[mary_pinAssign[pin * 2]]->MIS
- & (1 << mary_pinAssign[pin * 2 + 1])) {
- regVal = 1;
- }
- }
-
- return regVal;
-}
-
-void GPIOIntClear(int pin) {
- if (pin >= 0 && pin < 22) //arduinoPinAssign(0~21)
- {
-
- LPC_GPIO[arduino_pinAssign[pin * 2]]->IC |= (1 << arduino_pinAssign[pin * 2 + 1]);
- } else if (pin >= 22 && pin < 100) { //(22~99:reserved)
-
- } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
- {
- pin = pin - 100;
- LPC_GPIO[mary_pinAssign[pin * 2]]->IC |= (1 << mary_pinAssign[pin * 2 + 1]);
- }
-
- return;
-}
+#include "gpio.h"
+
+
+// IOCON:Cortex-M0 depend Settings
+//#ifdef __NXP_LPC1114
+#define PORT_BIT_COUNT 12 // up to 12 I/O lines per port
+#define PORT_COUNT 4 // up to 4 ports
+
+const uint8_t IOCON_LUT[PORT_COUNT][PORT_BIT_COUNT] = {
+ { 0x0C, 0x10, 0x1C, 0x2C, 0x30, 0x34, 0x4C, 0x50, 0x60, 0x64, 0x68, 0x74 },
+ { 0x78, 0x7C, 0x80, 0x90, 0x94, 0xA0, 0xA4, 0xA8, 0x14, 0x38, 0x6C, 0x98 },
+ { 0x08, 0x28, 0x5C, 0x8C, 0x40, 0x44, 0x00, 0x20, 0x24, 0x54, 0x58, 0x70 },
+ { 0x84, 0x88, 0x9C, 0xAC, 0x3C, 0x48 }
+};
+
+#define IOCONAddress(port,bit) ((volatile uint16_t * const) (LPC_IOCON_BASE + IOCON_LUT[port][bit]))
+#define SetIOCON(port, bit, ioconmask, ioconbits) \
+ *IOCONAddress((port),(bit)) = (*IOCONAddress((port),(bit)) & ~(ioconmask)) | (ioconbits)
+
+typedef enum {
+ GPIO_DIR_INPUT = 0,
+ GPIO_DIR_OUTPUT = 1,
+ IOCON_MODE_MASK = (3<<3),
+ IOCON_MODE_PULLUP = (2<<3),
+ IOCON_MODE_PULLDOWN = (1<<3),
+ IOCON_MODE_REPEATER = (3<<3),
+ IOCON_MODE_INACTIVE = (0<<3),
+ IOCON_FUNC_MASK = 7,
+ IOCON_FUNC_0 = 0,
+ IOCON_FUNC_1 = 1,
+ IOCON_FUNC_2 = 2,
+ IOCON_FUNC_3 = 3,
+ IOCON_FUNC_4 = 4,
+ IOCON_FUNC_5 = 5,
+ IOCON_FUNC_6 = 6,
+ IOCON_FUNC_7 = 7,
+ IOCON_HYS_MASK = (1<<5),
+ IOCON_HYS_ENABLE = (1<<5),
+ IOCON_HYS_DISABLE = (0<<5),
+ IOCON_ADMODE_MASK = (1<<7),
+ IOCON_ADMODE_ANALOG = (0<<7),
+ IOCON_ADMODE_DIGITAL = (1<<7)
+} IOCON_BITFIELD_ENUM;
+
+//#endif
+
+/* =======================================
+* Macros and functions for Defining MARY's GPIO Assign
+*
+* CN1_7,8 : (PIO1_2,PIO1_1)
+* should be C17,C18
+*
+* CN2_1...8 : (PIO1_4,PIO1_11,PIO1_7,PIO1_5,PIO3_2,PIO2_0,PIO1_6,PIO0_1)
+* should be C21,C22,C23,C24,C25,C26,C27,C28
+*
+* CN3_1...8 : (PIO1_8,PIO0_3,PIO0_2,PIO3_4,PIO0_4,PIO3_5,PIO0_5,PIO1_7)
+* should be C31,C32,C33,C34,C35,C36,C37,C38
+*
+* CN4_1...7 : (PIO1_9,PIO1_10,PIO0_6,PIO0_11,PIO0_8,PIO1_0,PIO0_9)
+* should be C41,C42,C43,C44,C45,C46,C47
+*
+* see also mary_pinAssign[...] in "gpio.h"
+* =======================================
+*/
+
+
+void pinMode(int pin,pinModeState state)
+{
+ if(pin < 22) //arduinoPinAssign(0~21)
+ {
+ //IOCON settings use as GPIO
+ if((arduino_pinAssign[pin * 2]) == 0)//PIO0_X
+ {
+ switch(arduino_pinAssign[pin * 2 + 1])
+ {
+ case 11: //P0_11
+ SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_1);
+ break;
+ default: //P0_X
+ SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_0);
+ break;
+ }
+ }else if((arduino_pinAssign[pin * 2]) == 1)//PIO1_X
+ {
+ switch(arduino_pinAssign[pin * 2 + 1])
+ {
+ case _BIT0:
+ case _BIT1:
+ case _BIT2:
+ case _BIT3:
+ SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_1);
+ break;
+ default:
+ SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_0);
+ break;
+ }
+ }else //PIO2_X
+ {
+ SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_0);
+ }
+
+ if(state == OUTPUT) //OUTPUT
+ {
+ LPC_GPIO[ arduino_pinAssign[pin * 2] ]->DIR |= (1 << arduino_pinAssign[pin * 2 + 1]);
+
+ }else //INPUT
+ {
+ LPC_GPIO[ arduino_pinAssign[pin * 2] ]->DIR &= ~((1 << arduino_pinAssign[pin * 2 + 1]));
+ }
+ return;
+ }
+
+ if(pin < 100) return; //(20~99:reserved)
+
+ if(pin < 200) //maryPinAssign(100~119?)
+ {
+ pin = pin - 100;
+ //IOCON settings use as GPIO
+ if((mary_pinAssign[pin * 2]) == 0)//PIO0_X
+ {
+ switch(mary_pinAssign[pin * 2 + 1])
+ {
+ case 11: //P0_11
+ case 10: //P0_10
+ SetIOCON(mary_pinAssign[pin * 2], mary_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_1);
+ break;
+ default: //P0_X
+ SetIOCON(mary_pinAssign[pin * 2], mary_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_0);
+ break;
+ }
+ }else if((mary_pinAssign[pin * 2]) == 1)//PIO1_X
+ {
+ switch(mary_pinAssign[pin * 2 + 1])
+ {
+ case _BIT0:
+ case _BIT1:
+ case _BIT2:
+ case _BIT3:
+ SetIOCON(mary_pinAssign[pin * 2], mary_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_1);
+ break;
+ default:
+ SetIOCON(mary_pinAssign[pin * 2], mary_pinAssign[pin * 2 + 1], IOCON_FUNC_MASK, IOCON_FUNC_0);
+ break;
+ }
+ }
+ if(state == OUTPUT) //OUTPUT
+ {
+ LPC_GPIO[ mary_pinAssign[pin * 2] ]->DIR |= (1 << mary_pinAssign[pin * 2 + 1]);
+ }else //INPUT
+ {
+ LPC_GPIO[ mary_pinAssign[pin * 2] ]->DIR &= ~((1 << mary_pinAssign[pin * 2 + 1]));
+ }
+ }
+ return;
+ }
+
+void digitalWrite(int pin,digitalWriteState state)
+{
+ if(pin < 22) //arduinoPinAssign(0~21)
+ {
+ if(state == HIGH) //HIGH
+ {
+ if(LPC_GPIO[ arduino_pinAssign[pin * 2] ]->DIR & 1<<arduino_pinAssign[pin * 2 + 1])//pin is output
+ {
+ LPC_GPIO[ arduino_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << arduino_pinAssign[pin * 2 + 1]) ] = (1 << arduino_pinAssign[pin * 2 + 1]);
+ }else//pin is input
+ {
+ SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_MODE_MASK, IOCON_MODE_PULLUP);
+ }
+ }else //LOW
+ {
+ if(LPC_GPIO[ arduino_pinAssign[pin * 2] ]->DIR & 1<<arduino_pinAssign[pin * 2 + 1])//pin is output
+ {
+ LPC_GPIO[ arduino_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << arduino_pinAssign[pin * 2 + 1]) ] &= ~((1 << arduino_pinAssign[pin * 2 + 1]));
+ }else // pin is input
+ {
+ SetIOCON(arduino_pinAssign[pin * 2], arduino_pinAssign[pin * 2 + 1], IOCON_MODE_MASK, IOCON_MODE_INACTIVE);
+ }
+ }
+
+ return;
+ }
+
+
+ if(pin < 100) return; //arduinoPinAssign(20~99:reserved)
+
+ if(pin < 200) //maryPinAssign(100~119?)
+ {
+ pin = pin - 100;
+ if(state == HIGH) //HIGH
+ {
+ if(LPC_GPIO[ mary_pinAssign[pin * 2] ]->DIR & 1<<mary_pinAssign[pin * 2 + 1])//pin is output
+ {
+ LPC_GPIO[ mary_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << mary_pinAssign[pin * 2 + 1]) ] = (1 << mary_pinAssign[pin * 2 + 1]);
+ }else//pin is input
+ {
+ SetIOCON(mary_pinAssign[pin * 2], mary_pinAssign[pin * 2 + 1], IOCON_MODE_MASK, IOCON_MODE_PULLUP);
+ }
+ }else //LOW
+ {
+ if(LPC_GPIO[ mary_pinAssign[pin * 2] ]->DIR & 1<<mary_pinAssign[pin * 2 + 1])//pin is output
+ {
+ LPC_GPIO[ mary_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << mary_pinAssign[pin * 2 + 1]) ] &= ~((1 << mary_pinAssign[pin * 2 + 1]));
+ }else // pin is input
+ {
+ SetIOCON(mary_pinAssign[pin * 2], mary_pinAssign[pin * 2 + 1], IOCON_MODE_MASK, IOCON_MODE_INACTIVE);
+ }
+ }
+ }
+ return;
+ }
+
+int digitalRead(int pin)
+{
+ volatile int readValue;
+ if(pin < 22) //arduinoPinAssign(0~21)
+ {
+ readValue = (LPC_GPIO[ arduino_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << arduino_pinAssign[pin * 2 + 1]) ])? 1 : 0;
+ return readValue;
+ }
+
+ if(pin < 100) return 0; //(20~99:reserved)
+
+ if(pin < 200) //maryPinAssign(100~199?)
+ {
+ pin = pin - 100;
+ readValue = (LPC_GPIO[ mary_pinAssign[pin * 2] ]->MASKED_ACCESS[ (1 << mary_pinAssign[pin * 2 + 1]) ])? 1 : 0;
+ return readValue;
+ }
+ return 0;
+}
+
+/*****************************************************************************
+ ** Function name: GPIOSetInterrupt
+ **
+ ** Descriptions: Set interrupt sense, event, etc.
+ ** edge or level, 0 is edge, 1 is level
+ ** single or double edge, 0 is single, 1 is double
+ ** active high or low, etc.
+ **
+ ** parameters: pin num, bit position, sense, single/doube, polarity
+ ** Returned value: None
+ **
+ *****************************************************************************/
+void GPIOSetInterrupt(int pin, int sense, int single, int event) {
+ if (pin >= 0 && pin < 22) //arduinoPinAssign(0~21)
+ {
+ if (sense == 0) {
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IS &= ~((1 << arduino_pinAssign[pin * 2 + 1]));
+ /* single or double only applies when sense is 0(edge trigger). */
+ if (single == 0)
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IBE
+ &= ~((1 << arduino_pinAssign[pin * 2 + 1]));
+ else
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IBE
+ |= ((1 << arduino_pinAssign[pin * 2 + 1]));
+ } else
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IS |= ((1 << arduino_pinAssign[pin * 2 + 1]));
+
+ if (event == 0)
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IEV
+ &= ~((1 << arduino_pinAssign[pin * 2 + 1]));
+ else
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IEV |= ((1 << arduino_pinAssign[pin * 2 + 1]));
+ } else if (pin >= 22 && pin < 100) {
+ //(22~99:reserved)
+ } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
+ {
+ pin = pin - 100;
+ if (sense == 0) {
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IS &= ~((1 << mary_pinAssign[pin * 2 + 1]));
+ /* single or double only applies when sense is 0(edge trigger). */
+ if (single == 0)
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IBE &= ~((1 << mary_pinAssign[pin * 2 + 1]));
+ else
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IBE |= ((1 << mary_pinAssign[pin * 2 + 1]));
+ } else
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IS |= ((1 << mary_pinAssign[pin * 2 + 1]));
+
+ if (event == 0)
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IEV &= ~((1 << mary_pinAssign[pin * 2 + 1]));
+ else
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IEV |= ((1 << mary_pinAssign[pin * 2 + 1]));
+ }
+
+ return;
+}
+
+void GPIOIntEnable(int pin) {
+ if (pin >= 0 && pin < 22) //arduinoPinAssign(0~21)
+ {
+
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IE |= (1 << arduino_pinAssign[pin * 2 + 1]);
+ } else if (pin >= 22 && pin < 100) { //(20~99:reserved)
+ } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
+ {
+ pin = pin - 100;
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IE |= (1 << mary_pinAssign[pin * 2 + 1]);
+ }
+
+ return;
+}
+
+void GPIOIntDisable(int pin) {
+ if (pin >= 0 && pin < 22) //arduinoPinAssign(0~21)
+ {
+
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IE &= ~((1 << arduino_pinAssign[pin * 2 + 1]));
+ } else if (pin >= 22 && pin < 100) {//(22~99:reserved)
+ } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
+ {
+ pin = pin - 100;
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IE &= ~((1 << mary_pinAssign[pin * 2 + 1]));
+ }
+
+ return;
+}
+
+int GPIOIntStatus(int pin) {
+ int regVal = 0;
+
+ if (pin >= 0 && pin < 22) //arduinoPinAssign(0~21)
+ {
+ if (LPC_GPIO[arduino_pinAssign[pin * 2]]->MIS
+ & (1 << arduino_pinAssign[pin * 2 + 1])) {
+ regVal = 1;
+ }
+ } else if (pin >= 22 && pin < 100) { //(22~99:reserved)
+ } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
+ {
+ pin = pin - 100;
+
+ if (LPC_GPIO[mary_pinAssign[pin * 2]]->MIS
+ & (1 << mary_pinAssign[pin * 2 + 1])) {
+ regVal = 1;
+ }
+ }
+
+ return regVal;
+}
+
+void GPIOIntClear(int pin) {
+ if (pin >= 0 && pin < 22) //arduinoPinAssign(0~21)
+ {
+
+ LPC_GPIO[arduino_pinAssign[pin * 2]]->IC |= (1 << arduino_pinAssign[pin * 2 + 1]);
+ } else if (pin >= 22 && pin < 100) { //(22~99:reserved)
+
+ } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
+ {
+ pin = pin - 100;
+ LPC_GPIO[mary_pinAssign[pin * 2]]->IC |= (1 << mary_pinAssign[pin * 2 + 1]);
+ }
+
+ return;
+}
diff --git a/src/core/gpio_int.cpp b/src/core/gpio_int.cpp
index 27e16c6..d2477e3 100755
--- a/src/core/gpio_int.cpp
+++ b/src/core/gpio_int.cpp
@@ -1,153 +1,153 @@
-#include "gpio.h"
-
-#define EXTERNAL_NUM_INTERRUPTS 22
-volatile static USER_GPIO_FUNC intFunc[EXTERNAL_NUM_INTERRUPTS];
-
-void attachInterrupt(int pin, USER_GPIO_FUNC func, digitalWriteState mode) {
- pinMode(pin, INPUT);
-
- switch (mode) {
- case LOW:
- GPIOSetInterrupt(pin, 1, 0, 0);
- break;
- case HIGH:
- GPIOSetInterrupt(pin, 1, 0, 1);
- break;
- case CHANGE:
- GPIOSetInterrupt(pin, 0, 1, 0);
- break;
- case RISING:
- GPIOSetInterrupt(pin, 0, 0, 1);
- break;
- case FALLING:
- GPIOSetInterrupt(pin, 0, 0, 0);
- break;
- default:
- break;
- }
-
-
- if (pin >= 0 && pin < 22) //arduinoPinAssign(0~22)
- {
- intFunc[pin] = func;
-
- switch (arduino_pinAssign[pin * 2]) {
- case 0:
- NVIC_EnableIRQ(EINT0_IRQn);
- break;
- case 1:
- NVIC_EnableIRQ(EINT1_IRQn);
- break;
- case 2:
- NVIC_EnableIRQ(EINT2_IRQn);
- break;
- case 3:
- NVIC_EnableIRQ(EINT3_IRQn);
- break;
- }
- } else if (pin >= 22 && pin < 100) {
- //(22~99:reserved)
- } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
- {
- pin = pin - 100;
- intFunc[pin] = func;
-
- switch (mary_pinAssign[pin * 2]) {
- case 0:
- NVIC_EnableIRQ(EINT0_IRQn);
- break;
- case 1:
- NVIC_EnableIRQ(EINT1_IRQn);
- break;
- case 2:
- NVIC_EnableIRQ(EINT2_IRQn);
- break;
- case 3:
- NVIC_EnableIRQ(EINT3_IRQn);
- break;
- }
- }
-
- GPIOIntEnable(pin);
-
- return;
-}
-
-void detachInterrupt(int pin) {
- GPIOIntDisable(pin);
-
- if (pin >= 0 && pin < 22) //arduinoPinAssign(0~22)
- {
- intFunc[pin] = 0;
- if (LPC_GPIO[arduino_pinAssign[pin * 2]]->IE == 0) {
- switch (arduino_pinAssign[pin * 2]) {
- case 0:
- NVIC_DisableIRQ(EINT0_IRQn);
- break;
- case 1:
- NVIC_DisableIRQ(EINT1_IRQn);
- break;
- case 2:
- NVIC_DisableIRQ(EINT2_IRQn);
- break;
- case 3:
- NVIC_DisableIRQ(EINT3_IRQn);
- break;
- }
- }
- }
- else if (pin >= 22 && pin < 100) {//(22~99:reserved)
- } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
- {
- pin = pin - 100;
- intFunc[pin] = 0;
- if (LPC_GPIO[mary_pinAssign[pin * 2]]->IE == 0) {
- switch (mary_pinAssign[pin * 2]) {
- case 0:
- NVIC_DisableIRQ(EINT0_IRQn);
- break;
- case 1:
- NVIC_DisableIRQ(EINT1_IRQn);
- break;
- case 2:
- NVIC_DisableIRQ(EINT2_IRQn);
- break;
- case 3:
- NVIC_DisableIRQ(EINT3_IRQn);
- break;
- }
- }
- }
- return;
-}
-
-void GPIO_IRQHandler(void) {
- for (int i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) {
- if (GPIOIntStatus(i)) {
- GPIOIntClear(i);
-
- if (intFunc[i])
- intFunc[i]();
- }
- }
-}
-
-void PIOINT0_IRQHandler(void) {
- GPIO_IRQHandler();
- return;
-}
-
-void PIOINT1_IRQHandler(void) {
- GPIO_IRQHandler();
- return;
-}
-
-void PIOINT2_IRQHandler(void) {
- GPIO_IRQHandler();
- return;
-}
-
-void PIOINT3_IRQHandler(void) {
- GPIO_IRQHandler();
- return;
-}
+#include "gpio.h"
+
+#define EXTERNAL_NUM_INTERRUPTS 22
+volatile static USER_GPIO_FUNC intFunc[EXTERNAL_NUM_INTERRUPTS];
+
+void attachInterrupt(int pin, USER_GPIO_FUNC func, digitalWriteState mode) {
+ pinMode(pin, INPUT);
+
+ switch (mode) {
+ case LOW:
+ GPIOSetInterrupt(pin, 1, 0, 0);
+ break;
+ case HIGH:
+ GPIOSetInterrupt(pin, 1, 0, 1);
+ break;
+ case CHANGE:
+ GPIOSetInterrupt(pin, 0, 1, 0);
+ break;
+ case RISING:
+ GPIOSetInterrupt(pin, 0, 0, 1);
+ break;
+ case FALLING:
+ GPIOSetInterrupt(pin, 0, 0, 0);
+ break;
+ default:
+ break;
+ }
+
+
+ if (pin >= 0 && pin < 22) //arduinoPinAssign(0~22)
+ {
+ intFunc[pin] = func;
+
+ switch (arduino_pinAssign[pin * 2]) {
+ case 0:
+ NVIC_EnableIRQ(EINT0_IRQn);
+ break;
+ case 1:
+ NVIC_EnableIRQ(EINT1_IRQn);
+ break;
+ case 2:
+ NVIC_EnableIRQ(EINT2_IRQn);
+ break;
+ case 3:
+ NVIC_EnableIRQ(EINT3_IRQn);
+ break;
+ }
+ } else if (pin >= 22 && pin < 100) {
+ //(22~99:reserved)
+ } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
+ {
+ int _pin = pin - 100;
+ intFunc[_pin] = func;
+
+ switch (mary_pinAssign[_pin * 2]) {
+ case 0:
+ NVIC_EnableIRQ(EINT0_IRQn);
+ break;
+ case 1:
+ NVIC_EnableIRQ(EINT1_IRQn);
+ break;
+ case 2:
+ NVIC_EnableIRQ(EINT2_IRQn);
+ break;
+ case 3:
+ NVIC_EnableIRQ(EINT3_IRQn);
+ break;
+ }
+ }
+
+ GPIOIntEnable(pin);
+
+ return;
+}
+
+void detachInterrupt(int pin) {
+ GPIOIntDisable(pin);
+
+ if (pin >= 0 && pin < 22) //arduinoPinAssign(0~22)
+ {
+ intFunc[pin] = 0;
+ if (LPC_GPIO[arduino_pinAssign[pin * 2]]->IE == 0) {
+ switch (arduino_pinAssign[pin * 2]) {
+ case 0:
+ NVIC_DisableIRQ(EINT0_IRQn);
+ break;
+ case 1:
+ NVIC_DisableIRQ(EINT1_IRQn);
+ break;
+ case 2:
+ NVIC_DisableIRQ(EINT2_IRQn);
+ break;
+ case 3:
+ NVIC_DisableIRQ(EINT3_IRQn);
+ break;
+ }
+ }
+ }
+ else if (pin >= 22 && pin < 100) {//(22~99:reserved)
+ } else if (pin >= 100 && pin < 200) //maryPinAssign(100~119?)
+ {
+ pin = pin - 100;
+ intFunc[pin] = 0;
+ if (LPC_GPIO[mary_pinAssign[pin * 2]]->IE == 0) {
+ switch (mary_pinAssign[pin * 2]) {
+ case 0:
+ NVIC_DisableIRQ(EINT0_IRQn);
+ break;
+ case 1:
+ NVIC_DisableIRQ(EINT1_IRQn);
+ break;
+ case 2:
+ NVIC_DisableIRQ(EINT2_IRQn);
+ break;
+ case 3:
+ NVIC_DisableIRQ(EINT3_IRQn);
+ break;
+ }
+ }
+ }
+ return;
+}
+
+void GPIO_IRQHandler(void) {
+ for (int i = 0; i < EXTERNAL_NUM_INTERRUPTS; i++) {
+ if (GPIOIntStatus(i)) {
+ GPIOIntClear(i);
+
+ if (intFunc[i])
+ intFunc[i]();
+ }
+ }
+}
+
+void PIOINT0_IRQHandler(void) {
+ GPIO_IRQHandler();
+ return;
+}
+
+void PIOINT1_IRQHandler(void) {
+ GPIO_IRQHandler();
+ return;
+}
+
+void PIOINT2_IRQHandler(void) {
+ GPIO_IRQHandler();
+ return;
+}
+
+void PIOINT3_IRQHandler(void) {
+ GPIO_IRQHandler();
+ return;
+}