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

📄 i2c.lst

📁 Lpc2103的小程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
   \   00000016   0078               LDRB        R0,[R0, #+0]
   \   00000018   0006               LSL         R0,R0,#+24         ;; ZeroExt     R0,R0,#+24,#+24
   \   0000001A   000E               LSR         R0,R0,#+24
   \   0000001C   4028               CMP         R0,#+64
   \   0000001E   F9D1               BNE         ??WriteAddr_1
   \   00000020   05E0               B           ??WriteAddr_2
     80            else   do{}while(I2CSTAT!=0x18);        //等待器件地址和写信号完成
   \                     ??WriteAddr_0:
   \   00000022   ....               LDR         R0,??DataTable17   ;; 0xe001c004
   \   00000024   0078               LDRB        R0,[R0, #+0]
   \   00000026   0006               LSL         R0,R0,#+24         ;; ZeroExt     R0,R0,#+24,#+24
   \   00000028   000E               LSR         R0,R0,#+24
   \   0000002A   1828               CMP         R0,#+24
   \   0000002C   F9D1               BNE         ??WriteAddr_0
     81          }
   \                     ??WriteAddr_2:
   \   0000002E   10BC               POP         {R4}
   \   00000030   01BC               POP         {R0}
   \   00000032   0047               BX          R0                 ;; return
     82          
     83          
     84          /***************写数据*****************************/

   \                                 In segment CODE, align 4, keep-with-next
     85          void WriteData(U8 data)
     86          {
   \                     WriteData:
   \   00000000   10B5               PUSH        {R4,LR}
   \   00000002   041C               MOV         R4,R0
     87            WriteByte(data);
   \   00000004   201C               MOV         R0,R4
   \   00000006   ........           BL          WriteByte
     88            do{}   while(I2CSTAT!=0x28);            //等待写数据完成
   \                     ??WriteData_0:
   \   0000000A   ....               LDR         R0,??DataTable17   ;; 0xe001c004
   \   0000000C   0078               LDRB        R0,[R0, #+0]
   \   0000000E   0006               LSL         R0,R0,#+24         ;; ZeroExt     R0,R0,#+24,#+24
   \   00000010   000E               LSR         R0,R0,#+24
   \   00000012   2828               CMP         R0,#+40
   \   00000014   F9D1               BNE         ??WriteData_0
     89          }
   \   00000016   10BC               POP         {R4}
   \   00000018   01BC               POP         {R0}
   \   0000001A   0047               BX          R0                 ;; return
     90          
     91          /***************读8位数据*****************************/

   \                                 In segment CODE, align 4, keep-with-next
     92          U8 ReadByte(U8 last)                       //last:最后一位数据
     93          {
   \                     ReadByte:
   \   00000000   00B5               PUSH        {LR}
   \   00000002   011C               MOV         R1,R0
     94            if(last)
   \   00000004   0029               CMP         R1,#+0
   \   00000006   0CD0               BEQ         ??ReadByte_0
     95            {
     96              I2CONCLR=AA;
   \   00000008   ....               LDR         R0,??DataTable16   ;; 0xe001c018
   \   0000000A   0422               MOV         R2,#+4
   \   0000000C   0270               STRB        R2,[R0, #+0]
     97              I2CONCLR=SI;                   //启动接收最后数据
   \   0000000E   ....               LDR         R0,??DataTable16   ;; 0xe001c018
   \   00000010   0822               MOV         R2,#+8
   \   00000012   0270               STRB        R2,[R0, #+0]
     98              do{}while(I2CSTAT!=0X58);
   \                     ??ReadByte_1:
   \   00000014   ....               LDR         R0,??DataTable17   ;; 0xe001c004
   \   00000016   0078               LDRB        R0,[R0, #+0]
   \   00000018   0006               LSL         R0,R0,#+24         ;; ZeroExt     R0,R0,#+24,#+24
   \   0000001A   000E               LSR         R0,R0,#+24
   \   0000001C   5828               CMP         R0,#+88
   \   0000001E   F9D1               BNE         ??ReadByte_1
   \   00000020   0BE0               B           ??ReadByte_2
     99            }
    100            else
    101            {
    102              I2CONSET=AA;
   \                     ??ReadByte_0:
   \   00000022   ....               LDR         R0,??DataTable15   ;; 0xe001c000
   \   00000024   0422               MOV         R2,#+4
   \   00000026   0270               STRB        R2,[R0, #+0]
    103              I2CONCLR=SI;                   //启动接收数据
   \   00000028   ....               LDR         R0,??DataTable16   ;; 0xe001c018
   \   0000002A   0822               MOV         R2,#+8
   \   0000002C   0270               STRB        R2,[R0, #+0]
    104              do{}while(I2CSTAT!=0X50);
   \                     ??ReadByte_3:
   \   0000002E   ....               LDR         R0,??DataTable17   ;; 0xe001c004
   \   00000030   0078               LDRB        R0,[R0, #+0]
   \   00000032   0006               LSL         R0,R0,#+24         ;; ZeroExt     R0,R0,#+24,#+24
   \   00000034   000E               LSR         R0,R0,#+24
   \   00000036   5028               CMP         R0,#+80
   \   00000038   F9D1               BNE         ??ReadByte_3
    105            }
    106            return I2DAT;
   \                     ??ReadByte_2:
   \   0000003A   ....               LDR         R0,??DataTable18   ;; 0xe001c008
   \   0000003C   0078               LDRB        R0,[R0, #+0]
   \   0000003E   0006               LSL         R0,R0,#+24         ;; ZeroExt     R0,R0,#+24,#+24
   \   00000040   000E               LSR         R0,R0,#+24
   \   00000042   02BC               POP         {R1}
   \   00000044   0847               BX          R1                 ;; return
    107          }
    108          
    109          /***************写4个字节到24c02*****************************/

   \                                 In segment CODE, align 4, keep-with-next
    110          void WriteC02()
    111          {
   \                     WriteC02:
   \   00000000   10B5               PUSH        {R4,LR}
    112            U8 i;
    113            I2C_Start();
   \   00000002   ........           BL          I2C_Start
    114            WriteAddr(WRMode);                   //写地址和写模式
   \   00000006   0020               MOV         R0,#+0
   \   00000008   ........           BL          WriteAddr
    115            WriteData(C02SlaveAddr);             //24c02的存储地址
   \   0000000C   0020               MOV         R0,#+0
   \   0000000E   ........           BL          WriteData
    116            for(i=0;i<4;i++)  I2C_buf1[i]=i+5;  //I2C_buf初始化
   \   00000012   0020               MOV         R0,#+0
   \   00000014   041C               MOV         R4,R0
   \                     ??WriteC02_0:
   \   00000016   2406               LSL         R4,R4,#+24         ;; ZeroExt     R4,R4,#+24,#+24
   \   00000018   240E               LSR         R4,R4,#+24
   \   0000001A   042C               CMP         R4,#+4
   \   0000001C   07D2               BCS         ??WriteC02_1
   \   0000001E   2406               LSL         R4,R4,#+24         ;; ZeroExt     R4,R4,#+24,#+24
   \   00000020   240E               LSR         R4,R4,#+24
   \   00000022   ....               LDR         R0,??DataTable40   ;; I2C_buf1
   \   00000024   211C               MOV         R1,R4
   \   00000026   491D               ADD         R1,#+5
   \   00000028   0155               STRB        R1,[R0, R4]
   \   0000002A   641C               ADD         R4,#+1
   \   0000002C   F3E7               B           ??WriteC02_0
    117            for(i=0;i<4;i++)
   \                     ??WriteC02_1:
   \   0000002E   0020               MOV         R0,#+0
   \   00000030   041C               MOV         R4,R0
   \                     ??WriteC02_2:
   \   00000032   2406               LSL         R4,R4,#+24         ;; ZeroExt     R4,R4,#+24,#+24
   \   00000034   240E               LSR         R4,R4,#+24
   \   00000036   042C               CMP         R4,#+4
   \   00000038   07D2               BCS         ??WriteC02_3
    118            {
    119              WriteData(I2C_buf1[i]);
   \   0000003A   2406               LSL         R4,R4,#+24         ;; ZeroExt     R4,R4,#+24,#+24
   \   0000003C   240E               LSR         R4,R4,#+24
   \   0000003E   ....               LDR         R0,??DataTable40   ;; I2C_buf1
   \   00000040   005D               LDRB        R0,[R0, R4]
   \   00000042   ........           BL          WriteData
    120            }
   \   00000046   641C               ADD         R4,#+1
   \   00000048   F3E7               B           ??WriteC02_2
    121            I2C_Stop();
   \                     ??WriteC02_3:
   \   0000004A   ........           BL          I2C_Stop
    122            DelayMs(10);                       // 延时等待eeprom写操作
   \   0000004E   0A20               MOV         R0,#+10
   \   00000050   ........           BL          DelayMs
    123            //把写到I2C上的数据在串口上打印出来
    124            DelayMs(100);
   \   00000054   6420               MOV         R0,#+100
   \   00000056   ........           BL          DelayMs
    125            UART0_PutString(" \nWrite to I2C BUS:\n");
   \   0000005A   0F48               LDR         R0,??WriteC02_4    ;; `?<Constant " \\nWrite to I2C BUS:\\n">`
   \   0000005C   ........           _BLF        UART0_PutString,??UART0_PutString??rT
    126            DelayMs(5000);
   \   00000060   ....               LDR         R0,??DataTable30   ;; 0x1388
   \   00000062   ........           BL          DelayMs
    127            for(i=0;i<4;i++)
   \   00000066   0020               MOV         R0,#+0
   \   00000068   041C               MOV         R4,R0
   \                     ??WriteC02_5:
   \   0000006A   2406               LSL         R4,R4,#+24         ;; ZeroExt     R4,R4,#+24,#+24
   \   0000006C   240E               LSR         R4,R4,#+24
   \   0000006E   042C               CMP         R4,#+4
   \   00000070   0ED2               BCS         ??WriteC02_6
    128            {
    129              UART0_PutChar(I2C_buf1[i]+48);
   \   00000072   2406               LSL         R4,R4,#+24         ;; ZeroExt     R4,R4,#+24,#+24
   \   00000074   240E               LSR         R4,R4,#+24
   \   00000076   ....               LDR         R0,??DataTable40   ;; I2C_buf1
   \   00000078   005D               LDRB        R0,[R0, R4]
   \   0000007A   3030               ADD         R0,#+48
   \   0000007C   ........           _BLF        UART0_PutChar,??UART0_PutChar??rT
    130              UART0_PutString("\n");
   \   00000080   ....               ADR         R0,??DataTable29   ;; "\n"
   \   00000082   ........           _BLF        UART0_PutString,??UART0_PutString??rT
    131              DelayMs(5000);
   \   00000086   ....               LDR         R0,??DataTable30   ;; 0x1388
   \   00000088   ........           BL          DelayMs
    132            }
   \   0000008C   641C               ADD         R4,#+1
   \   0000008E   ECE7               B           ??WriteC02_5
    133          }
   \                     ??WriteC02_6:
   \   00000090   10BC               POP         {R4}
   \   00000092   01BC               POP         {R0}
   \   00000094   0047               BX          R0                 ;; return
   \   00000096   C046               NOP         
   \                     ??WriteC02_4:
   \   00000098   ........           DC32        `?<Constant " \\nWrite to I2C BUS:\\n">`
    134          /******************从24c02地址读4个字节数据************/

   \                                 In segment CODE, align 4, keep-with-next
    135          void ReadC02()
    136          {
   \                     ReadC02:
   \   00000000   10B5               PUSH        {R4,LR}
    137            U8 i;
    138            I2C_Start();
   \   00000002   ........           BL          I2C_Start
    139            WriteAddr(WRMode);
   \   00000006   0020               MOV         R0,#+0
   \   00000008   ........           BL          WriteAddr

⌨️ 快捷键说明

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