MC_FLASH_COMMAND_PAGEN((c->arg[0]-(int)&_flash_start)/AT91C_IFLASH_PAGE_SIZE) |\r
AT91C_MC_FCMD_START_PROG;\r
}\r
- while(!(AT91C_BASE_EFC0->EFC_FSR & MC_FLASH_STATUS_READY))\r
+ \r
+ uint32_t sr;\r
+ \r
+ while(!((sr = AT91C_BASE_EFC0->EFC_FSR) & MC_FLASH_STATUS_READY))\r
;\r
+ if(sr & (MC_FLASH_STATUS_LOCKE | MC_FLASH_STATUS_PROGE)) { \r
+ dont_ack = 1;\r
+ c->cmd = CMD_NACK;\r
+ UsbSendPacket(packet, len);\r
+ }\r
break;\r
\r
case CMD_HARDWARE_RESET:\r
\r
#define MC_FLASH_COMMAND_KEY ((0x5a)<<24)\r
#define MC_FLASH_STATUS_READY (1<<0)\r
+#define MC_FLASH_STATUS_LOCKE (1<<2)\r
+#define MC_FLASH_STATUS_PROGE (1<<3)\r
#define MC_FLASH_MODE_FLASH_WAIT_STATES(x) ((x)<<8)\r
#define MC_FLASH_MODE_MASTER_CLK_IN_MHZ(x) ((x)<<16)\r
#define MC_FLASH_COMMAND_PAGEN(x) ((x)<<8)\r