Dependencies: mbed SDFileSystem
Diff: main.cpp
- Revision:
- 0:4da1d4eae011
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Sep 27 07:56:19 2010 +0000 @@ -0,0 +1,224 @@ +// Example to set up an interrupt based on the LPC TIMER0 match register, sford + +#include "mbed.h" +#include "SDFileSystem.h" + +#define VERSION "LED Master version 0.0" + +void timer0_init(void); +void timer1_init(void); +void flipT0(); +void flipT1(); + +#define FOLDER "/sd/" +//#define FOLDER "/local/" +#define STX 0x02 +#define ETX 0x03 +#define CR 0x0A +#define LF 0x0D +#define I2C_Hz 2500000 //I2C CLOCK +#define SPI_Hz 2500000 //SPI CLOCK +#define BAUD_RATE 19200 //RS-232C BaudRate +#define NAME_SIZE 20 //FileName Length +#define FILES_MAX 20 //FileList MAX +#define DATA_SIZE 12 //I2C DataSize +#define CMD_SIZE 3 //I2C CommandSize +#define PMT_SIZE 4 //I2C ParametersSize +#define W_DOT 256 //Display W_DotSize +#define H_DOT 32 //Display H_DotSize +#define SP_DOT 0 //Display SP_DotSize +#define RX_SIZE 2048 //Comm ReceiveSize + +#define FILEHEADERSIZE 14 //Bitmap FileHeaderSize +#define INFOHEADERSIZE 40 //Bitmap InfoHeaderSize +#define HEADERSIZE (FILEHEADERSIZE+INFOHEADERSIZE) //BitmapHeaderSize + +InterruptIn inp1(p21); +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); +DigitalOut out1(p22); +DigitalOut out2(p23); + +Serial uart(p13, p14); // tx, rx +SPI spi(p5, p6, p7); // mosi, miso, sck +I2C i2c0(p9, p10); // sda, scl +I2C i2c1(p28, p27); // sda, scl +SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sclk, cs, name +LocalFileSystem local("local"); + +static unsigned short Luminance0[DATA_SIZE] = {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +static unsigned short Luminance1[DATA_SIZE] = {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}; +static unsigned short Luminance2[DATA_SIZE] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}; +static unsigned short Luminance3[DATA_SIZE] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}; +static unsigned short Luminance4[DATA_SIZE] = {0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}; +static unsigned short Luminance5[DATA_SIZE] = {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; +static unsigned short Luminance6[DATA_SIZE] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; +static unsigned short Luminance7[DATA_SIZE] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +static unsigned short tflag; +static int offlineCnt; +static int offlineColor; +static int offlineChange; //Display Offline +static unsigned short offlineMode; +static unsigned short imageflag; +static int rxCnt; //Receive Count +static int rxFlag; //1:Data Receive Complete 2:Data Transfer 3:Disylay Start +static int rxDataFlag; //RGB Receive Flag +static int rxTime; //Receive TimeOver +static int cmd; //1:Still Image 2:Left Flow 3:Right Flow 4:Down Flow 5:Up Flow +static int imageNo; +static int fileCnt; //FileList Count +static char files[FILES_MAX][NAME_SIZE]; +static unsigned char rxData; +static unsigned char rxCmd[CMD_SIZE+1]; +static unsigned char rxPmt[PMT_SIZE]; +static unsigned char rxStrR[RX_SIZE]; +static unsigned char rxStrG[RX_SIZE]; +static unsigned char rxStrB[RX_SIZE]; +static unsigned long rxLEDR[W_DOT]; +static unsigned long rxLEDG[W_DOT]; +static unsigned long rxLEDB[W_DOT]; +static unsigned long imgLEDR[W_DOT]; +static unsigned long imgLEDG[W_DOT]; +static unsigned long imgLEDB[W_DOT]; +static unsigned short i2cdata[DATA_SIZE]; +static unsigned short i2cdata2[DATA_SIZE]; +static int rotIndex; //Rotational Position +static int rotCntX; //Rotational CountX(WScroll) +static int rotCntY; //Rotational CountY(HScroll) +static int rotY; //Rotational YPosition +static int rotSpeed; //Rotational Flow Speed +static int rotStop; //Rotational Stop Count +static unsigned long nowCount; //100usec Count + +void timer0_init(void) +{ + // power up TIMER0 (PCONP[1]) + LPC_SC->PCONP |= 1 << 1; + + // reset and set TIMER0 to timer mode + LPC_TIM0->TCR = 0x2; + LPC_TIM0->CTCR = 0x0; + + // set no prescaler + LPC_TIM0->PR = 0; + + // calculate period (1 interrupt every second) + uint32_t period = SystemCoreClock / 4; + + // set match register and enable interrupt + LPC_TIM0->MR0 = period; + LPC_TIM0->MCR |= 1 << 0; // interrupt on match + LPC_TIM0->MCR |= 1 << 1; // reset on match + + // enable the vector in the interrupt controller + NVIC_SetVector(TIMER0_IRQn, (uint32_t)&flipT0); + NVIC_EnableIRQ(TIMER0_IRQn); + + // start the timer + LPC_TIM0->TCR = 1; +} + +void timer1_init(void) +{ + // power up TIMER1 (PCONP[1]) + LPC_SC->PCONP |= 1 << 0x16; + + // reset and set TIMER1 to timer mode + LPC_TIM1->TCR = 0x2; + LPC_TIM1->CTCR = 0x0; + + // set no prescaler + LPC_TIM1->PR = 0; + + // calculate period (1 interrupt every second) + uint32_t period = SystemCoreClock / 4; + + // set match register and enable interrupt + LPC_TIM1->MR0 = period / 2; + LPC_TIM1->MCR |= 1 << 0; // interrupt on match + LPC_TIM1->MCR |= 1 << 1; // reset on match + + // enable the vector in the interrupt controller + NVIC_SetVector(TIMER1_IRQn, (uint32_t)&flipT1); + NVIC_EnableIRQ(TIMER1_IRQn); + + // start the timer + LPC_TIM1->TCR = 1; +} + +//********************************************************************** +//Timer0 Init +//********************************************************************** +void flipT0() +{ + // do something! + led1 = !led1; + + // clear the TIMER0 interrupt + LPC_TIM0->IR = 1; +} + +//********************************************************************** +//Timer0 Init +//********************************************************************** +void flipT1() +{ + // do something! + led2 = !led2; + + // clear the TIMER2 interrupt + LPC_TIM1->IR = 1; +} + +int main() +{ + volatile int i; + volatile int j; + int res; + unsigned long rdata; + unsigned long gdata; + unsigned long bdata; + char tmp[255]; + char filename[99]; + + printf("[%s]\r\n", VERSION); + + nowCount = 0; + fileCnt = 0; + rxCnt = -1; + rxFlag = 0; + rxDataFlag = 0; + tflag = 1; + cmd = 0x00; + rotIndex = 0; + rotCntX = 0; + rotCntY = 0; + rotY = 0; + rotSpeed = 40; + rotStop = 1; + offlineCnt = 0; + offlineColor = 0; + for (i = 0; i < RX_SIZE; i++) { + rxStrR[i] = 0; + rxStrG[i] = 0; + rxStrB[i] = 0; + } + for (i = 0; i < W_DOT; i++) { + rxLEDR[i] = 0; + rxLEDG[i] = 0; + rxLEDB[i] = 0; + } + + timer0_init(); + timer1_init(); + // hang around! + while(1) { + led4 = 1; + wait(0.2); + led4 = 0; + wait(0.2); + } +}