; generated by Component: ARM Compiler 5.05 update 2 (build 169) Tool: ArmCC [4d0f38]
; commandline ArmCC [--list --debug -c --asm --interleave -o.\obj\vk3816.o --asm_dir=.\lst\ --list_dir=.\lst\ --depend=.\obj\vk3816.d --cpu=Cortex-M4.fp --apcs=interwork -O0 --diag_suppress=9931 -I..\..\..\Library\CMSIS\Include -I..\..\..\Library\Device\Nuvoton\M451Series\Include -I..\..\..\Library\StdDriver\inc -I..\Bsp -I..\User -I..\lcd_driver -I..\exti_driver -I..\led_driver -I..\touch -I..\dotmatix_lcd -I..\KH -I.\RTE\_project -IC:\Keil_v5\ARM\PACK\ARM\CMSIS\4.3.0\CMSIS\Include -D__UVISION_VERSION=527 -D_RTE_ --omf_browse=.\obj\vk3816.crf ..\touch_driver\VK3816.c]
                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  Delay_nuS PROC
;;;35     **************************************************************/
;;;36     void Delay_nuS(unsigned int n)	   
000000  e007              B        |L1.18|
                  |L1.2|
;;;37     {
;;;38     	unsigned char i;
;;;39     	while(n--)
;;;40     	{
;;;41     		i=10;
000002  210a              MOVS     r1,#0xa
;;;42     		while(i--)
000004  e000              B        |L1.8|
                  |L1.6|
;;;43     		{//nopָݵƬӦ޸
;;;44     			__nop();
000006  bf00              NOP      
                  |L1.8|
000008  000a              MOVS     r2,r1                 ;42
00000a  f1a10301          SUB      r3,r1,#1              ;42
00000e  b2d9              UXTB     r1,r3                 ;42
000010  d1f9              BNE      |L1.6|
                  |L1.18|
000012  0002              MOVS     r2,r0                 ;39
000014  f1a00001          SUB      r0,r0,#1              ;39
000018  d1f3              BNE      |L1.2|
;;;45     		}
;;;46     	}
;;;47     }
00001a  4770              BX       lr
;;;48     /*******************************************************************************
                          ENDP

                  Delay_nmS PROC
;;;54     *******************************************************************************/
;;;55     void Delay_nmS(unsigned long int n)
00001c  b510              PUSH     {r4,lr}
;;;56     {
00001e  4604              MOV      r4,r0
;;;57     	while(n--)
000020  e003              B        |L1.42|
                  |L1.34|
;;;58     	{
;;;59     		Delay_nuS(1000);
000022  f44f707a          MOV      r0,#0x3e8
000026  f7fffffe          BL       Delay_nuS
                  |L1.42|
00002a  0020              MOVS     r0,r4                 ;57
00002c  f1a40401          SUB      r4,r4,#1              ;57
000030  d1f7              BNE      |L1.34|
;;;60     	}
;;;61     }
000032  bd10              POP      {r4,pc}
;;;62     /*************************************************************
                          ENDP

                  VK3816_I2CStart PROC
;;;68     **************************************************************/
;;;69     void VK3816_I2CStart( void )
000034  b500              PUSH     {lr}
;;;70     {
;;;71       VK3816_SCL_H();
000036  2001              MOVS     r0,#1
000038  49cc              LDR      r1,|L1.876|
00003a  6008              STR      r0,[r1,#0]
;;;72       VK3816_SDA_H();
00003c  49cb              LDR      r1,|L1.876|
00003e  3928              SUBS     r1,r1,#0x28
000040  6008              STR      r0,[r1,#0]
;;;73       Delay_nuS(VK3816_CLK);
000042  200a              MOVS     r0,#0xa
000044  f7fffffe          BL       Delay_nuS
;;;74       VK3816_SDA_L();
000048  2000              MOVS     r0,#0
00004a  49c8              LDR      r1,|L1.876|
00004c  3928              SUBS     r1,r1,#0x28
00004e  6008              STR      r0,[r1,#0]
;;;75       Delay_nuS(VK3816_CLK);
000050  200a              MOVS     r0,#0xa
000052  f7fffffe          BL       Delay_nuS
;;;76     }
000056  bd00              POP      {pc}
;;;77     /*************************************************************
                          ENDP

                  VK3816_I2CStop PROC
;;;83     **************************************************************/
;;;84     void VK3816_I2CStop( void )
000058  b500              PUSH     {lr}
;;;85     {
;;;86     	VK3816_SCL_H();
00005a  2001              MOVS     r0,#1
00005c  49c3              LDR      r1,|L1.876|
00005e  6008              STR      r0,[r1,#0]
;;;87       VK3816_SDA_L();
000060  2000              MOVS     r0,#0
000062  49c2              LDR      r1,|L1.876|
000064  3928              SUBS     r1,r1,#0x28
000066  6008              STR      r0,[r1,#0]
;;;88       Delay_nuS(VK3816_CLK);
000068  200a              MOVS     r0,#0xa
00006a  f7fffffe          BL       Delay_nuS
;;;89       VK3816_SDA_H();
00006e  2001              MOVS     r0,#1
000070  49be              LDR      r1,|L1.876|
000072  3928              SUBS     r1,r1,#0x28
000074  6008              STR      r0,[r1,#0]
;;;90       Delay_nuS(VK3816_CLK);  
000076  200a              MOVS     r0,#0xa
000078  f7fffffe          BL       Delay_nuS
;;;91     }
00007c  bd00              POP      {pc}
;;;92     /*************************************************************
                          ENDP

                  VK3816_I2CSlaveAck PROC
;;;98     **************************************************************/
;;;99     unsigned char VK3816_I2CSlaveAck( void )
00007e  b530              PUSH     {r4,r5,lr}
;;;100    {
;;;101      unsigned int TimeOut;
;;;102      unsigned char RetValue;
;;;103    	
;;;104    	VK3816_SCL_L();
000080  2000              MOVS     r0,#0
000082  49ba              LDR      r1,|L1.876|
000084  6008              STR      r0,[r1,#0]
;;;105    	Delay_nuS(VK3816_CLK);
000086  200a              MOVS     r0,#0xa
000088  f7fffffe          BL       Delay_nuS
;;;106      VK3816_SCL_H();
00008c  2001              MOVS     r0,#1
00008e  49b7              LDR      r1,|L1.876|
000090  6008              STR      r0,[r1,#0]
;;;107      TimeOut = 10000;
000092  f2427510          MOV      r5,#0x2710
;;;108      while( TimeOut-- > 0 )
000096  e007              B        |L1.168|
                  |L1.152|
;;;109      {
;;;110        if( VK3816_GET_SDA()!=0 )//ȡack
000098  48b4              LDR      r0,|L1.876|
00009a  3828              SUBS     r0,r0,#0x28
00009c  6800              LDR      r0,[r0,#0]
00009e  b108              CBZ      r0,|L1.164|
;;;111        {
;;;112          RetValue = 1;
0000a0  2401              MOVS     r4,#1
0000a2  e001              B        |L1.168|
                  |L1.164|
;;;113        }
;;;114        else
;;;115        {
;;;116          RetValue = 0;
0000a4  2400              MOVS     r4,#0
;;;117          break;
0000a6  e003              B        |L1.176|
                  |L1.168|
0000a8  0028              MOVS     r0,r5                 ;108
0000aa  f1a50501          SUB      r5,r5,#1              ;108
0000ae  d1f3              BNE      |L1.152|
                  |L1.176|
0000b0  bf00              NOP      
;;;118        }
;;;119      } 
;;;120      VK3816_SCL_L();	
0000b2  2000              MOVS     r0,#0
0000b4  49ad              LDR      r1,|L1.876|
0000b6  6008              STR      r0,[r1,#0]
;;;121     
;;;122    	Delay_nuS(1);
0000b8  2001              MOVS     r0,#1
0000ba  f7fffffe          BL       Delay_nuS
;;;123      return RetValue;
0000be  4620              MOV      r0,r4
;;;124    }
0000c0  bd30              POP      {r4,r5,pc}
;;;125    /*************************************************************
                          ENDP

                  VK3816_I2CSendAck PROC
;;;131    **************************************************************/
;;;132    void VK3816_I2CSendAck( void )
0000c2  b500              PUSH     {lr}
;;;133    {	
;;;134      VK3816_SCL_L();
0000c4  2000              MOVS     r0,#0
0000c6  49a9              LDR      r1,|L1.876|
0000c8  6008              STR      r0,[r1,#0]
;;;135      VK3816_SDA_L();
0000ca  49a8              LDR      r1,|L1.876|
0000cc  3928              SUBS     r1,r1,#0x28
0000ce  6008              STR      r0,[r1,#0]
;;;136      Delay_nuS(VK3816_CLK*2);
0000d0  2014              MOVS     r0,#0x14
0000d2  f7fffffe          BL       Delay_nuS
;;;137      VK3816_SCL_H();
0000d6  2001              MOVS     r0,#1
0000d8  49a4              LDR      r1,|L1.876|
0000da  6008              STR      r0,[r1,#0]
;;;138      Delay_nuS(VK3816_CLK*2);
0000dc  2014              MOVS     r0,#0x14
0000de  f7fffffe          BL       Delay_nuS
;;;139      VK3816_SCL_L();
0000e2  2000              MOVS     r0,#0
0000e4  49a1              LDR      r1,|L1.876|
0000e6  6008              STR      r0,[r1,#0]
;;;140      VK3816_SDA_H();
0000e8  2001              MOVS     r0,#1
0000ea  49a0              LDR      r1,|L1.876|
0000ec  3928              SUBS     r1,r1,#0x28
0000ee  6008              STR      r0,[r1,#0]
;;;141    }
0000f0  bd00              POP      {pc}
;;;142    /*************************************************************
                          ENDP

                  VK3816_I2CSendNAck PROC
;;;148    **************************************************************/
;;;149    void VK3816_I2CSendNAck( void )
0000f2  b500              PUSH     {lr}
;;;150    {	
;;;151      VK3816_SCL_L();
0000f4  2000              MOVS     r0,#0
0000f6  499d              LDR      r1,|L1.876|
0000f8  6008              STR      r0,[r1,#0]
;;;152      VK3816_SDA_H();
0000fa  2001              MOVS     r0,#1
0000fc  499b              LDR      r1,|L1.876|
0000fe  3928              SUBS     r1,r1,#0x28
000100  6008              STR      r0,[r1,#0]
;;;153      Delay_nuS(VK3816_CLK);
000102  200a              MOVS     r0,#0xa
000104  f7fffffe          BL       Delay_nuS
;;;154      VK3816_SCL_H();
000108  2001              MOVS     r0,#1
00010a  4998              LDR      r1,|L1.876|
00010c  6008              STR      r0,[r1,#0]
;;;155      Delay_nuS(VK3816_CLK);
00010e  200a              MOVS     r0,#0xa
000110  f7fffffe          BL       Delay_nuS
;;;156    }
000114  bd00              POP      {pc}
;;;157    /*************************************************************
                          ENDP

                  VK3816_I2CWriteByte PROC
;;;163    **************************************************************/
;;;164    void VK3816_I2CWriteByte( unsigned char byte )
000116  b530              PUSH     {r4,r5,lr}
;;;165    {
000118  4604              MOV      r4,r0
;;;166    	unsigned char i=8;
00011a  2508              MOVS     r5,#8
;;;167    	while (i--)
00011c  e019              B        |L1.338|
                  |L1.286|
;;;168    	{ 
;;;169    		VK3816_SCL_L();
00011e  2000              MOVS     r0,#0
000120  4992              LDR      r1,|L1.876|
000122  6008              STR      r0,[r1,#0]
;;;170    		if(byte&0x80)
000124  f0040080          AND      r0,r4,#0x80
000128  b120              CBZ      r0,|L1.308|
;;;171    			VK3816_SDA_H();
00012a  2001              MOVS     r0,#1
00012c  498f              LDR      r1,|L1.876|
00012e  3928              SUBS     r1,r1,#0x28
000130  6008              STR      r0,[r1,#0]
000132  e003              B        |L1.316|
                  |L1.308|
;;;172    		else
;;;173    			VK3816_SDA_L();
000134  2000              MOVS     r0,#0
000136  498d              LDR      r1,|L1.876|
000138  3928              SUBS     r1,r1,#0x28
00013a  6008              STR      r0,[r1,#0]
                  |L1.316|
;;;174    		byte<<=1; 
00013c  0660              LSLS     r0,r4,#25
00013e  0e04              LSRS     r4,r0,#24
;;;175    		Delay_nuS(VK3816_CLK);
000140  200a              MOVS     r0,#0xa
000142  f7fffffe          BL       Delay_nuS
;;;176    		VK3816_SCL_H();     
000146  2001              MOVS     r0,#1
000148  4988              LDR      r1,|L1.876|
00014a  6008              STR      r0,[r1,#0]
;;;177    		Delay_nuS(VK3816_CLK);
00014c  200a              MOVS     r0,#0xa
00014e  f7fffffe          BL       Delay_nuS
                  |L1.338|
000152  0028              MOVS     r0,r5                 ;167
000154  f1a50101          SUB      r1,r5,#1              ;167
000158  b2cd              UXTB     r5,r1                 ;167
00015a  d1e0              BNE      |L1.286|
;;;178    	}
;;;179    }
00015c  bd30              POP      {r4,r5,pc}
;;;180    /*************************************************************
                          ENDP

                  VK3816_I2CReadByte PROC
;;;186    **************************************************************/
;;;187    unsigned char VK3816_I2CReadByte( void )
00015e  b570              PUSH     {r4-r6,lr}
;;;188    {
;;;189    	unsigned char i,RetValue,bit;
;;;190    	
;;;191    	RetValue=0;	
000160  2500              MOVS     r5,#0
;;;192      for( i=0; i<8; i++ )
000162  2400              MOVS     r4,#0
000164  e018              B        |L1.408|
                  |L1.358|
;;;193      {
;;;194    		VK3816_SCL_H(); 
000166  2001              MOVS     r0,#1
000168  4980              LDR      r1,|L1.876|
00016a  6008              STR      r0,[r1,#0]
;;;195        Delay_nuS(VK3816_CLK);
00016c  200a              MOVS     r0,#0xa
00016e  f7fffffe          BL       Delay_nuS
;;;196        if( 1 == VK3816_GET_SDA() )
000172  487e              LDR      r0,|L1.876|
000174  3828              SUBS     r0,r0,#0x28
000176  6800              LDR      r0,[r0,#0]
000178  2801              CMP      r0,#1
00017a  d101              BNE      |L1.384|
;;;197          bit = 0X01;
00017c  2601              MOVS     r6,#1
00017e  e000              B        |L1.386|
                  |L1.384|
;;;198        else
;;;199          bit = 0x00;
000180  2600              MOVS     r6,#0
                  |L1.386|
;;;200          
;;;201        RetValue = (RetValue<<1)|bit;
000182  ea460045          ORR      r0,r6,r5,LSL #1
000186  b2c5              UXTB     r5,r0
;;;202        VK3816_SCL_L();
000188  2000              MOVS     r0,#0
00018a  4978              LDR      r1,|L1.876|
00018c  6008              STR      r0,[r1,#0]
;;;203        Delay_nuS(VK3816_CLK);
00018e  200a              MOVS     r0,#0xa
000190  f7fffffe          BL       Delay_nuS
000194  1c60              ADDS     r0,r4,#1              ;192
000196  b2c4              UXTB     r4,r0                 ;192
                  |L1.408|
000198  2c08              CMP      r4,#8                 ;192
00019a  dbe4              BLT      |L1.358|
;;;204    	}
;;;205      
;;;206      return RetValue;
00019c  4628              MOV      r0,r5
;;;207    }
00019e  bd70              POP      {r4-r6,pc}
;;;208    
                          ENDP

                  VK3816SetCmd PROC
;;;216    **************************************************************/
;;;217    unsigned char VK3816SetCmd(unsigned char *pdata,unsigned char cnt)
0001a0  b570              PUSH     {r4-r6,lr}
;;;218    {
0001a2  4604              MOV      r4,r0
0001a4  460e              MOV      r6,r1
;;;219      unsigned char i;
;;;220    	VK3816_I2CStart();
0001a6  f7fffffe          BL       VK3816_I2CStart
;;;221    	
;;;222    	VK3816_I2CWriteByte(VK3816_ADDRWR); 
0001aa  20a6              MOVS     r0,#0xa6
0001ac  f7fffffe          BL       VK3816_I2CWriteByte
;;;223    	if( 1 == VK3816_I2CSlaveAck() )
0001b0  f7fffffe          BL       VK3816_I2CSlaveAck
0001b4  2801              CMP      r0,#1
0001b6  d103              BNE      |L1.448|
;;;224    	{
;;;225    		VK3816_I2CStop(); 
0001b8  f7fffffe          BL       VK3816_I2CStop
;;;226    		return 0;   
0001bc  2000              MOVS     r0,#0
                  |L1.446|
;;;227    	}    
;;;228    	for(i=0;i<cnt;i++)
;;;229    	{ 
;;;230    		VK3816_I2CWriteByte(*pdata++);
;;;231    		if( 1 == VK3816_I2CSlaveAck() )
;;;232    	  {
;;;233    			VK3816_I2CStop(); 
;;;234    			return 0;   
;;;235    	  }  
;;;236    	}
;;;237     VK3816_I2CStop();
;;;238    	
;;;239     return 0;    //زɰܱ־
;;;240    }
0001be  bd70              POP      {r4-r6,pc}
                  |L1.448|
0001c0  2500              MOVS     r5,#0                 ;228
0001c2  e00d              B        |L1.480|
                  |L1.452|
0001c4  f8140b01          LDRB     r0,[r4],#1            ;230
0001c8  f7fffffe          BL       VK3816_I2CWriteByte
0001cc  f7fffffe          BL       VK3816_I2CSlaveAck
0001d0  2801              CMP      r0,#1                 ;231
0001d2  d103              BNE      |L1.476|
0001d4  f7fffffe          BL       VK3816_I2CStop
0001d8  2000              MOVS     r0,#0                 ;234
0001da  e7f0              B        |L1.446|
                  |L1.476|
0001dc  1c68              ADDS     r0,r5,#1              ;228
0001de  b2c5              UXTB     r5,r0                 ;228
                  |L1.480|
0001e0  42b5              CMP      r5,r6                 ;228
0001e2  dbef              BLT      |L1.452|
0001e4  f7fffffe          BL       VK3816_I2CStop
0001e8  2000              MOVS     r0,#0                 ;239
0001ea  e7e8              B        |L1.446|
;;;241    /*******************************************************************************
                          ENDP

                  VK3816ReaData PROC
;;;248    *******************************************************************************/
;;;249    unsigned char VK3816ReaData(unsigned char *pdata,unsigned char cnt)
0001ec  b570              PUSH     {r4-r6,lr}
;;;250    {
0001ee  4604              MOV      r4,r0
0001f0  460e              MOV      r6,r1
;;;251    	unsigned char i;
;;;252    	
;;;253    	VK3816_I2CStart(); 
0001f2  f7fffffe          BL       VK3816_I2CStart
;;;254    	VK3816_I2CWriteByte(VK3816_ADDRRD); 
0001f6  20a7              MOVS     r0,#0xa7
0001f8  f7fffffe          BL       VK3816_I2CWriteByte
;;;255    	if( 1 == VK3816_I2CSlaveAck() )
0001fc  f7fffffe          BL       VK3816_I2CSlaveAck
000200  2801              CMP      r0,#1
000202  d103              BNE      |L1.524|
;;;256    	{
;;;257    		VK3816_I2CStop(); 
000204  f7fffffe          BL       VK3816_I2CStop
;;;258    		return 0;   
000208  2000              MOVS     r0,#0
                  |L1.522|
;;;259    	}   
;;;260    
;;;261    	for(i=0;i<(cnt-1);i++)
;;;262    	{ 
;;;263    		*pdata++=VK3816_I2CReadByte();
;;;264    		VK3816_I2CSendAck();
;;;265    	}
;;;266    	*pdata++=VK3816_I2CReadByte();
;;;267    	VK3816_I2CSendNAck();
;;;268    
;;;269      VK3816_I2CStop();
;;;270      return 0;    //زɰܱ־
;;;271    }
00020a  bd70              POP      {r4-r6,pc}
                  |L1.524|
00020c  2500              MOVS     r5,#0                 ;261
00020e  e007              B        |L1.544|
                  |L1.528|
000210  f7fffffe          BL       VK3816_I2CReadByte
000214  f8040b01          STRB     r0,[r4],#1            ;263
000218  f7fffffe          BL       VK3816_I2CSendAck
00021c  1c68              ADDS     r0,r5,#1              ;261
00021e  b2c5              UXTB     r5,r0                 ;261
                  |L1.544|
000220  1e70              SUBS     r0,r6,#1              ;261
000222  42a8              CMP      r0,r5                 ;261
000224  dcf4              BGT      |L1.528|
000226  f7fffffe          BL       VK3816_I2CReadByte
00022a  f8040b01          STRB     r0,[r4],#1            ;266
00022e  f7fffffe          BL       VK3816_I2CSendNAck
000232  f7fffffe          BL       VK3816_I2CStop
000236  2000              MOVS     r0,#0                 ;270
000238  e7e7              B        |L1.522|
;;;272    
                          ENDP

                  VK3816_SetSlideConfig PROC
;;;279    *******************************************************************************/
;;;280    unsigned char VK3816_SetSlideConfig(unsigned char slide1_keys, unsigned char slide2_keys, unsigned char slide3_keys)
00023a  b570              PUSH     {r4-r6,lr}
;;;281    {
00023c  4604              MOV      r4,r0
00023e  460e              MOV      r6,r1
000240  4615              MOV      r5,r2
;;;282      VK3816_cmdsetbuf[0] = I2CM_Slide|             //ģʽ    
000242  20b9              MOVS     r0,#0xb9
000244  494a              LDR      r1,|L1.880|
000246  7008              STRB     r0,[r1,#0]
;;;283    	                      Output_Single|          //  
;;;284    	                      AutoAdjust_On|          //Զ׼
;;;285    	                      PowerSave_On|           //ʡģʽ
;;;286    	                      DT_Off|                 //ֵ̬ر def
;;;287    	                      AutoResetTime_15S;      // 15SԶ  0xB9
;;;288    	
;;;289      VK3816_cmdsetbuf[1] = KeyNum_4|KEY_ACK_TIME_4;  // Data byte 2 16-3-3 ʱĬ  0x53
000248  2023              MOVS     r0,#0x23
00024a  7048              STRB     r0,[r1,#1]
;;;290      VK3816_cmdsetbuf[2] = (slide1_keys << 4) | slide2_keys;  // Data Byte 3 
00024c  ea461004          ORR      r0,r6,r4,LSL #4
000250  7088              STRB     r0,[r1,#2]
;;;291      VK3816_cmdsetbuf[3] =  slide3_keys;  // Data Byte 4, Key Off NumĬΪ0
000252  4608              MOV      r0,r1
000254  70c5              STRB     r5,[r0,#3]
;;;292      
;;;293      return VK3816SetCmd(VK3816_cmdsetbuf,4);
000256  2104              MOVS     r1,#4
000258  f7fffffe          BL       VK3816SetCmd
;;;294    }
00025c  bd70              POP      {r4-r6,pc}
;;;295    
                          ENDP

                  VK3816_SetThreshold PROC
;;;303    *******************************************************************************/
;;;304    unsigned char VK3816_SetThreshold(unsigned char tp_num, unsigned int threshold)
00025e  e92d41f0          PUSH     {r4-r8,lr}
;;;305    {
000262  4605              MOV      r5,r0
000264  460c              MOV      r4,r1
;;;306      unsigned char threshold_h, threshold_m, threshold_l;
;;;307      
;;;308      // ȡ12λֵĸ
;;;309      threshold_h = (threshold >> 8) & 0x0F;  // 4λ
000266  f3c42603          UBFX     r6,r4,#8,#4
;;;310      threshold_m = (threshold >> 4) & 0x0F;  // 4λ
00026a  f3c41703          UBFX     r7,r4,#4,#4
;;;311      threshold_l = threshold & 0x0F;         // 4λ
00026e  f004080f          AND      r8,r4,#0xf
;;;312      
;;;313      VK3816_cmdsetbuf[0] = 0xC0 | (tp_num & 0x0F);  // IICM=1, CT=1, Item=0, TP Num
000272  f005000f          AND      r0,r5,#0xf
000276  f04000c0          ORR      r0,r0,#0xc0
00027a  493d              LDR      r1,|L1.880|
00027c  7008              STRB     r0,[r1,#0]
;;;314      VK3816_cmdsetbuf[1] = (threshold_m << 4) | threshold_l;  // 4λ: M, 4λ: L
00027e  ea481007          ORR      r0,r8,r7,LSL #4
000282  7048              STRB     r0,[r1,#1]
;;;315      VK3816_cmdsetbuf[2] = threshold_h & 0x0F;  // 4λ: H, 4λδʹ
000284  4608              MOV      r0,r1
000286  7086              STRB     r6,[r0,#2]
;;;316      
;;;317      return VK3816SetCmd(VK3816_cmdsetbuf, 3);
000288  2103              MOVS     r1,#3
00028a  f7fffffe          BL       VK3816SetCmd
;;;318    }
00028e  e8bd81f0          POP      {r4-r8,pc}
;;;319    
                          ENDP

                  VK3816_SetAllThresholds PROC
;;;326    *******************************************************************************/
;;;327    unsigned char VK3816_SetAllThresholds(unsigned int threshold)
000292  b530              PUSH     {r4,r5,lr}
;;;328    {
000294  4605              MOV      r5,r0
;;;329      unsigned char i;
;;;330      
;;;331      for(i = 0; i < 16; i++)
000296  2400              MOVS     r4,#0
000298  e008              B        |L1.684|
                  |L1.666|
;;;332      {
;;;333        VK3816_SetThreshold(i, threshold);
00029a  4629              MOV      r1,r5
00029c  4620              MOV      r0,r4
00029e  f7fffffe          BL       VK3816_SetThreshold
;;;334        Delay_nmS(5);  // ÿֵü5ms
0002a2  2005              MOVS     r0,#5
0002a4  f7fffffe          BL       Delay_nmS
0002a8  1c60              ADDS     r0,r4,#1              ;331
0002aa  b2c4              UXTB     r4,r0                 ;331
                  |L1.684|
0002ac  2c10              CMP      r4,#0x10              ;331
0002ae  dbf4              BLT      |L1.666|
;;;335      }
;;;336      
;;;337      return 0;
0002b0  2000              MOVS     r0,#0
;;;338    }
0002b2  bd30              POP      {r4,r5,pc}
;;;339    
                          ENDP

                  VK3816_SetSleepThreshold PROC
;;;346    *******************************************************************************/
;;;347    unsigned char VK3816_SetSleepThreshold(unsigned int threshold)
0002b4  b5f0              PUSH     {r4-r7,lr}
;;;348    {
0002b6  4604              MOV      r4,r0
;;;349      unsigned char threshold_h, threshold_m, threshold_l;
;;;350      
;;;351      // ȡ12λֵĸ
;;;352      threshold_h = (threshold >> 8) & 0x0F;  // 4λ
0002b8  f3c42503          UBFX     r5,r4,#8,#4
;;;353      threshold_m = (threshold >> 4) & 0x0F;  // 4λ
0002bc  f3c41603          UBFX     r6,r4,#4,#4
;;;354      threshold_l = threshold & 0x0F;         // 4λ
0002c0  f004070f          AND      r7,r4,#0xf
;;;355      
;;;356      VK3816_cmdsetbuf[0] = 0xD0;  // IICM=1, CT=1, Item=1
0002c4  20d0              MOVS     r0,#0xd0
0002c6  492a              LDR      r1,|L1.880|
0002c8  7008              STRB     r0,[r1,#0]
;;;357      VK3816_cmdsetbuf[1] = (threshold_m << 4) | threshold_l;  
0002ca  ea471006          ORR      r0,r7,r6,LSL #4
0002ce  7048              STRB     r0,[r1,#1]
;;;358      VK3816_cmdsetbuf[2] = threshold_h & 0x0F;  
0002d0  4608              MOV      r0,r1
0002d2  7085              STRB     r5,[r0,#2]
;;;359      
;;;360      return VK3816SetCmd(VK3816_cmdsetbuf, 3);
0002d4  2103              MOVS     r1,#3
0002d6  f7fffffe          BL       VK3816SetCmd
;;;361    }
0002da  bdf0              POP      {r4-r7,pc}
;;;362    
                          ENDP

                  VK3816_Lowlevel_Init PROC
;;;369    *******************************************************************************/
;;;370    void VK3816_Lowlevel_Init(void)
0002dc  b510              PUSH     {r4,lr}
;;;371    {
;;;372    	//ͨߵƽͬӵƽת·
;;;373    	//˺ݿͻƬӦ޸
;;;374    	GPIO_SetMode(VK3816_SCL_PORT, VK3816_SCL_PIN, GPIO_MODE_OUTPUT);
0002de  2201              MOVS     r2,#1
0002e0  03d1              LSLS     r1,r2,#15
0002e2  4824              LDR      r0,|L1.884|
0002e4  f7fffffe          BL       GPIO_SetMode
;;;375    	GPIO_SetMode(VK3816_SDA_PORT, VK3816_SDA_PIN, GPIO_MODE_QUASI);
0002e8  2203              MOVS     r2,#3
0002ea  2120              MOVS     r1,#0x20
0002ec  4821              LDR      r0,|L1.884|
0002ee  f7fffffe          BL       GPIO_SetMode
;;;376    	GPIO_SetMode(VK3816_INT_PORT, VK3816_INT_PIN, GPIO_MODE_INPUT);
0002f2  2200              MOVS     r2,#0
0002f4  f44f5180          MOV      r1,#0x1000
0002f8  481e              LDR      r0,|L1.884|
0002fa  f7fffffe          BL       GPIO_SetMode
;;;377    		      
;;;378    	VK3816_SCL_H();	
0002fe  2001              MOVS     r0,#1
000300  491a              LDR      r1,|L1.876|
000302  6008              STR      r0,[r1,#0]
;;;379    	VK3816_SDA_H();
000304  4919              LDR      r1,|L1.876|
000306  3928              SUBS     r1,r1,#0x28
000308  6008              STR      r0,[r1,#0]
;;;380    	PB12=1;
00030a  4918              LDR      r1,|L1.876|
00030c  390c              SUBS     r1,r1,#0xc
00030e  6008              STR      r0,[r1,#0]
;;;381    }
000310  bd10              POP      {r4,pc}
;;;382    
                          ENDP

                  VK3816_DefaultConfig PROC
;;;389    *******************************************************************************/
;;;390    unsigned char VK3816_DefaultConfig(void)
000312  b500              PUSH     {lr}
;;;391    {
;;;392      
;;;393      // ϵͳã+Ĭֵ
;;;394      VK3816_SetSlideConfig(SlideNumSet_3,SlideNumSet_3,SlideNumSet_3);
000314  2202              MOVS     r2,#2
000316  4611              MOV      r1,r2
000318  4610              MOV      r0,r2
00031a  f7fffffe          BL       VK3816_SetSlideConfig
;;;395      Delay_nmS(100);
00031e  2064              MOVS     r0,#0x64
000320  f7fffffe          BL       Delay_nmS
;;;396      
;;;397      // аֵΪĬֵ (0x010)
;;;398      VK3816_SetAllThresholds(0x010);
000324  2010              MOVS     r0,#0x10
000326  f7fffffe          BL       VK3816_SetAllThresholds
;;;399      Delay_nmS(100);
00032a  2064              MOVS     r0,#0x64
00032c  f7fffffe          BL       Delay_nmS
;;;400      
;;;401      // ˯ֵ (0x002)
;;;402      VK3816_SetSleepThreshold(0x002);
000330  2002              MOVS     r0,#2
000332  f7fffffe          BL       VK3816_SetSleepThreshold
;;;403      Delay_nmS(100);
000336  2064              MOVS     r0,#0x64
000338  f7fffffe          BL       Delay_nmS
;;;404      
;;;405      return 0;
00033c  2000              MOVS     r0,#0
;;;406    }
00033e  bd00              POP      {pc}
;;;407    
                          ENDP

                  VK3816_Init PROC
;;;414    *******************************************************************************/
;;;415    void VK3816_Init(void)
000340  b510              PUSH     {r4,lr}
;;;416    {	
;;;417    	VK3816_Lowlevel_Init();
000342  f7fffffe          BL       VK3816_Lowlevel_Init
;;;418    	VK3816_DefaultConfig();
000346  f7fffffe          BL       VK3816_DefaultConfig
;;;419    }
00034a  bd10              POP      {r4,pc}
;;;420    /*******************************************************************************
                          ENDP

                  VK3816_Main PROC
;;;426    *******************************************************************************/
;;;427    void VK3816_Main(void)
00034c  f7fffffe          BL       VK3816_Init
;;;428    {		
;;;429    	VK3816_Init();
;;;430    
;;;431    	while(1)
000350  e00b              B        |L1.874|
                  |L1.850|
;;;432    	{	
;;;433        if( 0 == VK3816_GET_INT() )
000352  4806              LDR      r0,|L1.876|
000354  380c              SUBS     r0,r0,#0xc
000356  6800              LDR      r0,[r0,#0]
000358  b938              CBNZ     r0,|L1.874|
;;;434    		{
;;;435    			VK3816ReaData(VK3816_readbuf,6);
00035a  2106              MOVS     r1,#6
00035c  4806              LDR      r0,|L1.888|
00035e  f7fffffe          BL       VK3816ReaData
;;;436    			Delay_nuS(1000);
000362  f44f707a          MOV      r0,#0x3e8
000366  f7fffffe          BL       Delay_nuS
                  |L1.874|
00036a  e7f2              B        |L1.850|
;;;437    		}
;;;438    	}
;;;439    }
;;;440    /************************END OF FILE****/ 
                          ENDP

                  |L1.876|
                          DCD      0x4000487c
                  |L1.880|
                          DCD      VK3816_cmdsetbuf
                  |L1.884|
                          DCD      0x40004040
                  |L1.888|
                          DCD      VK3816_readbuf

                          AREA ||.data||, DATA, ALIGN=0

                  VK3816_cmdsetbuf
                          DCDU     0x00000000
                  VK3816_intbuf
                          DCDU     0x00000000
000008  0000              DCB      0x00,0x00
                  VK3816_readbuf
00000a  0000              DCB      0x00,0x00
                          DCDU     0x00000000

;*** Start embedded assembler ***

#line 1 "..\\touch_driver\\VK3816.c"
	AREA ||.rev16_text||, CODE
	THUMB
	EXPORT |__asm___8_VK3816_c_f70de489____REV16|
#line 114 "..\\..\\..\\Library\\CMSIS\\Include\\core_cmInstr.h"
|__asm___8_VK3816_c_f70de489____REV16| PROC
#line 115

 rev16 r0, r0
 bx lr
	ENDP
	AREA ||.revsh_text||, CODE
	THUMB
	EXPORT |__asm___8_VK3816_c_f70de489____REVSH|
#line 128
|__asm___8_VK3816_c_f70de489____REVSH| PROC
#line 129

 revsh r0, r0
 bx lr
	ENDP

;*** End   embedded assembler ***
