//______________________________________________________________________ void Lightshow(int *time) { static int t=0,t1=0,t2=0,t3=0; if(*time != t) { t=*time; _led(-1,-1); } if(t < 10000) { if(!(++t1 % NN)) { _led(t3,0); ++t2; t2 %= Nk; if(t2==t3) _led((t3+1)%Nk,20); } if(!(t1 % ((NN*Nk)+1))) { t3=t2; _led(t3%Nk,20); _led((t3+1)%Nk,0); } } }
void StartDefaultTask(void const * argument) { Pin _led(LED_PIN, Pin::Config().setMode(Pin::MODE_OUTPUT)); led = &_led; printf("Initializing SDIO DMA test...\n"); if (!sdInit()) { error("Failed to initialize sdio\n"); MatchBox::blinkOfDeath(_led, (MatchBox::BlinkCode) SDIO_INIT); } if (!sdDmaInit()) { debug("Failed to initialize sdio dma\n"); MatchBox::blinkOfDeath(_led, (MatchBox::BlinkCode) SDIO_DMA); } int count = 0; uint8_t buff[512]; if (uint32_t(&buff[0]) & 0x3 != 0) { error("Buffer not aligned!\n"); MatchBox::blinkOfDeath(_led, (MatchBox::BlinkCode) BUFFER_NOT_ALIGNED); } bzero(buff, sizeof(buff)); // Seed with random value srand(HAL_GetTick()); printf("Starting DMA\n"); while (1) { char tmp[sizeof(buff)]; // temporary read buffer, for verification for (int i = 0; i < sizeof(buff); i++) { buff[i] = rand() & 0xff; } writeBlock(&buff[0], count * 512); // while (0x100 != (SDGetStatus(&uSdHandle) & 0x100)) // ; // printf("read..\n"); readBlock(&tmp[0], count * 512); if (0 != memcmp(tmp, buff, sizeof(buff))) { debug("*** readback error: blocks differ! ***\n"); } else { if (!(count % 64)) { printf("\n"); printf("Block %08x", count); } else { printf("."); } } //dumpBlock(&buff[0], count); _led.write(count++ & 1); } }
/** * @brief LED processing * @param a: led ID, 0.9 as defined in pfm.h ... _RED1,_BLUE2 ... etc. * @param b: msecs, 0=off, -1=perm. on, a=-1 = periodic call, 1 msec * @retval : None */ void _led(int a, int b) { int i; static int t[]={1,1,1,1,1,1,1,1,1,1}; if(a==-1) { for(i=0;i<10;++i) { if(t[i]) if(!--t[i]) _led(i,0); } return; } if(b==0) { t[a]=0; __LED_OFF(gpio[a], pin[a]); } else { if(b==-1) t[a]=0; else t[a]=b; __LED_ON(gpio[a], pin[a]); } }