?? uart.lis
字號:
01BC ; }
01BC ; //increment (word) address only when we have an uneven (byte) address
01BC ; if(i&1) address++;
01BC ; }
01BC ; }
01BC ; //Page Mode
01BC ; else
01BC ; {
01BC ; for(i=0;i<block_size;i++)
01BC ; {
01BC ; //If we have an uneven(奇數(shù)) byte programm the
01BC ; //high byte
01BC ; if(i&1)
01BC ; {
01BC ; SPIWrite(msg_buffer[5]|(1<<3)); //高字節(jié)
01BC ; }
01BC ; else
01BC ; {
01BC ; SPIWrite(msg_buffer[5]); //低字節(jié)
01BC ; }
01BC ; SPIWrite16(address);
01BC ; SPIWrite(msg_buffer[i+10]);
01BC ; //Check if we can do polling//用于數(shù)據(jù)輪尋,隨意找一個地址
01BC ; if(msg_buffer[8]!=msg_buffer[i+10])
01BC ; {
01BC ; //We have to check if we have an uneven byte.
01BC ; //Set the polling address to a byte address
01BC ; //so that we can poll the right location
01BC ; polling_address = (address&0xFFFF)*2;
01BC ; if(i&1) polling_address++;
01BC ; }
01BC ;
01BC ; //increment (word) address only when we have an uneven (byte) address
01BC ; if(i&1) address++;
01BC ; }
01BC ; //If this page is complete the bit 7 of mode will be set and we programm the page
01BC ; if(mode&0x80) //頁編程,并且選擇等待的方式
01BC ; {
01BC ; SPIWrite(msg_buffer[6]);
01BC ; SPIWrite16(start_address);
01BC ; SPIWrite(0x00);
01BC ; //If we have no valid polling address switch to simple wait mode
01BC ; if(polling_address==0)
01BC ; {
01BC ; mode = (mode&(~0x70)) | 0x10;
01BC ; }
01BC ; //Different polling methods
01BC ; //Hard waiting
01BC ; if((mode&0x70) == 0x10)
01BC ; {
01BC ; msDelay(msg_buffer[4]);
01BC ; }
01BC ; //Data polling
01BC ; else if((mode&0x70) == 0x20)
01BC ; {
01BC ; do{
01BC ; //If we have an uneven byte read the
01BC ; //high byte
01BC ; if(polling_address%2)
01BC ; {
01BC ; SPIWrite(msg_buffer[7]|(1<<3));
01BC ; }
01BC ; else
01BC ; {
01BC ; SPIWrite(msg_buffer[7]);
01BC ; }
01BC ; SPIWrite16(polling_address/2);
01BC ; tmp=SPIWrite(0x00);
01BC ; }while(tmp==msg_buffer[8]);
01BC ; }
01BC ; //RDY/BSY polling
01BC ; else if((mode&0x70) == 0x40)
01BC ; {
01BC ; while(universalComm(0xF0,0x00,0x00,0x00)&1);
01BC ; }
01BC ; //If something was not correct with the given mode do
01BC ; //hard waiting. Should never reach this point
01BC ; else
01BC ; {
01BC ; msDelay(msg_buffer[4]);
01BC ; }
01BC ; }
01BC ; }
01BC ; num_bytes = 2;
01BC ; msg_buffer[0] = CMD_PROGRAM_FLASH_ISP;
01BC ; }
01BC ; //命令CMD_READ_FLASH_ISP
01BC ; else if(cmd==CMD_READ_FLASH_ISP)
01BC ; {
01BC ; LED_FLASH2;
01BC ; block_size = ((unsigned int)msg_buffer[1])<<8;
01BC ; block_size |= msg_buffer[2];
01BC ; tmp = msg_buffer[3];
01BC ;
01BC ; for(i=0;i<block_size;i++)
01BC ; {
01BC ; //Select Low or High-Byte
01BC ; if(i&1)
01BC ; {
01BC ; SPIWrite(tmp|(1<<3));
01BC ; }
01BC ; else
01BC ; {
01BC ; SPIWrite(tmp);
01BC ; }
01BC ;
01BC ; SPIWrite16(address&0xFFFF);
01BC ; msg_buffer[i+2] = SPIWrite(0);
01BC ; //increment (word) address only when we have an uneven (byte) address
01BC ; if(i&1) address++;
01BC ; }
01BC ;
01BC ; num_bytes = block_size+3;
01BC ; msg_buffer[0] = CMD_READ_FLASH_ISP;
01BC ; msg_buffer[1] = STATUS_CMD_OK;
01BC ; msg_buffer[block_size+2] = STATUS_CMD_OK;
01BC ; }
01BC ; //命令CMD_PROGRAM_EEPROM_ISP
01BC ; else if(cmd==CMD_PROGRAM_EEPROM_ISP)
01BC ; {
01BC ; block_size = ((unsigned int)msg_buffer[1])<<8;
01BC ; block_size |= msg_buffer[2];
01BC ; mode = msg_buffer[3];
01BC ;
01BC ; //Byte Mode
01BC ; if((mode&1) == 0)
01BC ; {
01BC ; for(i=0;i<block_size;i++)
01BC ; {
01BC ; LED_FLASH2;
01BC ; SPIWrite(msg_buffer[5]);
01BC ; SPIWrite16(address&0xFFFF);
01BC ; SPIWrite(msg_buffer[i+10]);
01BC ;
01BC ; //Check if we can do polling
01BC ; if((msg_buffer[i+10]!=msg_buffer[8])&&(msg_buffer[i+10]!=msg_buffer[9]))
01BC ; {
01BC ; polling_address = address&0xFFFF;
01BC ; }
01BC ; //If not switch the mode hard waiting
01BC ; else
01BC ; {
01BC ; mode = (mode&(~0x0E)) | 0x02;
01BC ; }
01BC ;
01BC ; //Different polling methods
01BC ; //Hard waiting
01BC ; if((mode&0x0E) == 0x02)
01BC ; {
01BC ; msDelay(msg_buffer[4]);
01BC ; }
01BC ; //Data polling
01BC ; else if((mode&0x0E) == 0x04)
01BC ; {
01BC ; do{
01BC ; SPIWrite(msg_buffer[7]);
01BC ; SPIWrite16(polling_address);
01BC ; tmp=SPIWrite(0x00);
01BC ; }while((tmp==msg_buffer[8])||(tmp==msg_buffer[9]));
01BC ; }
01BC ; //RDY/BSY polling
01BC ; else if((mode&0x0E) == 0x08)
01BC ; {
01BC ; while(universalComm(0xF0,0x00,0x00,0x00)&1);
01BC ; //while(spi_transfer_32(0xF0000000)&1);
01BC ; }
01BC ; //If something was not correct with the given mode do
01BC ; //hard waiting. Should never reach this point
01BC ; else
01BC ; {
01BC ; msDelay(msg_buffer[4]);
01BC ; }
01BC ;
01BC ; //increment address
01BC ; address++;
01BC ; }
01BC ; }
01BC ; //Page Mode
01BC ; else
01BC ; {
01BC ;
01BC ; for(i=0;i<block_size;i++)
01BC ; {
01BC ; LED_FLASH2;
01BC ; SPIWrite(msg_buffer[5]);
01BC ; SPIWrite16(address&0xFFFF);
01BC ; SPIWrite(msg_buffer[i+10]);
01BC ; //Check if we can do polling
01BC ; if((msg_buffer[i+10]!=msg_buffer[8])&&(msg_buffer[i+10]!=msg_buffer[9]))
01BC ; {
01BC ; polling_address = address&0xFFFF;
01BC ; }
01BC ;
01BC ; //increment (word) address only when we have an uneven (byte) address
01BC ; address++;
01BC ; }
01BC ;
01BC ; //If this page is complete the bit 7 of mode will be set and we programm the page
01BC ; if(mode&0x80)
01BC ; {
01BC ; SPIWrite(msg_buffer[6]);
01BC ; SPIWrite16(start_address&0xFFFF);
01BC ; SPIWrite(0);
01BC ;
01BC ; //If we have no valid polling address switch to simple wait mode
01BC ; if(polling_address==0)
01BC ; {
01BC ; mode = (mode&(~0x70)) | 0x10;
01BC ; }
01BC ;
01BC ; //Different polling methods
01BC ; //Hard waiting
01BC ; if((mode&0x70) == 0x10)
01BC ; {
01BC ; msDelay(msg_buffer[4]);
01BC ; }
01BC ; //Data polling
01BC ; else if((mode&0x70) == 0x20)
01BC ; {
01BC ; do{
01BC ; //If we have an uneven byte read the
01BC ; //high byte
01BC ; if(i&1)
01BC ; {
01BC ; SPIWrite(msg_buffer[7]|(1<<3));
01BC ; }
01BC ; else
01BC ; {
01BC ; SPIWrite(msg_buffer[7]);
01BC ; }
01BC ; SPIWrite16(polling_address);
01BC ; tmp=SPIWrite(0x00);
01BC ; }while(tmp==msg_buffer[8]);
01BC ; }
01BC ; //RDY/BSY polling
01BC ; else if((mode&0x70) == 0x40)
01BC ; {
01BC ; while(universalComm(0xF0,0x00,0x00,0x00)&1);
01BC ; }
01BC ; //If something was not correct with the given mode do
01BC ; //hard waiting. Should never reach this point
01BC ; else
01BC ; {
01BC ; msDelay(msg_buffer[4]);
01BC ; }
01BC ; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -