--- /dev/null
+#include "xparameters.h"
+#include "xgpio_l.h"
+
+#include "stdio.h"
+
+#include "xutil.h"
+
+#define DISP7(a,b,c,d,e,f,g) (0|((~(a|b<<1|c<<2|d<<3|e<<4|f<<5|g<<6))&0xff))
+
+void display_num(unsigned short num) {
+ unsigned int val = 0x00;
+ int i;
+ unsigned short digit;
+
+ XGpio_mSetDataDirection(XPAR_SEVENSEG_BASEADDR, 1, 0x00000000);
+
+ for (i=0; i<5; i++) {
+ digit = ((num>>(4*i)) & 0xf);
+ switch(digit) {
+ case 0x0:
+ val = DISP7(1,1,1,1,1,1,0);
+ break;
+ case 0x1:
+ val = DISP7(0,1,1,0,0,0,0);
+ break;
+ case 0x2:
+ val = DISP7(1,1,0,1,1,0,1);
+ break;
+ case 0x3:
+ val = DISP7(1,1,1,1,0,0,1);
+ break;
+ case 0x4:
+ val = DISP7(0,1,1,0,0,1,1);
+ break;
+ case 0x5:
+ val = DISP7(1,0,1,1,0,1,1);
+ break;
+ case 0x6:
+ val = DISP7(1,0,1,1,1,1,1);
+ break;
+ case 0x7:
+ val = DISP7(1,1,1,0,0,0,0);
+ break;
+ case 0x8:
+ val = DISP7(1,1,1,1,1,1,1);
+ break;
+ case 0x9:
+ val = DISP7(1,1,1,1,0,1,1);
+ break;
+ case 0xa:
+ val = DISP7(1,1,1,0,1,1,1);
+ break;
+ case 0xb:
+ val = DISP7(0,0,1,1,1,1,1);
+ break;
+ case 0xc:
+ val = DISP7(1,0,0,1,1,1,0);
+ break;
+ case 0xd:
+ val = DISP7(0,1,1,1,1,0,1);
+ break;
+ case 0xe:
+ val = DISP7(1,0,0,1,1,1,1);
+ break;
+ case 0xf:
+ val = DISP7(1,0,0,0,1,1,1);
+ break;
+ }
+
+ val |= 1 << (8+(3-i));
+
+ if (i == 4)
+ val = 0x00;
+
+ XGpio_mSetDataReg(XPAR_SEVENSEG_BASEADDR, 1, val);
+ if (i != 4)
+ for (val = 0; val < 100000; val++);
+ }
+}
+
+void flash_chip_erase() {
+ volatile unsigned char *flash = (volatile unsigned char*)XPAR_FLASH_MEM0_BASEADDR;
+
+ flash[0x555] = 0xAA;
+ flash[0xAAA] = 0x55;
+ flash[0x555] = 0x80;
+ flash[0x555] = 0xAA;
+ flash[0xAAA] = 0x55;
+ flash[0x555] = 0x10;
+}
+
+void flash_erase_sector(unsigned int addr) {
+ volatile unsigned char *flash = (volatile unsigned char*)XPAR_FLASH_MEM0_BASEADDR;
+
+ flash[0x555] = 0xAA;
+ flash[0xAAA] = 0x55;
+ flash[0x555] = 0x80;
+ flash[0x555] = 0xAA;
+ flash[0xAAA] = 0x55;
+ flash[addr] = 0x30;
+}
+
+void flash_program_byte(unsigned int addr, unsigned char value) {
+ volatile unsigned char *flash = (volatile unsigned char*)XPAR_FLASH_MEM0_BASEADDR;
+ unsigned int count = 0xffffffff;
+
+ if (flash[addr] != 0xff)
+ return;
+
+ flash[0x555] = 0xAA;
+ flash[0xAAA] = 0x55;
+ flash[0x555] = 0xA0;
+ flash[addr] = value;
+
+ while (flash[addr] != value && count) { count--; }
+}
+
+void flash_identify(int enable) {
+ volatile unsigned char *flash = (volatile unsigned char*)XPAR_FLASH_MEM0_BASEADDR;
+
+ flash[0x555] = 0xAA;
+ flash[0xAAA] = 0x55;
+ flash[0x555] = enable?0x90:0xF0;
+}
+
+int main (void) {
+ int i,a;
+ volatile unsigned char *flash = (volatile unsigned char*)XPAR_FLASH_MEM0_BASEADDR;
+
+ XGpio_mSetDataDirection(XPAR_LEDS_BASEADDR, 1, 0x00000000);
+ XGpio_mSetDataReg(XPAR_LEDS_BASEADDR, 1, 0x00);
+ print("\r\nHallo Raggedstone!\r\n");
+ for (i = 0; i < 1500000000; i++);
+
+ flash_identify(1);
+ putnum(flash[0]|flash[1]<<8|flash[2]<<16|flash[3]<<24);
+ print("\r\n");
+ flash_identify(0);
+ putnum(flash[0]|flash[1]<<8|flash[2]<<16|flash[3]<<24);
+ print("\r\n");
+
+ for (i = 0; i < 1500000000; i++);
+ i = 0;
+ while(1) {
+ print("Hallo Raggedstone ");
+ display_num(i>>8);
+ putnum(i);
+ XGpio_mSetDataReg(XPAR_LEDS_BASEADDR, 1, (i & 0xf00)>>8);
+ print("\r\n");
+ if (i == 0x7ffff)
+ i = 0;
+ else
+ i++;
+ }
+ return 0;
+}