📄 timer.c
字号:
}
}
}
}
}
//Joe@2003.3.5 11:20 add begin
Key_Column1 = 0;
Key_Column2 = 0; //Scan Preview/Playback key, Flash key
//Joe@2003.3.7 13:41 add begin
Key_Column3 = 1;
//Joe@2003.3.7 13:41 add end
TIMER0_GetGPIOByte(25,&temp_key);
temp_key &= 0x1e;
if ((temp_key == 0x04) && (pressing_key == K_ReleaseKey)) //Check Preview/Playback Key
{
if (key != temp_key)
{
key = temp_key;
return;
}
else
{
pressing_key = K_ModeKey;
old_key = key;
return;
}
}
else
{
if ((temp_key == 0x02) && (pressing_key == K_ReleaseKey)) //Check Flash Key
{
if (key != temp_key)
{
key = temp_key;
return;
}
else
{
pressing_key = K_FlashKey;
old_key = key;
return;
}
}
}
//Joe@2003.3.5 11:20 add end
}
//Check if all 8 keys are released
if (pressing_key > K_ReleaseKey)
{
if (pressing_key <= 0x08) //Check Display,Menu,Snap1,Snap2
{
Key_Column1 = 1;
Key_Column2 = 0;
//Joe@2003.3.7 13:42 add begin
Key_Column3 = 0;
//Joe@2003.3.7 13:42 add end
TIMER0_GetGPIOByte(25,&temp_key);
temp_key &= 0x1e;
if (temp_key == 0x00)
{
if (key != temp_key)
{
key = temp_key;
return;
}
else
{
pressing_key = K_ReleaseKey;
old_key = key;
return;
}
}
}
//Joe@2003.3.5 12:45 modify begin
//else //pressing_key >= 0x10,Check Left,Up,Right,Down
else if (pressing_key <= 0x80) //Check Left,Up,Right,Down
//Joe@2003.3.5 12:45 modify end
{
Key_Column1 = 0;
Key_Column2 = 1;
//Joe@2003.3.7 13:42 add begin
Key_Column3 = 0;
//Joe@2003.3.7 13:42 add end
TIMER0_GetGPIOByte(25,&temp_key);
temp_key &= 0x1e;
if (temp_key == 0x00)
{
if (key != temp_key)
{
key = temp_key;
return;
}
else
{
pressing_key = K_ReleaseKey;
old_key = key;
return;
}
}
}
//Joe@2003.3.5 12:46 add begin
else if (pressing_key > 0x80) //Check Preview/Playback,Flash
{
Key_Column1 = 0;
Key_Column2 = 0;
//Joe@2003.3.7 13:42 add begin
Key_Column3 = 1;
//Joe@2003.3.7 13:42 add end
TIMER0_GetGPIOByte(25,&temp_key);
temp_key &= 0x1e;
if (temp_key == 0x00)
{
if (key != temp_key)
{
key = temp_key;
return;
}
else
{
pressing_key = K_ReleaseKey;
old_key = key;
return;
}
}
}
//Joe@2003.3.5 12:46 add end
}
#endif
}
//=============================================================================
//TIMER0_Get_Hardware_Keypad2
//=============================================================================
//ada@0415 test ui
UCHAR TIMER0_Get_Hardware_Keypad2(void) USING_2
{
UCHAR tt; // XiaoAo add at 2005.03.21
UCHAR temp_key;
UCHAR keymode = 0;
TIMER0_GetGPIOBit(28,&temp_key);
if (temp_key == 0x10)
{
//DelayBase(100);
for (tt=0; tt<100; tt++); // XiaoAo modify at 2005.03.21
TIMER0_GetGPIOBit(28,&temp_key);
if (temp_key == 0x10)
{
keymode |= 0x01;
}
}
TIMER0_GetGPIOBit(27,&temp_key);
if (temp_key == 0x08)
{
//DelayBase(100);
for (tt=0; tt<100; tt++); // XiaoAo modify at 2005.03.21
TIMER0_GetGPIOBit(27,&temp_key);
if (temp_key == 0x08)
{
keymode |= 0x02;
}
}
TIMER0_GetGPIOBit(26,&temp_key);
if (temp_key == 0x04)
{
//DelayBase(100);
for (tt=0; tt<100; tt++); // XiaoAo modify at 2005.03.21
TIMER0_GetGPIOBit(26,&temp_key);
if (temp_key == 0x04)
{
keymode |= 0x04;
}
}
TIMER0_GetGPIOBit(25,&temp_key);
if (temp_key == 0x02)
{
//DelayBase(100);
for (tt=0; tt<100; tt++); // XiaoAo modify at 2005.03.21
TIMER0_GetGPIOBit(25,&temp_key);
if (temp_key == 0x02)
{
keymode |= 0x08;
}
}
//wendy
//Davis:patch5.0.0.5_2005/Jul/19
//增加gpio35检测第五种模式选择
TIMER0_GetGPIOBit(35,&temp_key);
if (temp_key /*== 0x01*/)
{
for (tt=0; tt<100; tt++);
TIMER0_GetGPIOBit(35,&temp_key);
if (temp_key /*== 0x01*/)
{
keymode |= 0x10;
}
}
//wendy
switch (keymode)
{
/* case 0x00:
return K_RotarySwitchMode0; //mode 0
*/
case 0x01:
old_Audeokey=0;//wendy
return K_RotarySwitchMode0; //mode 1
case 0x02:
old_Audeokey=0;//wendy
return K_RotarySwitchMode1; //mode 2
case 0x04:
old_Audeokey=0;//wendy
return K_RotarySwitchMode2; //mode 3
case 0x08:
old_Audeokey=0;//wendy
return K_RotarySwitchMode3; //mode 4
/* //Davis:patch5.0.0.5_2005/Jul/19 close
case 0x00:
if(old_Audeokey==10)//wendy
return K_RotarySwitchMode4;
else//mode 5
old_Audeokey++;
return K_RotateSwitchUnknownMode; //unknown mode
//*/
//Davis:patch5.0.0.5_2005/Jul/19 当检测到GPIO35,进入第五种模式
case 0x10:
old_Audeokey=0;
return K_RotarySwitchMode4;
/*
case 0x09:
return K_RotarySwitchMode6; //mode 6
case 0x0c:
return K_RotarySwitchMode7; //mode 7
*/
default:
return K_RotateSwitchUnknownMode; //unknown mode
}
}
//-----------------------------------------------------------------------------
//TIMER0_GetGPIOBit
//-----------------------------------------------------------------------------
//ada@0415 test ui
UCHAR TIMER0_GetGPIOBit(UCHAR Index, PUCHAR GPIOBitValPt) USING_2
{
UCHAR BitNum;
USHORT Addr;
UCHAR tmp0, tmp1;
UCHAR status = 0x00;
BitNum = Index&0x07;
Addr = 0x2040|(USHORT)(Index>>3);
tmp0 = XBYTE[Addr];
tmp1 = 0x01<<BitNum;
*GPIOBitValPt = tmp0&tmp1;
return status;
}
//-----------------------------------------------------------------------------
//TIMER0_SetGPIOBit
//-----------------------------------------------------------------------------
//ada@0515
void TIMER0_SetGPIOBit(UCHAR Index, UCHAR Value) USING_2
{
UCHAR BitNum;
USHORT Addr;
UCHAR tmp0, tmp1;
BitNum = Index & 0x07;
Addr = 0x2030 | (USHORT)(Index >> 3);
tmp0 = XBYTE[Addr];
tmp1 = 0x01 << BitNum;
if (Value)
{
XBYTE[Addr] = tmp0 | tmp1;
}
else
{
XBYTE[Addr] = tmp0 & (~tmp1);
}
}
//-----------------------------------------------------------------------------
//TIMER0_GetGPIOByte
//-----------------------------------------------------------------------------
//ada@0415 test ui
UCHAR TIMER0_GetGPIOByte (UCHAR Index, UCHAR *GPIOByteValPt) USING_2
{
USHORT Addr;
UCHAR status = 0x00;
Addr = 0x2040|(USHORT)(Index>>3);
*GPIOByteValPt = XBYTE[Addr];
return status;
}
//patch4.4@ada@MP3 begin
//Joe@2003.2.28 9:28 mask begin
//#if (MP3_OPTION)
//Joe@2003.2.28 9:29 mask end
//---------------------------------------------------------------------------------------------------------------------------------------
//DELAY_10us
//---------------------------------------------------------------------------------------------------------------------------------------
void DELAY_10us(void) USING_0
{
#pragma asm
MOV R6,#010
DELAY_10us_1: ;10 * 6 * (4 / 24M) s = 10 us
NOP ;1 Instr. Cycles
NOP ;1 Instr. Cycles
NOP ;1 Instr. Cycles
DJNZ R6,DELAY_10us_1 ;3 Instr. Cycles
#pragma endasm
}
//---------------------------------------------------------------------------------------------------------------------------------------
//DELAY_1ms
//---------------------------------------------------------------------------------------------------------------------------------------
void DELAY_1ms(void) USING_0
{
#pragma asm
MOV R5,#010
DELAY_1ms_1:
MOV R6,#100
DELAY_1ms_2: ;100 * 6 * (4 / 24M) s = 100 us
NOP ;1 Instr. Cycles
NOP ;1 Instr. Cycles
NOP ;1 Instr. Cycles
DJNZ R6,DELAY_1ms_2 ;3 Instr. Cycles
DJNZ R5,DELAY_1ms_1 ;3 Instr. Cycles
#pragma endasm
}
//Joe@2003.2.28 9:29 mask begin
//#endif
//Joe@2003.2.28 9:29 mask end
//patch4.4@ada@MP3 end
//patch4.4@ada@FOSD begin
//---------------------------------------------------------------------------------------------------------------------------------------
//DELAY_1s
//---------------------------------------------------------------------------------------------------------------------------------------
void DELAY_1s(void) USING_0
{
#pragma asm
MOV R4,#100
DELAY_1s_1:
MOV R5,#100
DELAY_1s_2:
MOV R6,#100
DELAY_1s_3: ;100 * 6 * (4 / 24M) s = 100 us
NOP ;1 Instr. Cycles
NOP ;1 Instr. Cycles
NOP ;1 Instr. Cycles
DJNZ R6,DELAY_1s_3 ;3 Instr. Cycles
DJNZ R5,DELAY_1s_2 ;3 Instr. Cycles
DJNZ R4,DELAY_1s_1 ;3 Instr. Cycles
#pragma endasm
}
//patch4.4@ada@FOSD end
//-----------------------------------------------------------------------------
// TIMER1
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//TIMER1
//-----------------------------------------------------------------------------
void TIMER1_Routine(void) INTERRUPT_3 USING_3
{
EX0 = 0;
TIMER1_Handler(); //TIMER1 handler
EX0 = 1;
}
//-----------------------------------------------------------------------------
//TIMER1_Handler
//-----------------------------------------------------------------------------
void TIMER1_Handler(void) USING_3
{
TR1 = 0 ;
TH1 = K_Timer1IntervalHi;
TL1 = K_Timer1IntervalLo;
TR1 = 1 ;
}
//-----------------------------------------------------------------------------
//TIMER1_Start
//-----------------------------------------------------------------------------
void TIMER1_Start(void) USING_3
{
//start timer
ET1 = 1; //IE: TIMER1 interrupt enable
TR1 = 1; //TCON: TIMER1 enable
}
//-----------------------------------------------------------------------------
//TIMER1_Stop
//-----------------------------------------------------------------------------
void TIMER1_Stop(void) USING_3
{
ET1 = 0; //IE: TIMER1 interrupt disable
TR1 = 0; //TCON: TIMER1 disable
}
//Joe@2003.3.5 9:19 add begin
//=============================================================================
//TIMER0_LowPowerCount
//=============================================================================
void TIMER0_LowPowerCount(void) USING_2
{
#if (K_BATT_SEG_TOTAL >= 1)
if(G_BatteryStatus == K_BATTERY_STATUS_EMPTY)//wendy@2004/10/3
{
if (G_LowPowerCount < 100)
G_LowPowerCount++;
}
//wendy@2004/10/3
else{
if (LB3){
if (G_LowPowerCount > 0)
G_LowPowerCount--;
}
else {
if (G_LowPowerCount < 80)
G_LowPowerCount++;
}
}
#endif
#if (K_BATT_SEG_TOTAL >= 2)
if (LB2 == 0){
if (G_MidPowerCount < 50){
G_MidPowerCount++;
G_LowPowerCount = 0;
}
}
else{
G_LowPowerCount = 0;
if (G_MidPowerCount > 0)
G_MidPowerCount--;
}
#endif
#if (K_BATT_SEG_TOTAL >= 3)
if (LB1 == 0)
{
if (G_HighPowerCount < 50)
{
G_HighPowerCount++;
G_MidPowerCount = 0;
}
}
else
{
G_MidPowerCount = 0;
if (G_HighPowerCount > 0)
{
G_HighPowerCount--;
}
}
#endif
}
//Joe@2003.3.5 9:19 add end
//Joe@2003.3.20 9:24 add begin
//---------------------------------------------------------------------------------------------------------------------------------------
//DELAY_100us
//---------------------------------------------------------------------------------------------------------------------------------------
void DELAY_100us(void) USING_0
{
#pragma asm
MOV R6,#100
DELAY_100us_1: ;100 * 6 * (4 / 24M) s = 100 us
NOP ;1 Instr. Cycles
NOP ;1 Instr. Cycles
NOP ;1 Instr. Cycles
DJNZ R6,DELAY_100us_1 ;3 Instr. Cycles
#pragma endasm
}
//---------------------------------------------------------------------------------------------------------------------------------------
//DELAY_10ms
//---------------------------------------------------------------------------------------------------------------------------------------
void DELAY_10ms(void) USING_0 // XiaoAo modify at 2005.03.21
{
#pragma asm
MOV R5,#100
DELAY_10ms_1:
MOV R6,#100
DELAY_10ms_2: ;100 * 6 * (4 / 24M) s = 100 us
NOP ;1 Instr. Cycles
NOP ;1 Instr. Cycles
NOP ;1 Instr. Cycles
DJNZ R6,DELAY_10ms_2 ;3 Instr. Cycles
DJNZ R5,DELAY_10ms_1 ;3 Instr. Cycles
#pragma endasm
}
//---------------------------------------------------------------------------------------------------------------------------------------
//DELAY_100ms
//---------------------------------------------------------------------------------------------------------------------------------------
void DELAY_100ms(void) USING_0
{
#pragma asm
MOV R4,#010
DELAY_100ms_1:
MOV R5,#100
DELAY_100ms_2:
MOV R6,#100
DELAY_100ms_3: ;100 * 6 * (4 / 24M) s = 100 us
NOP ;1 Instr. Cycles
NOP ;1 Instr. Cycles
NOP ;1 Instr. Cycles
DJNZ R6,DELAY_100ms_3 ;3 Instr. Cycles
DJNZ R5,DELAY_100ms_2 ;3 Instr. Cycles
DJNZ R4,DELAY_100ms_1 ;3 Instr. Cycles
#pragma endasm
}
//Joe@2003.3.20 9:24 add end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -