📄 startup.c
字号:
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 + -