Dependencies: mbed SDFileSystem
main.cpp@0:4da1d4eae011, 2010-09-27 (annotated)
- Committer:
- plus_kamiya
- Date:
- Mon Sep 27 07:56:19 2010 +0000
- Revision:
- 0:4da1d4eae011
Who changed what in which revision?
User | Revision | Line number | New 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 | } |