⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 startup.c

📁 瑞萨单片机开发软代码.非常实用小巧的平台,很多应用都可以在上面实现.
💻 C
📖 第 1 页 / 共 2 页
字号:
		SCI_Str("\r\n first data=0x");
		SCI_HexB(datarecv[1]);
		SCI_Str(" second data=0x");
		SCI_HexB(datarecv[2]);
		SCI_Str(" third data=0x");
		SCI_HexB(datarecv[3]);
		SCI_Str(" fourth data=0x");
		SCI_HexB(datarecv[4]);
		SCI_Str(" fifth data=0x");
		SCI_HexB(datarecv[5]);
	    switch(datarecv[2])
		   {
		    case 0:
			index_out(0xb0);     /*  contrast setting */ 
            //index_out(datarecv[3]*256+datarecv[4]);
  			data_out(datarecv[3]*256+datarecv[4]);
			break;
			case 1:
			data_out(datarecv[3]*256+datarecv[4]);
			break;
			case 2:
			//ClearDisp();
			//ShowPicture( datarecv[4], 176, 220 );
		//	 DisplayPic(datarecv[4]);
	//		ShowPicture( datarecv[4], 128, 128 );
			break;
			case 3:
			for(i=0;i<8;i++)ShowPicture( i, 176, 220 );
			break;
			case 4:
            init_lcdPCF8839();
			break;
			default:
			datarecv[2]=0xff;
			//SCI_Str("\nInvalid command.");
			break;
			}
		}
		else SCI_Str("\r\n data receive error!");	   
	}//END system while LOOP



}


extern	unsigned char	*_B_BGN, *_B_END, *_D_BGN, *_D_END, *_D_ROM;

/***************************************************************************
Function Name	:_INITSCT(void)
Working			:copy initial value to RAM area
Return Value	:void
Modified		:{Author : T.Ishikawa[2001.Jan.10]}
Created			:{Author : T.Takenaga[2000.Jan.11]}
***************************************************************************/
void	_INITSCT(void) 
{
	unsigned char  *p, *q;

	for (p = _B_BGN; p < _B_END; p++) 
	{
		*p = 0;
	}
	for (p = _D_BGN, q = _D_ROM; p < _D_END; p++, q++) 
	{
		*p = *q;
	}
}


/***************************************************************************
Function Name	:InitSystem(void)
Working			:Set USB clock & interrupt mask.
Return Value	:void
Created			:{Author : T.Ishikawa[2001.Nov.28]}
***************************************************************************/
void	InitSystem(void) 
{

	/*	get interrupt enable flag	*/
	GET_INTERRUPT_ENABLE
	
	USBFM.UCTLR.BYTE |= 0x1C;	//	0001 1100 use PLL
//	USBFM.UCTLR.BYTE |= 0x20;	//	48M module used

	LPW.MSTPCRB.BYTE &= ~0x01;	/*	---- ---0	*/	/*	Disable USB module stop function	*/

	set_imask_exr(1);
	set_imask_ccr(0);
}


/***************************************************************************
Function Name	:error(void)
Working			:Occured ERROR
Return Value	:void
Modified		:{Author : T.Ishikawa[2001.Oct.03]}
Created			:{Author : T.Takenaga[2000.Jan.14]}
***************************************************************************/
void	error(void) 
{
	sleep();
}


//***************************************************************************
//** Function Name	:InitStorage(void)
//** Working			:Setup storage's pointer, prepare MBR buffer, check storage ready
//** Return Value	:void
//***************************************************************************
const unsigned char format_ID[] = {"ForMateD!!"}; 

unsigned char InitStorage(void)
{
	unsigned char  readCounter = 0;
    char c;
    unsigned long addr;
    unsigned char i;
    unsigned int j;

    // check flash memory formated??
    ChipSelect_F1                                // chip select
    
    freset();                                    // reset flash memory

    flash_rw.addr = 0;
    flash_rw.length = 10;
    flash_rw.buff_ptr = &Cache->ReadCache.Buf[0];
    fread_data(512);
    
    c = 0;
    for (i=0;i<10;i++)
    {
     if (Cache->ReadCache.Buf[i]!=format_ID[i])
      c = 1;
    }                                      
    
    if (c == 1)
    {
     // preform format here
     SCI_Str("\r\nMemory Not Format!!!");   
     errorcode = FLASH_NOT_FORMAT;
    }
    else
     SCI_Str("\r\nMemory Ready!");
    
    //** locate spare blk address
    flash_rw.addr = SPARE_PAGE;
    flash_rw.length = (NUM_OF_SPARE*2);                        
    flash_rw.buff_ptr = &Cache->ReadCache.Buf[0];
    fread_data(0);

    // looking for backup block
    backup_odd = 0;
    backup_even = 0;
    i = 0;
    j = (unsigned int)Cache->ReadCache.Buf[i] | (unsigned int)(Cache->ReadCache.Buf[i+1]<<8);
    while ((backup_odd & backup_even)==0 || j!=0xffff)
    {
     if (j!=0)
     {
      if ((j&0x01)==0 && backup_even==0) 
         backup_even = (unsigned long)j*32;
      else if ((j&0x01)==1 && backup_odd==0)
        backup_odd = (unsigned long)j*32;
     }
     i += 2;                           
     j = (unsigned int)Cache->ReadCache.Buf[i] | (unsigned int)(Cache->ReadCache.Buf[i+1]<<8);
     if (i>=NUM_OF_SPARE)
      break;
    }                  

    SCI_Str("\r\nBackup BLK: ");
    SCI_Hex(backup_odd);
    SCI_Str(" ");
    SCI_Hex(backup_even);

    // report error, bcos no more spare block
    if ((backup_odd & backup_even) == 0)
    {
     SCI_Str("\r\nNo More Backup BLK!!!!");
     errorcode = NO_BACKUP_BLK;
    } 
   
    ferase_blk((unsigned int)backup_odd);
    ferase_blk((unsigned int)backup_even); 
    De_ChipSelect_F1

	ReadFlash(0, &MBRCache.Buf[0]);

	Cache->ReadCache.Addr = 0;
	Cache->ReadCache.Modified = 0;

	Cache->WriteCache.Addr = 0;
	Cache->WriteCache.Modified = 0;
	Cache->WriteCache.Modified_BLK = 0;
    
	BufPtr[0].sPtr = 0;
	BufPtr[0].ePtr = 0;
	
	BufPtr[1].sPtr = 0;
	BufPtr[1].ePtr = 0;
	
	BufPtr[2].sPtr = 0;
	BufPtr[2].ePtr = 0;
	
	BufPtr[3].sPtr = &Cache->ReadCache.Buf[0];
	BufPtr[3].ePtr = &Cache->ReadCache.Buf[READ_SIZE];

	BufPtr[4].sPtr = &Cache->WriteCache.Buf[0];
	BufPtr[4].ePtr = &Cache->WriteCache.Buf[WRITE_SIZE];
	
	BufPtr[5].sPtr = &cbwDataGVar->byteVal[0];
	BufPtr[5].ePtr = &cbwDataGVar->byteVal[0];

	BufPtr[6].sPtr = &MBRCache.Buf[0];
	BufPtr[6].ePtr = &MBRCache.Buf[0];
	
	contCMDGPtr.sPtr = &ep0PacketGVar.byteVal[0];
	contCMDGPtr.ePtr = &ep0PacketGVar.byteVal[0];  
	
	return SUCCESS;
}

