Exemple #1
0
int commandClearFlash(uint8_t *buffer)
{
	uint8_t state = getProcessStatus();
	if( (state == 1) || (state == 3) )
		*buffer = 0x0E;
	else
	{
		EventBits_t flags = xEventGroupGetBits(xEventGroup);
		if( flags & FLAG_FLASH_CLEARING )
		{
			*buffer++ = 0x0d; //устройство занято
			*buffer = 0x04; //устройство зянято стиранием памяти
			return 7;
		}
		else
		{
			memset((void*)flashMap, 0xff, sizeof(flashMap));
			memset((void*)headerList, 0xff, sizeof(headerList));
			countProc = 0;
			spiChipErase();
			xEventGroupSetBits(xEventGroup, FLAG_FLASH_CLEARING);
			//стартуем таймер на 22 сек, после которого state сменим с 4 на 2.
			xTimerStart(timerClearFlash, 500);
		}
	}
	return 6;
}
Exemple #2
0
void
main(
)
{
    char cmd, blockSize, exit = 0;
    long addr;

    init();
	#asm("sei")
    if (PRGE) {
#ifdef __DEBUG__
        printf("Program enable\r\n");
#endif  /*__DEBUG__*/
		do {
			cmd = receiveByte();
			switch(cmd) {
				case LC_ERASE:
				    spiWriteEnable();
					spiChipErase();
					putchar(0x55);	//ack
					break;
				case LC_LOAD:
					blockSize = receiveByte();
					addr = receiveByte();				//low address byte
					addr |= ((long)receiveByte()) << 8;	//high address byte
					flushRxBuffer();
					putchar(0x55);	//ack
					while (g_uRxCount < blockSize) ;
					spiWriteEnable();
					spiWriteBlock(addr, g_pbRxBuffer, blockSize);
					flushRxBuffer();
					putchar(0x55);	//ack
					break;
				case LC_RESET_CHIP:
					putchar(0x55);	//ack
					exit = 1;
					break;
				case LC_BLANK_CHECKING:
					putchar(spiBlankChecking()? 0x55: 0xff);
					break;
				case LC_READ:
					addr = receiveByte();				//low address byte
					addr |= ((long)receiveByte()) << 8;	//high address byte
					putchar(0x55);	//ack
					putchar(spiRead8(addr));
					break;
				default:
					flushRxBuffer();
					putchar(0xfe);	//error
					putchar(cmd);
					break;
			}
		} while (!exit);
    }
    else {
#ifdef __DEBUG__
        printf("Program disable\r\n");
#endif  /*__DEBUG__*/
        
    }
	#asm("cli");
    //idle mode
	resetBlackfin();
    //TODO: sleep mode after running blackfin
    while (1) {
    }
}