/****************************************************************************** 函数(模块)名称:void MultiByteWrite(unsigned long WriteAddr,unsigned char *WriteData,unsigned int WriteLent) 功能: FLASH字节写函数 输入参数:写地址,写数据 输出参数: 无 其它说明: *******************************************************************************/ void MultiByteWrite_SST25(unsigned long WriteAddr,unsigned char *WriteData,unsigned int WriteLent) { unsigned char Addr0,Addr1,Addr2; Addr0=(unsigned char)WriteAddr; WriteAddr=WriteAddr>>8; Addr1=(unsigned char)WriteAddr; WriteAddr=WriteAddr>>8; Addr2=(unsigned char)WriteAddr; WriteEnable(); SPI_CE_L; SPI_Send_Byte(AAIProgram_Command); //发送命令 SPI_Send_Byte(Addr2); //发送地址 SPI_Send_Byte(Addr1); SPI_Send_Byte(Addr0); SPI_Send_Byte(*WriteData++); //发送数据 SPI_CE_H; //__delay_cycles(50); // Delay; while(ReadStatus()&Busy_BIT); for(unsigned int i=0;i<WriteLent-1;i++) { SPI_CE_L; SPI_Send_Byte(AAIProgram_Command); //发送命令 SPI_Send_Byte(*WriteData++); //发送数据 SPI_CE_H; while(ReadStatus()&Busy_BIT); } WriteDisable(); while(ReadStatus()&WEL_BIT); }
//============================== //判断三个屏中其中一个是否处于忙状态; //============================== unsigned char ReadBusy(unsigned char chipselect) { if(chipselect=='L') return(ReadStatus('L')&0x80); if(chipselect=='M') return(ReadStatus('M')&0x80); else//(chipselect=='R') return(ReadStatus('R')&0x80); }
/* WaitUntilNotBusy ** ** Synopsis: ** WaitUntilNotBusy() ** Parameters: ** ** ** Return Values: ** void ** ** Errors: ** ** ** Description: ** Waits until the status of the CLP is not busy. This function relies on ReadStatus(). ** ** */ void LCDP::WaitUntilNotBusy() { uint8_t bStatus; bStatus = ReadStatus(); while (bStatus & LCDP_MSK_BStatus) { delayMicroseconds(10); bStatus = ReadStatus(); } }
/****************************************************************************** 函数(模块)名称:void SectorErase(unsigned int SectorAddr) 功能: FLASH块擦除函数 输入参数:FLASH块地址,从0开始 输出参数: 无 其它说明: *******************************************************************************/ void BlockErase_SST25(unsigned int BlockAddr) { unsigned char Addr0,Addr1,Addr2; unsigned long WritedAddr; WritedAddr = (unsigned long)BlockAddr; WritedAddr=WritedAddr<<15; Addr0=(unsigned char)WritedAddr; WritedAddr=WritedAddr>>8; Addr1=(unsigned char)WritedAddr; WritedAddr=WritedAddr>>8; Addr2=(unsigned char)WritedAddr; WriteEnable(); SPI_CE_L; SPI_Send_Byte(BlorkErase_Command);//发送命令 SPI_Send_Byte(Addr2); //发送地址 SPI_Send_Byte(Addr1); SPI_Send_Byte(Addr0); SPI_CE_H; WriteDisable(); while(ReadStatus()&Busy_BIT); }
/****************************************************************************** 函数(模块)名称:void ChipErase(void) 功能: FLASH芯片全部擦除函数 输入参数:无 输出参数: 无 其它说明: *******************************************************************************/ void ChipErase_SST25(void) { WriteEnable(); SPI_CE_L; SPI_Send_Byte(ChipErase_Command);//发送命令 SPI_CE_H; WriteDisable(); while(ReadStatus()&Busy_BIT); }
void TestReadStatus() { uchar b; char szBuf[17]; b = ReadStatus(); snprintf(szBuf, sizeof(szBuf), "cur: %x", b); PrintLn(szBuf); Sleep(true); b = ReadStatus(); snprintf(szBuf, sizeof(szBuf), "sleep: %x", b); PrintLn(szBuf); Sleep(false); b = ReadStatus(); snprintf(szBuf, sizeof(szBuf), "wake: %x", b); PrintLn(szBuf); }
void SendByte(uchar Data){ ReadStatus(3); // CLREA; LCD_DATA_OUT(Data); ClrCMD; ClrCE; //Разрешение записи в дисплей ClrWR; Delay(1); SetWR; SetCE; //Запрещение записи в дисплей // SETEA; }
void SendCmd(uchar Cmd){ ReadStatus(3); // CLREA; LCD_DATA_OUT(Cmd); SetCMD; ClrCE; //Разрешение записи в дисплей ClrWR; Delay(1); SetWR; SetCE; //Запрещение записи в дисплей // SETEA; }
void ClearGraf(void){ int i; InitLCD(); Send2(cmdAddrPtr,GrfHomeAddr); SendCmd(cmdOnAutoWr); //---- очистка графического экрана ------- for(i=0; i < 40*64; i++) { ReadStatus(8); // CLREA; LCD_DATA_OUT(0); ClrCMD; ClrCE; //Разрешение записи в дисплей ClrWR; Delay(1); SetWR; SetCE; //Запрещение записи в дисплей // SETEA; } SendCmd(cmdOffAuto); }
void SendSim(char vSim, char NumStr){ char vDisplCols; vDisplCols=DisplCols; Send2(cmdAddrPtr,TxtHomeAddr+NumStr*DisplCols); SendCmd(cmdOnAutoWr); while (vDisplCols--) { ReadStatus(8); // CLREA; LCD_DATA_OUT(vSim); ClrCMD; ClrCE; //Разрешение записи в дисплей ClrWR; Delay(1); SetWR; SetCE; //Запрещение записи в дисплей // SETEA; } SendCmd(cmdOffAuto); }
void SendBlockPM(char *Src, int Dst, int Size){ char ch; Send2(cmdAddrPtr,Dst); SendCmd(cmdOnAutoWr); while (Size--) { ch=Src - 0x20; Src++; ReadStatus(8); // CLREA; LCD_DATA_OUT(ch); ClrCMD; ClrCE; //Разрешение записи в дисплей ClrWR; Delay(1); SetWR; SetCE; //Запрещение записи в дисплей // SETEA; } SendCmd(cmdOffAuto); }
void SendFirstScreen(char tmSec){ int i; if(!tmSec) return; GrafView=tmSec; SendCmd(cmdTxtOffGrafOn); Send2(cmdAddrPtr,GrfHomeAddr); SendCmd(cmdOnAutoWr); for(i=0; i < 40*64; i++) { ReadStatus(8); // CLREA; LCD_DATA_OUT(FirstScreen[i]); ClrCMD; ClrCE; //Разрешение записи в дисплей ClrWR; Delay(1); SetWR; SetCE; //Запрещение записи в дисплей // SETEA; } SendCmd(cmdOffAuto); }
void DataFlash_Block::WriteBlock(const void *pBuffer, uint16_t size) { if (ReadStatus() != 0) return; if (!CardInserted() || !log_write_started) { return; } while (size > 0) { uint16_t n = df_PageSize - df_BufferIdx; if (n > size) { n = size; } if (df_BufferIdx == 0) { // if we are at the start of a page we need to insert a // page header if (n > df_PageSize - sizeof(struct PageHeader)) { n = df_PageSize - sizeof(struct PageHeader); } struct PageHeader ph = { df_FileNumber, df_FilePage }; BlockWrite(df_BufferIdx, &ph, sizeof(ph), pBuffer, n); // write PageHeader+data df_BufferIdx += n + sizeof(ph); } else { BlockWrite(df_BufferIdx, NULL, 0, pBuffer, n); df_BufferIdx += n; } size -= n; pBuffer = (const void *)(n + (uintptr_t)pBuffer); if (df_BufferIdx == df_PageSize) { FinishWrite(); df_FilePage++; } } }
/****************************************************************************** 函数(模块)名称:void ByteWrite_SST25(unsigned long WritedAddr,unsigned char WriteData) 功能: FLASH字节写函数 输入参数:写地址,写数据 输出参数: 无 其它说明: *******************************************************************************/ unsigned char ByteWrite_SST25(unsigned long WritedAddr,unsigned char WriteData) { unsigned char Addr0,Addr1,Addr2; Addr0=(unsigned char)WritedAddr; WritedAddr=WritedAddr>>8; Addr1=(unsigned char)WritedAddr; WritedAddr=WritedAddr>>8; Addr2=(unsigned char)WritedAddr; WriteEnable(); SPI_CE_L; SPI_Send_Byte(ByteProgram_Command);//发送命令 SPI_Send_Byte(Addr2); //发送地址 SPI_Send_Byte(Addr1); SPI_Send_Byte(Addr0); SPI_Send_Byte(WriteData); //发送数据 SPI_CE_H; //WriteDisable(); while(ReadStatus()&Busy_BIT); return 1; }
void CLabelManagerLanguageMonitor::CheckStatus() { fprintf(stderr, "DEBUG: CLabelManagerLanguageMonitor::CheckStatus()\n"); // restore good status of the job SetJobStatus(CASSETTE_PRESENT_BIT); if(!IsLocal()) return; while (true) { fprintf(stderr, "DEBUG: CLabelManagerLanguageMonitor::CheckStatus() 1\n"); buffer_t Status; time_t BeginTime = time(NULL); bool StatusOK = ReadStatus(Status); // request status while good or bad condition or timeout int i = 0; while ((!StatusOK || (Status[0] & BUSY_BIT)) && (difftime(time(NULL), BeginTime) < ReadStatusTimeout_)) { fprintf(stderr, "DEBUG: CLabelManagerLanguageMonitor::CheckStatus() 2 %i\n", i); StatusOK = ReadStatus(Status); i++; } if (difftime(time(NULL), BeginTime) >= ReadStatusTimeout_) { SetJobStatus(BUSY_BIT); fprintf(stderr, "DEBUG: CLabelManagerLanguageMonitor::CheckStatus() timeout\n"); break; } if((Status[0] & CASSETTE_PRESENT_BIT) == CASSETTE_PRESENT_BIT && !CheckTapeSize(Status)) Status[0] = INCORRECT_SIZE_BIT; if ((Status[0] == INCORRECT_SIZE_BIT) || (Status[0] & GENERAL_ERROR_BIT) || (Status[0] & HEAD_OVERHEAT_BIT) || (Status[0] & SLOT_STATUS_BIT) || ((Status[0] & CASSETTE_PRESENT_BIT) == 0)) { SetJobStatus(Status[0]); } else { // restore good status of the job SetJobStatus(CASSETTE_PRESENT_BIT); break; } } // clear stored label data PageData_.clear(); fprintf(stderr, "DEBUG: CLabelManagerLanguageMonitor::CheckStatus() return\n"); }
// Wait until DataFlash is in ready state... void DataFlash_CRIUS_AIOP2::WaitReady() { while(!ReadStatus()); }
// Wait until DataFlash is in ready state... // Assumes _spi_sem handled by caller. void DataFlash_VRBRAIN::WaitReady() { while(!ReadStatus()) ; }
/* send one valid char from the port */ void GSerial::SendChar(unsigned char unCh) { while ((ReadStatus() & 0x40) == 0); outportb(m_unPortBase,unCh); }
void ServiceMain(int argc, char **argv) { DWORD error; ServiceStatus.dwServiceType = SERVICE_WIN32; ServiceStatus.dwCurrentState = SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwServiceSpecificExitCode = 0; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 0; hStatus = RegisterServiceCtrlHandler(SERVICE_NAME, (LPHANDLER_FUNCTION)ControlHandler); if(hStatus == (SERVICE_STATUS_HANDLE)0) { return; } if(InitSerivce() != 0) { goto STOPSERVER; } error = ReadStatus(); if(error == -1) { if(GetNextFile() != 0 || PlayMusic() != 0) { goto STOPSERVER; } } else { if(pauseFlag == FALSE && stopFlag == FALSE) { if(PlayMusic() != 0) { goto STOPSERVER; } } else { if(GetMusicStatus() != 0) { goto STOPSERVER; } } } ServiceStatus.dwCurrentState = SERVICE_RUNNING; SetServiceStatus(hStatus, &ServiceStatus); while(ServiceStatus.dwCurrentState == SERVICE_RUNNING) { if(RecvMsg() != 0) { goto STOPSERVER; } if(playingFlag == FALSE && stopFlag == FALSE && pauseFlag == FALSE) { StopMusic(); if(GetNextFile() != 0 || PlayMusic() != 0) { goto STOPSERVER; } } } STOPSERVER: ServiceStatus.dwCurrentState = SERVICE_STOPPED; ServiceStatus.dwWin32ExitCode = -1; SetServiceStatus(hStatus, &ServiceStatus); return; }
// Wait until DataFlash is in ready state... // Assumes _spi_sem handled by caller. void DataFlash_APM1::WaitReady() { while(!ReadStatus()) ; }
// Wait until DataFlash is in ready state... void DataFlash_SITL::WaitReady() { while(!ReadStatus()); }