Esempio n. 1
0
File: SPI.c Progetto: thonv54/IR-PIR
/*****************************************************************************//*!
 +FUNCTION----------------------------------------------------------------
 * @function name: SPI0_Init
 *
 * @brief initialize SPI0 to master mode
 *        
 * @param  none 
 *
 * @return none
 *
 * @ Pass/ Fail criteria: none
 *****************************************************************************/
void SPI0_Init(void) {
	unsigned char temp[4] = { 0 };
	volatile char dummy;

	CS_PIN_Init;
	// SPI0 initial
	//SYS_SOPT1_SPI0PS  = 1;     // SPI0 SPSCK0, MOSI0, MISO0, and SS0 are mapped on PTE0, PTE1, PTE2, and PTE3.
	SPI0_C1_MSTR = 1;            // master
	SPI0_C1_CPOL = 0;
	SPI0_C1_CPHA = 0;

	SPI0_BR_SPR = 0b001;		// device 2
	SPI0_BR_SPPR = 0b000;		// device 2 -> Baud = 20/4 =500khz
	dummy = SPI0_D;
	SPI0_C1_SPE = 1;            // enabled

	flash_read_id(temp);
}
Esempio n. 2
0
int main(int argc, char **argv)
{
	if (argc != 2 || (argv[1][0] == '-' && argv[1][1]) || !argv[1][0]) {
		printf("Usage: %s <binfile>  ... program <binfile> to IceZero flash\n", argv[0]);
		printf("       %s -          ... program stdin to IceZero flash\n", argv[0]);
		printf("       %s .          ... erase first sector of IceZero flash\n", argv[0]);
		printf("       %s ..         ... just restart the FPGA\n", argv[0]);
		return 1;
	}

	wiringPiSetup();

	pinMode(CFG_SS,   OUTPUT);
	pinMode(CFG_SCK,  OUTPUT);
	pinMode(CFG_SI,   INPUT);
	pinMode(CFG_SO,   OUTPUT);
	pinMode(CFG_RST,  OUTPUT);
	pinMode(CFG_DONE, INPUT);

	digitalWrite(CFG_SS,  HIGH);
	digitalWrite(CFG_SCK, LOW);
	digitalWrite(CFG_SO,  LOW);
	digitalWrite(CFG_RST, LOW);

	if (strcmp(argv[1], ".."))
	{
		flash_power_up();
		flash_read_id();
	}

	if (!strcmp(argv[1], "."))
	{
		char buffer[1024];
		int i;

		for (i = 0; i < (int)sizeof(buffer); i++)
			buffer[0] = 0xff;

		flash_wrsector(0, buffer, sizeof(buffer));
	}
	else
	if (strcmp(argv[1], ".."))
	{
		int addr = 0, size = 0;
		char buffer[64*1024];

		FILE *f = strcmp(argv[1], "-") ? fopen(argv[1], "rb") : stdin;

		if (f == NULL) {
			printf("Failed to open %s: %s\n", argv[1], strerror(errno));
			return 1;
		}

		do {
			addr += size;
			size = 0;

			while (size < (int)sizeof(buffer)) {
				int rc = fread(buffer+size, 1, sizeof(buffer)-size, f);
				if (rc <= 0) break;
				size += rc;
			}

			if (size > 0)
				flash_wrsector(addr, buffer, size);
		} while (size == sizeof(buffer));
	}

	digitalWrite(CFG_RST, LOW);
	usleep(2000);

	digitalWrite(CFG_RST, HIGH);
	usleep(500000);

	if (digitalRead(CFG_DONE) != HIGH) {
		printf("Warning: cdone is low\n");
		return 1;
	}

	printf("DONE.\n");
	return 0;
}