/******************************************************************************
  函数(模块)名称: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);
    
}
Exemple #2
0
//==============================
//判断三个屏中其中一个是否处于忙状态;
//==============================
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);
}
Exemple #3
0
/*        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);
   
}
Exemple #6
0
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);
}
Exemple #13
0
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()) ;
}
Exemple #18
0
/*  send one valid char from the port  */
void GSerial::SendChar(unsigned char unCh)
{
    while ((ReadStatus() & 0x40) == 0);
    outportb(m_unPortBase,unCh);
}
Exemple #19
0
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;
}
Exemple #20
0
// Wait until DataFlash is in ready state...
// Assumes _spi_sem handled by caller.
void DataFlash_APM1::WaitReady()
{
    while(!ReadStatus()) ;
}
Exemple #21
0
// Wait until DataFlash is in ready state...
void DataFlash_SITL::WaitReady()
{
	while(!ReadStatus());
}