Пример #1
0
// write default blackfin
void flash_write_ldr(void) {
#if 1
#else
  //  flashc_memset32((void*)&(flash_nvram_data.ldrSize), bfinLdrSize, 4, true);
  //  flashc_memcpy((void*)&(flash_nvram_data.ldrData), (const void*)bfinLdrData, bfinLdrSize, true);
  // seeing some missing pages, so try writing one page at a time
  u32 i;
  u32 nPages = bfinLdrSize / 0x200;
  u32 rem;
  const u8* pSrc;
  u8* pDst;
  // write size
  flashc_memset32((void*)&(flash_nvram_data.ldrSize), bfinLdrSize, 4, true);
  // write data 
  pSrc = (const void*)bfinLdrData;
  pDst = (void*)&(flash_nvram_data.ldrData);
  for(i=0; i<nPages; i++) {
    flashc_memcpy((void*)pDst, (const void*)pSrc, 0x200, true);
    pDst += 0x200;
    pSrc += 0x200;
    delay_ms(1);
  }
  // remaining bytes
  rem = bfinLdrSize - (nPages * 0x200);
  flashc_memcpy((void*)pDst, (const void*)pSrc, rem, true);
#endif
}
Пример #2
0
// intiailize (alloc mem, check/set firstrun bytes)
u8 init_flash() {
#if 1
#else
  u32 i;

  print_dbg("\r\n init flash... ");

  // allocate bfin loader buf
  ////////////////////
  /////////// TESTING
#if 0
  bfinLdrData = alloc_mem(BFIN_LDR_MAX_BYTES);
#else
  bfinLdrData = alloc_mem(BFIN_LDR_MAX_BYTES * 4);
#endif
  for(i=0; i<BFIN_LDR_MAX_BYTES; i++) { bfinLdrData[i] = 0; }

  if(flash_nvram_data.firstRun != FIRSTRUN_MAGIC) {
    // set size=0 so we won't attempt unitialized bfin load on next start
    bfinLdrSize = 0;
    flashc_memset32((void*)&(flash_nvram_data.ldrSize), 0x00000000, 4, true);
    // do this only after succesful app launch
    //    flashc_memset32((void*)&(flash_nvram_data.firstRun), FIRSTRUN_MAGIC, 4, true);
    return 1;
  } else { 
    // firstrun already happened
    return 0;
  }
#endif
}
Пример #3
0
// intiailize (alloc mem, check/set firstrun bytes)
u8 init_flash() {
  u32 i;

  // allocate .elf buffer
  fwBinData = alloc_mem(FIRMWARE_MAX_BYTES);
  bfinLdrData = alloc_mem(BFIN_LDR_MAX_BYTES);

  for(i=0; i<BFIN_LDR_MAX_BYTES; i++) {
    bfinLdrData[i] = 0;
  }

  for(i=0; i<FIRMWARE_MAX_BYTES; i++) {
    fwBinData[i] = 0;
  }
  if(flash_nvram_data.firstRun != FIRSTRUN_INIT) {
    // print_dbg("\r\n writing firstrun, no bfin load");
    bfinLdrSize = 0;
    flashc_memset32((void*)&flash_nvram_data.firstRun, FIRSTRUN_INIT, 4, true);
    return 1;
  } return 0;
}
Пример #4
0
volatile void *flashc_memset16(volatile void *dst, uint16_t src, size_t nbytes, bool erase)
{
	return flashc_memset32(dst, src | (uint32_t)src << 16, nbytes, erase);
}
volatile void* flashc_memset16 (volatile void* dst, U16 src, size_t nbytes, Bool erase)
{
    return flashc_memset32 (dst, src | (U32) src << 16, nbytes, erase);
}
Пример #6
0
// clear firstrun status
void flash_clear_firstrun(void) {
#if 1
#else
  flashc_memset32((void*)&(flash_nvram_data.firstRun), 0x00000000, 4, true);
#endif
}
Пример #7
0
// write firstrun status
void flash_write_firstrun(void) {
#if 1
#else
  flashc_memset32((void*)&(flash_nvram_data.firstRun), FIRSTRUN_MAGIC, 4, true);
#endif
}
Пример #8
0
// clear firstrun status
void flash_clear_firstrun(void) {
  flashc_memset32((void*)&(flash_nvram_data.firstRun), 0x00000000, 4, true);
}
Пример #9
0
int main(void) {
	u8 i1;

	sysclk_init();

	init_dbg_rs232(FMCK_HZ);

	init_gpio();
	assign_main_event_handlers();
	init_events();
	init_tc();
	init_spi();
	init_adc();

	irq_initialize_vectors();
	register_interrupts();
	cpu_irq_enable();

	init_usb_host();
	init_monome();

	init_i2c_slave(0x30);

	print_dbg("\r\n\n// meadowphysics //////////////////////////////// ");
	print_dbg_ulong(sizeof(flashy));

	print_dbg(" ");
	print_dbg_ulong(sizeof(m));


	if(flash_is_fresh()) {
		print_dbg("\r\nfirst run.");
		flash_unfresh();
		flashc_memset32((void*)&(flashy.preset_select), 0, 4, true);


		// clear out some reasonable defaults
		for(i1=0;i1<8;i1++) {
			m.positions[i1] = i1;
			m.points[i1] = i1;
			m.points_save[i1] = i1;
			m.triggers[i1] = 0;
			m.trig_dests[i1] = 0;
			m.rules[i1] = 0;
			m.rule_dests[i1] = i1;
		}

		m.positions[0] = m.points[0] = 3;
		m.trig_dests[0] = 254;

		// save all presets, clear glyphs
		for(i1=0;i1<8;i1++) {
			flashc_memcpy((void *)&flashy.m[i1], &m, sizeof(m), true);
			glyph[i1] = (1<<i1);
			flashc_memcpy((void *)&flashy.glyph[i1], &glyph, sizeof(glyph), true);
		}
	}
	else {
		// load from flash at startup
		preset_select = flashy.preset_select;
		flash_read();
		for(i1=0;i1<8;i1++)
			glyph[i1] = flashy.glyph[preset_select][i1];
	}

	LENGTH = 15;
	SIZE = 16;

	re = &refresh;

	process_ii = &mp_process_ii;

	clock_pulse = &clock;
	clock_external = !gpio_get_pin_value(B09);

	timer_add(&clockTimer,120,&clockTimer_callback, NULL);
	timer_add(&keyTimer,50,&keyTimer_callback, NULL);
	timer_add(&adcTimer,100,&adcTimer_callback, NULL);
	clock_temp = 10000; // out of ADC range to force tempo

	while (true) {
		check_events();
	}
}