/***************************************************************************
Function Name	:IRQ6_Int(void)
Working			:Suspend/Resume Operation.
Return Value	:void
***************************************************************************/
void	IRQ6_Int(void) 
{
	unsigned char UIFR3;

	INTC.ISR.BYTE &= ~BIT6;                       // clear IRQ6 int req. flag

    // check current status, "1" suspend, "0" normal operation
    if (suspend==0)                                           
    {  
    	UIFR3 = INTERRUPT3_REGISTER;			  // get interrupt request flag register 3 (UIFR3)
    	INTERRUPT3_REGISTER = (UIFR3 & ~BIT2);    // clear SPRSi in UIFR3
                                 
        if ((UIFR3&BIT3)!=0)                      // stay in normal operation 
        {   
            // change operation state from normal operation --> suspend
            suspend = 1;                          // suspend request, the main loop will go sleep
            LPW.MSTPCRA.BYTE = 0xFF;
            LPW.MSTPCRB.BYTE = 0xFF;              // USB module standby     
        }    
    } else {
      // current state == suspend
            LPW.MSTPCRB.BYTE &= ~0x21;                // enable USB module, SCI2
	     	UIFR3 = INTERRUPT3_REGISTER;			  // get interrupt request flag register 3 (UIFR3)
        	INTERRUPT3_REGISTER = (UIFR3 & ~BIT2);    // clear SPRSi in UIFR3
        	
        	if ((UIFR3&BIT3)==0)
        	{    // change opertaion state from suspend --> normal operation
        	     LPW.MSTPCRA.BYTE = 0x7F;		          //	0111 1111 - DMAC  , DTC   , TPU   , TMR_0/1 , --- , --- , A/D , --- 
              	 UIFR3 = INTERRUPT3_REGISTER;			  // get interrupt request flag register 3 (UIFR3)
        	     INTERRUPT3_REGISTER = (UIFR3 & ~BIT2);    // clear SPRSi in UIFR3
	             suspend = 0;                              // clear suspend
        	} else 
                 // already in suspend, USB module standby again
                 LPW.MSTPCRB.BYTE = 0xFF;              // USB module standby     
	}            
}

void WaitTime( unsigned short ms)
{
	unsigned short tmp,i;

	if( ms == 0 )
		return;

	for( i =0 ;i<ms; i++ )
		for( tmp = 0; tmp < 0x2550; tmp ++ );
}
void pwm_output( )
{
	int i=0;

	SCI_Str("\r\nTest the PWM OUTPUT!\r\n");
	TPU1.TCR.BIT.TPSC2 =0 ;
	TPU1.TCR.BIT.TPSC1 =0 ;
	TPU1.TCR.BIT.TPSC0 =1 ;
	TPU1.TCR.BIT.CKEG1 =0 ;
	TPU1.TCR.BIT.CKEG0 =0 ;

	TPU1.TCR.BIT.CCLR1 =0 ;
	TPU1.TCR.BIT.CCLR0 =1 ;

	TPU1.TIOR.BYTE = 0x61;
	TPU1.TGRA = 1500;
	TPU1.TGRB = 100; // duty setting
	TPU1.TMDR.BYTE = 0x2;
	TPU.TSTR.BIT.CST1 = 1;

	//as below is the test of duty and  period time!
	while( 1 )
	{
		WaitTime( 5000 );
		SCI_Str("\r\nPWM Function: TCNT=");
		SCI_HexS( TPU1.TCNT );
		SCI_Str(" TSR =");
		SCI_HexS( TPU1.TSR.BYTE );
		TPU.TSTR.BIT.CST1 = 0;
		TPU1.TGRA = 1500+i*30;
		if( i>25 )
		TPU1.TGRB = 500;
		else
		TPU1.TGRB = 500+i*30;
		TPU1.TMDR.BYTE = 0x2;
		TPU.TSTR.BIT.CST1 = 1;
		i++;
		if( i> 50 )
			i = 1;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -