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

📄 timer.c

📁 台湾凌阳方案300万数码相机源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
     {
          keymode1 = temp_key;
     }
     else
     {
          if (temp_key == 0x20)
          {
               old_keymode1 = keymode1;
               mode_change = 1;
               keymode |= 0x01;
          }
     }

     TIMER0_GetGPIOBit(30,&temp_key);

     if (keymode2 != temp_key)
     {
          keymode2 = temp_key;
     }
     else
     {
          if (temp_key == 0x40)
          {
               old_keymode2 = keymode2;
               mode_change = 1;
               keymode |= 0x02;
          }
     }

     //patch4.4@ada@MP3 begin
     #if (MP3_OPTION == 0)
     TIMER0_GetGPIOBit(38,&temp_key);

     if (keymode3 != temp_key)
     {
          keymode3 = temp_key;
     }
     else
     {
          if (temp_key == 0x40)
          {
               old_keymode3 = keymode3;
               mode_change = 1;
               keymode |= 0x04;
          }
     }

     TIMER0_GetGPIOBit(39,&temp_key);

     if (keymode4 != temp_key)
     {
          keymode4 = temp_key;
     }
     else
     {
          if (temp_key == 0x80)
          {
               old_keymode4 = keymode4;
               mode_change = 1;
               keymode |= 0x08;
          }
     }
     #endif
     //patch4.4@ada@MP3 end
     */
     //Joe@2003.2.28 10:42 mask end

     //Joe@2003.2.28 10:42 add begin
     TIMER0_GetGPIOBit(29,&temp_key);
     if (temp_key == 0x20)
          keymode |= 0x01;

     TIMER0_GetGPIOBit(30,&temp_key);
     if (temp_key == 0x40)
          keymode |= 0x02;

     TIMER0_GetGPIOBit(38,&temp_key);
     if (temp_key == 0x40)
          keymode |= 0x04;

     TIMER0_GetGPIOBit(39,&temp_key);
     if (temp_key == 0x80)
          keymode |= 0x08;
     //Joe@2003.2.28 10:42 add end

//     if (mode_change > 0)
     {
     	//Joe@2003.2.28 10:46 mask begin
          //mode_change = 0;
        //Joe@2003.2.28 10:46 mask end

          switch (keymode)
          {
               case 0x00:
                    return K_RotarySwitchMode0;      //mode 0

               case 0x01:
                    return K_RotarySwitchMode1;      //mode 1

               case 0x02:
                    return K_RotarySwitchMode2;      //mode 2

               case 0x04:
                    return K_RotarySwitchMode3;      //mode 3

               case 0x08:
                    return K_RotarySwitchMode4;      //mode 4

               case 0x06:
                    return K_RotarySwitchMode5;      //mode 5

               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==0){
			 if (G_LowPowerCount > 0)
					 G_LowPowerCount--;
	     }
	     else {
			 if (G_LowPowerCount < 80)
					 G_LowPowerCount++;
	     }
	}
     #endif
     #if (K_BATT_SEG_TOTAL >= 2)
     if (LB2){
		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 )
     {
		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 + -