Dependencies:   mbed SDFileSystem

Committer:
plus_kamiya
Date:
Mon Sep 27 07:56:19 2010 +0000
Revision:
0:4da1d4eae011

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
plus_kamiya 0:4da1d4eae011 1 // Example to set up an interrupt based on the LPC TIMER0 match register, sford
plus_kamiya 0:4da1d4eae011 2
plus_kamiya 0:4da1d4eae011 3 #include "mbed.h"
plus_kamiya 0:4da1d4eae011 4 #include "SDFileSystem.h"
plus_kamiya 0:4da1d4eae011 5
plus_kamiya 0:4da1d4eae011 6 #define VERSION "LED Master version 0.0"
plus_kamiya 0:4da1d4eae011 7
plus_kamiya 0:4da1d4eae011 8 void timer0_init(void);
plus_kamiya 0:4da1d4eae011 9 void timer1_init(void);
plus_kamiya 0:4da1d4eae011 10 void flipT0();
plus_kamiya 0:4da1d4eae011 11 void flipT1();
plus_kamiya 0:4da1d4eae011 12
plus_kamiya 0:4da1d4eae011 13 #define FOLDER "/sd/"
plus_kamiya 0:4da1d4eae011 14 //#define FOLDER "/local/"
plus_kamiya 0:4da1d4eae011 15 #define STX 0x02
plus_kamiya 0:4da1d4eae011 16 #define ETX 0x03
plus_kamiya 0:4da1d4eae011 17 #define CR 0x0A
plus_kamiya 0:4da1d4eae011 18 #define LF 0x0D
plus_kamiya 0:4da1d4eae011 19 #define I2C_Hz 2500000 //I2C CLOCK
plus_kamiya 0:4da1d4eae011 20 #define SPI_Hz 2500000 //SPI CLOCK
plus_kamiya 0:4da1d4eae011 21 #define BAUD_RATE 19200 //RS-232C BaudRate
plus_kamiya 0:4da1d4eae011 22 #define NAME_SIZE 20 //FileName Length
plus_kamiya 0:4da1d4eae011 23 #define FILES_MAX 20 //FileList MAX
plus_kamiya 0:4da1d4eae011 24 #define DATA_SIZE 12 //I2C DataSize
plus_kamiya 0:4da1d4eae011 25 #define CMD_SIZE 3 //I2C CommandSize
plus_kamiya 0:4da1d4eae011 26 #define PMT_SIZE 4 //I2C ParametersSize
plus_kamiya 0:4da1d4eae011 27 #define W_DOT 256 //Display W_DotSize
plus_kamiya 0:4da1d4eae011 28 #define H_DOT 32 //Display H_DotSize
plus_kamiya 0:4da1d4eae011 29 #define SP_DOT 0 //Display SP_DotSize
plus_kamiya 0:4da1d4eae011 30 #define RX_SIZE 2048 //Comm ReceiveSize
plus_kamiya 0:4da1d4eae011 31
plus_kamiya 0:4da1d4eae011 32 #define FILEHEADERSIZE 14 //Bitmap FileHeaderSize
plus_kamiya 0:4da1d4eae011 33 #define INFOHEADERSIZE 40 //Bitmap InfoHeaderSize
plus_kamiya 0:4da1d4eae011 34 #define HEADERSIZE (FILEHEADERSIZE+INFOHEADERSIZE) //BitmapHeaderSize
plus_kamiya 0:4da1d4eae011 35
plus_kamiya 0:4da1d4eae011 36 InterruptIn inp1(p21);
plus_kamiya 0:4da1d4eae011 37 DigitalOut led1(LED1);
plus_kamiya 0:4da1d4eae011 38 DigitalOut led2(LED2);
plus_kamiya 0:4da1d4eae011 39 DigitalOut led3(LED3);
plus_kamiya 0:4da1d4eae011 40 DigitalOut led4(LED4);
plus_kamiya 0:4da1d4eae011 41 DigitalOut out1(p22);
plus_kamiya 0:4da1d4eae011 42 DigitalOut out2(p23);
plus_kamiya 0:4da1d4eae011 43
plus_kamiya 0:4da1d4eae011 44 Serial uart(p13, p14); // tx, rx
plus_kamiya 0:4da1d4eae011 45 SPI spi(p5, p6, p7); // mosi, miso, sck
plus_kamiya 0:4da1d4eae011 46 I2C i2c0(p9, p10); // sda, scl
plus_kamiya 0:4da1d4eae011 47 I2C i2c1(p28, p27); // sda, scl
plus_kamiya 0:4da1d4eae011 48 SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sclk, cs, name
plus_kamiya 0:4da1d4eae011 49 LocalFileSystem local("local");
plus_kamiya 0:4da1d4eae011 50
plus_kamiya 0:4da1d4eae011 51 static unsigned short Luminance0[DATA_SIZE] = {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
plus_kamiya 0:4da1d4eae011 52 static unsigned short Luminance1[DATA_SIZE] = {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00};
plus_kamiya 0:4da1d4eae011 53 static unsigned short Luminance2[DATA_SIZE] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF};
plus_kamiya 0:4da1d4eae011 54 static unsigned short Luminance3[DATA_SIZE] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00};
plus_kamiya 0:4da1d4eae011 55 static unsigned short Luminance4[DATA_SIZE] = {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF};
plus_kamiya 0:4da1d4eae011 56 static unsigned short Luminance5[DATA_SIZE] = {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
plus_kamiya 0:4da1d4eae011 57 static unsigned short Luminance6[DATA_SIZE] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
plus_kamiya 0:4da1d4eae011 58 static unsigned short Luminance7[DATA_SIZE] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
plus_kamiya 0:4da1d4eae011 59
plus_kamiya 0:4da1d4eae011 60 static unsigned short tflag;
plus_kamiya 0:4da1d4eae011 61 static int offlineCnt;
plus_kamiya 0:4da1d4eae011 62 static int offlineColor;
plus_kamiya 0:4da1d4eae011 63 static int offlineChange; //Display Offline
plus_kamiya 0:4da1d4eae011 64 static unsigned short offlineMode;
plus_kamiya 0:4da1d4eae011 65 static unsigned short imageflag;
plus_kamiya 0:4da1d4eae011 66 static int rxCnt; //Receive Count
plus_kamiya 0:4da1d4eae011 67 static int rxFlag; //1:Data Receive Complete 2:Data Transfer 3:Disylay Start
plus_kamiya 0:4da1d4eae011 68 static int rxDataFlag; //RGB Receive Flag
plus_kamiya 0:4da1d4eae011 69 static int rxTime; //Receive TimeOver
plus_kamiya 0:4da1d4eae011 70 static int cmd; //1:Still Image 2:Left Flow 3:Right Flow 4:Down Flow 5:Up Flow
plus_kamiya 0:4da1d4eae011 71 static int imageNo;
plus_kamiya 0:4da1d4eae011 72 static int fileCnt; //FileList Count
plus_kamiya 0:4da1d4eae011 73 static char files[FILES_MAX][NAME_SIZE];
plus_kamiya 0:4da1d4eae011 74 static unsigned char rxData;
plus_kamiya 0:4da1d4eae011 75 static unsigned char rxCmd[CMD_SIZE+1];
plus_kamiya 0:4da1d4eae011 76 static unsigned char rxPmt[PMT_SIZE];
plus_kamiya 0:4da1d4eae011 77 static unsigned char rxStrR[RX_SIZE];
plus_kamiya 0:4da1d4eae011 78 static unsigned char rxStrG[RX_SIZE];
plus_kamiya 0:4da1d4eae011 79 static unsigned char rxStrB[RX_SIZE];
plus_kamiya 0:4da1d4eae011 80 static unsigned long rxLEDR[W_DOT];
plus_kamiya 0:4da1d4eae011 81 static unsigned long rxLEDG[W_DOT];
plus_kamiya 0:4da1d4eae011 82 static unsigned long rxLEDB[W_DOT];
plus_kamiya 0:4da1d4eae011 83 static unsigned long imgLEDR[W_DOT];
plus_kamiya 0:4da1d4eae011 84 static unsigned long imgLEDG[W_DOT];
plus_kamiya 0:4da1d4eae011 85 static unsigned long imgLEDB[W_DOT];
plus_kamiya 0:4da1d4eae011 86 static unsigned short i2cdata[DATA_SIZE];
plus_kamiya 0:4da1d4eae011 87 static unsigned short i2cdata2[DATA_SIZE];
plus_kamiya 0:4da1d4eae011 88 static int rotIndex; //Rotational Position
plus_kamiya 0:4da1d4eae011 89 static int rotCntX; //Rotational CountX(WScroll)
plus_kamiya 0:4da1d4eae011 90 static int rotCntY; //Rotational CountY(HScroll)
plus_kamiya 0:4da1d4eae011 91 static int rotY; //Rotational YPosition
plus_kamiya 0:4da1d4eae011 92 static int rotSpeed; //Rotational Flow Speed
plus_kamiya 0:4da1d4eae011 93 static int rotStop; //Rotational Stop Count
plus_kamiya 0:4da1d4eae011 94 static unsigned long nowCount; //100usec Count
plus_kamiya 0:4da1d4eae011 95
plus_kamiya 0:4da1d4eae011 96 void timer0_init(void)
plus_kamiya 0:4da1d4eae011 97 {
plus_kamiya 0:4da1d4eae011 98 // power up TIMER0 (PCONP[1])
plus_kamiya 0:4da1d4eae011 99 LPC_SC->PCONP |= 1 << 1;
plus_kamiya 0:4da1d4eae011 100
plus_kamiya 0:4da1d4eae011 101 // reset and set TIMER0 to timer mode
plus_kamiya 0:4da1d4eae011 102 LPC_TIM0->TCR = 0x2;
plus_kamiya 0:4da1d4eae011 103 LPC_TIM0->CTCR = 0x0;
plus_kamiya 0:4da1d4eae011 104
plus_kamiya 0:4da1d4eae011 105 // set no prescaler
plus_kamiya 0:4da1d4eae011 106 LPC_TIM0->PR = 0;
plus_kamiya 0:4da1d4eae011 107
plus_kamiya 0:4da1d4eae011 108 // calculate period (1 interrupt every second)
plus_kamiya 0:4da1d4eae011 109 uint32_t period = SystemCoreClock / 4;
plus_kamiya 0:4da1d4eae011 110
plus_kamiya 0:4da1d4eae011 111 // set match register and enable interrupt
plus_kamiya 0:4da1d4eae011 112 LPC_TIM0->MR0 = period;
plus_kamiya 0:4da1d4eae011 113 LPC_TIM0->MCR |= 1 << 0; // interrupt on match
plus_kamiya 0:4da1d4eae011 114 LPC_TIM0->MCR |= 1 << 1; // reset on match
plus_kamiya 0:4da1d4eae011 115
plus_kamiya 0:4da1d4eae011 116 // enable the vector in the interrupt controller
plus_kamiya 0:4da1d4eae011 117 NVIC_SetVector(TIMER0_IRQn, (uint32_t)&flipT0);
plus_kamiya 0:4da1d4eae011 118 NVIC_EnableIRQ(TIMER0_IRQn);
plus_kamiya 0:4da1d4eae011 119
plus_kamiya 0:4da1d4eae011 120 // start the timer
plus_kamiya 0:4da1d4eae011 121 LPC_TIM0->TCR = 1;
plus_kamiya 0:4da1d4eae011 122 }
plus_kamiya 0:4da1d4eae011 123
plus_kamiya 0:4da1d4eae011 124 void timer1_init(void)
plus_kamiya 0:4da1d4eae011 125 {
plus_kamiya 0:4da1d4eae011 126 // power up TIMER1 (PCONP[1])
plus_kamiya 0:4da1d4eae011 127 LPC_SC->PCONP |= 1 << 0x16;
plus_kamiya 0:4da1d4eae011 128
plus_kamiya 0:4da1d4eae011 129 // reset and set TIMER1 to timer mode
plus_kamiya 0:4da1d4eae011 130 LPC_TIM1->TCR = 0x2;
plus_kamiya 0:4da1d4eae011 131 LPC_TIM1->CTCR = 0x0;
plus_kamiya 0:4da1d4eae011 132
plus_kamiya 0:4da1d4eae011 133 // set no prescaler
plus_kamiya 0:4da1d4eae011 134 LPC_TIM1->PR = 0;
plus_kamiya 0:4da1d4eae011 135
plus_kamiya 0:4da1d4eae011 136 // calculate period (1 interrupt every second)
plus_kamiya 0:4da1d4eae011 137 uint32_t period = SystemCoreClock / 4;
plus_kamiya 0:4da1d4eae011 138
plus_kamiya 0:4da1d4eae011 139 // set match register and enable interrupt
plus_kamiya 0:4da1d4eae011 140 LPC_TIM1->MR0 = period / 2;
plus_kamiya 0:4da1d4eae011 141 LPC_TIM1->MCR |= 1 << 0; // interrupt on match
plus_kamiya 0:4da1d4eae011 142 LPC_TIM1->MCR |= 1 << 1; // reset on match
plus_kamiya 0:4da1d4eae011 143
plus_kamiya 0:4da1d4eae011 144 // enable the vector in the interrupt controller
plus_kamiya 0:4da1d4eae011 145 NVIC_SetVector(TIMER1_IRQn, (uint32_t)&flipT1);
plus_kamiya 0:4da1d4eae011 146 NVIC_EnableIRQ(TIMER1_IRQn);
plus_kamiya 0:4da1d4eae011 147
plus_kamiya 0:4da1d4eae011 148 // start the timer
plus_kamiya 0:4da1d4eae011 149 LPC_TIM1->TCR = 1;
plus_kamiya 0:4da1d4eae011 150 }
plus_kamiya 0:4da1d4eae011 151
plus_kamiya 0:4da1d4eae011 152 //**********************************************************************
plus_kamiya 0:4da1d4eae011 153 //Timer0 Init
plus_kamiya 0:4da1d4eae011 154 //**********************************************************************
plus_kamiya 0:4da1d4eae011 155 void flipT0()
plus_kamiya 0:4da1d4eae011 156 {
plus_kamiya 0:4da1d4eae011 157 // do something!
plus_kamiya 0:4da1d4eae011 158 led1 = !led1;
plus_kamiya 0:4da1d4eae011 159
plus_kamiya 0:4da1d4eae011 160 // clear the TIMER0 interrupt
plus_kamiya 0:4da1d4eae011 161 LPC_TIM0->IR = 1;
plus_kamiya 0:4da1d4eae011 162 }
plus_kamiya 0:4da1d4eae011 163
plus_kamiya 0:4da1d4eae011 164 //**********************************************************************
plus_kamiya 0:4da1d4eae011 165 //Timer0 Init
plus_kamiya 0:4da1d4eae011 166 //**********************************************************************
plus_kamiya 0:4da1d4eae011 167 void flipT1()
plus_kamiya 0:4da1d4eae011 168 {
plus_kamiya 0:4da1d4eae011 169 // do something!
plus_kamiya 0:4da1d4eae011 170 led2 = !led2;
plus_kamiya 0:4da1d4eae011 171
plus_kamiya 0:4da1d4eae011 172 // clear the TIMER2 interrupt
plus_kamiya 0:4da1d4eae011 173 LPC_TIM1->IR = 1;
plus_kamiya 0:4da1d4eae011 174 }
plus_kamiya 0:4da1d4eae011 175
plus_kamiya 0:4da1d4eae011 176 int main()
plus_kamiya 0:4da1d4eae011 177 {
plus_kamiya 0:4da1d4eae011 178 volatile int i;
plus_kamiya 0:4da1d4eae011 179 volatile int j;
plus_kamiya 0:4da1d4eae011 180 int res;
plus_kamiya 0:4da1d4eae011 181 unsigned long rdata;
plus_kamiya 0:4da1d4eae011 182 unsigned long gdata;
plus_kamiya 0:4da1d4eae011 183 unsigned long bdata;
plus_kamiya 0:4da1d4eae011 184 char tmp[255];
plus_kamiya 0:4da1d4eae011 185 char filename[99];
plus_kamiya 0:4da1d4eae011 186
plus_kamiya 0:4da1d4eae011 187 printf("[%s]\r\n", VERSION);
plus_kamiya 0:4da1d4eae011 188
plus_kamiya 0:4da1d4eae011 189 nowCount = 0;
plus_kamiya 0:4da1d4eae011 190 fileCnt = 0;
plus_kamiya 0:4da1d4eae011 191 rxCnt = -1;
plus_kamiya 0:4da1d4eae011 192 rxFlag = 0;
plus_kamiya 0:4da1d4eae011 193 rxDataFlag = 0;
plus_kamiya 0:4da1d4eae011 194 tflag = 1;
plus_kamiya 0:4da1d4eae011 195 cmd = 0x00;
plus_kamiya 0:4da1d4eae011 196 rotIndex = 0;
plus_kamiya 0:4da1d4eae011 197 rotCntX = 0;
plus_kamiya 0:4da1d4eae011 198 rotCntY = 0;
plus_kamiya 0:4da1d4eae011 199 rotY = 0;
plus_kamiya 0:4da1d4eae011 200 rotSpeed = 40;
plus_kamiya 0:4da1d4eae011 201 rotStop = 1;
plus_kamiya 0:4da1d4eae011 202 offlineCnt = 0;
plus_kamiya 0:4da1d4eae011 203 offlineColor = 0;
plus_kamiya 0:4da1d4eae011 204 for (i = 0; i < RX_SIZE; i++) {
plus_kamiya 0:4da1d4eae011 205 rxStrR[i] = 0;
plus_kamiya 0:4da1d4eae011 206 rxStrG[i] = 0;
plus_kamiya 0:4da1d4eae011 207 rxStrB[i] = 0;
plus_kamiya 0:4da1d4eae011 208 }
plus_kamiya 0:4da1d4eae011 209 for (i = 0; i < W_DOT; i++) {
plus_kamiya 0:4da1d4eae011 210 rxLEDR[i] = 0;
plus_kamiya 0:4da1d4eae011 211 rxLEDG[i] = 0;
plus_kamiya 0:4da1d4eae011 212 rxLEDB[i] = 0;
plus_kamiya 0:4da1d4eae011 213 }
plus_kamiya 0:4da1d4eae011 214
plus_kamiya 0:4da1d4eae011 215 timer0_init();
plus_kamiya 0:4da1d4eae011 216 timer1_init();
plus_kamiya 0:4da1d4eae011 217 // hang around!
plus_kamiya 0:4da1d4eae011 218 while(1) {
plus_kamiya 0:4da1d4eae011 219 led4 = 1;
plus_kamiya 0:4da1d4eae011 220 wait(0.2);
plus_kamiya 0:4da1d4eae011 221 led4 = 0;
plus_kamiya 0:4da1d4eae011 222 wait(0.2);
plus_kamiya 0:4da1d4eae011 223 }
plus_kamiya 0:4da1d4eae011 224 }