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

📄 bsp_i2c.lst

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
   \   000000C4   004080E5           STR      R4,[R0, #+0]
    241              I2C_Count           = count;
   \   000000C8   ........           LDR      R0,??DataTable63  ;; I2C_Count
   \   000000CC   0050C0E5           STRB     R5,[R0, #+0]
    242          
    243              I20CONSET           = I2CON_STA
    244                                  | I2CON_AA;
   \   000000D0   E004A0E3           MOV      R0,#-536870912
   \   000000D4   700B80E3           ORR      R0,R0,#0x1C000
   \   000000D8   2410A0E3           MOV      R1,#+36
   \   000000DC   001080E5           STR      R1,[R0, #+0]
    245          
    246          
    247              VICIntEnable        =  (1 << VIC_I2C0);                     /* Enable the interrupt source                              */
   \   000000E0   EF00E0E3           MVN      R0,#+239
   \   000000E4   F00EC0E3           BIC      R0,R0,#0xF00
   \   000000E8   801FA0E3           MOV      R1,#+512
   \   000000EC   001080E5           STR      R1,[R0, #+0]
    248              OSSemPend(I2C_SemWait, 0, &err);                            /* Wait until complete                                      */
   \   000000F0   0D20B0E1           MOVS     R2,SP
   \   000000F4   0010A0E3           MOV      R1,#+0
   \   000000F8   ........           LDR      R0,??DataTable65  ;; I2C_SemWait
   \   000000FC   000090E5           LDR      R0,[R0, #+0]
   \   00000100   ........           _BLF     OSSemPend,??OSSemPend??rA
    249          
    250          
    251              OSSemPost(I2C_SemBusy);                                     /* Free I2C                                                 */
   \   00000104   ........           LDR      R0,??DataTable28  ;; I2C_SemBusy
   \   00000108   000090E5           LDR      R0,[R0, #+0]
   \   0000010C   ........           _BLF     OSSemPost,??OSSemPost??rA
    252          }
   \   00000110   08D08DE2           ADD      SP,SP,#+8        ;; stack cleaning
   \   00000114   3080BDE8           POP      {R4,R5,PC}       ;; return
    253          
    254          /*
    255          *********************************************************************************************************
    256          *                                        I2C_Write()
    257          *
    258          * Description : This function writes to the I2C bus.
    259          *
    260          * Arguements  : p_buf   is a pointer to the buffer storing the data to be written
    261          *               count   is the number of bytes to write
    262          *
    263          * Returns     : None
    264          *********************************************************************************************************
    265          */
    266          

   \                                 In segment CODE, align 4, keep-with-next
    267          void  I2C_Write (CPU_INT08U *p_buf, CPU_INT08U count)
    268          {
   \                     I2C_Write:
   \   00000000   30402DE9           PUSH     {R4,R5,LR}
   \   00000004   04D04DE2           SUB      SP,SP,#+4
   \   00000008   0040B0E1           MOVS     R4,R0
   \   0000000C   0150B0E1           MOVS     R5,R1
    269              CPU_INT08U      err;
    270          
    271          
    272              OSSemPend(I2C_SemBusy, 0, &err);                            /* Wait until I2C is free                                   */
   \   00000010   0D20B0E1           MOVS     R2,SP
   \   00000014   0010A0E3           MOV      R1,#+0
   \   00000018   ........           LDR      R0,??DataTable28  ;; I2C_SemBusy
   \   0000001C   000090E5           LDR      R0,[R0, #+0]
   \   00000020   ........           _BLF     OSSemPend,??OSSemPend??rA
    273          
    274              I20CONCLR           = I2CON_I2EN
    275                                  | I2CON_STA
    276                                  | I2CON_SI
    277                                  | I2CON_AA;
   \   00000024   ........           LDR      R0,??DataTable66  ;; 0xffffffffe001c018
   \   00000028   6C10A0E3           MOV      R1,#+108
   \   0000002C   001080E5           STR      R1,[R0, #+0]
    278          
    279              I20CONSET           = I2CON_I2EN;
   \   00000030   E004A0E3           MOV      R0,#-536870912
   \   00000034   700B80E3           ORR      R0,R0,#0x1C000
   \   00000038   4010A0E3           MOV      R1,#+64
   \   0000003C   001080E5           STR      R1,[R0, #+0]
    280          
    281              I2C_Address         = (PCA9532_ADDRESS & 0xFE);             /* Clear lower bit of address                               */
   \   00000040   ........           LDR      R0,??DataTable29  ;; I2C_Address
   \   00000044   C010A0E3           MOV      R1,#+192
   \   00000048   0010C0E5           STRB     R1,[R0, #+0]
    282              I2C_BufPtr          = p_buf;
   \   0000004C   ........           LDR      R0,??DataTable61  ;; I2C_BufPtr
   \   00000050   004080E5           STR      R4,[R0, #+0]
    283              I2C_Count           = count;
   \   00000054   ........           LDR      R0,??DataTable63  ;; I2C_Count
   \   00000058   0050C0E5           STRB     R5,[R0, #+0]
    284          
    285              I20CONSET           = I2CON_STA
    286                                  | I2CON_AA;
   \   0000005C   E004A0E3           MOV      R0,#-536870912
   \   00000060   700B80E3           ORR      R0,R0,#0x1C000
   \   00000064   2410A0E3           MOV      R1,#+36
   \   00000068   001080E5           STR      R1,[R0, #+0]
    287          
    288              VICIntEnable        =  (1 << VIC_I2C0);                     /* Enable the interrupt source                              */
   \   0000006C   EF00E0E3           MVN      R0,#+239
   \   00000070   F00EC0E3           BIC      R0,R0,#0xF00
   \   00000074   801FA0E3           MOV      R1,#+512
   \   00000078   001080E5           STR      R1,[R0, #+0]
    289              OSSemPend(I2C_SemWait, 0, &err);                            /* Wait until complete                                      */
   \   0000007C   0D20B0E1           MOVS     R2,SP
   \   00000080   0010A0E3           MOV      R1,#+0
   \   00000084   ........           LDR      R0,??DataTable65  ;; I2C_SemWait
   \   00000088   000090E5           LDR      R0,[R0, #+0]
   \   0000008C   ........           _BLF     OSSemPend,??OSSemPend??rA
    290          
    291              OSSemPost(I2C_SemBusy);                                     /* Free I2C                                                 */
   \   00000090   ........           LDR      R0,??DataTable28  ;; I2C_SemBusy
   \   00000094   000090E5           LDR      R0,[R0, #+0]
   \   00000098   ........           _BLF     OSSemPost,??OSSemPost??rA
    292          }
   \   0000009C   04D08DE2           ADD      SP,SP,#+4        ;; stack cleaning
   \   000000A0   3080BDE8           POP      {R4,R5,PC}       ;; return
    293          
    294          /*
    295          *********************************************************************************************************
    296          *                                        I2C_ISR_Handler()
    297          *
    298          * Description : This function is the I2C ISR handler.
    299          *
    300          * Arguements  : None
    301          *
    302          * Returns     : None
    303          *********************************************************************************************************
    304          */
    305          

   \                                 In segment CODE, align 4, keep-with-next
    306          void  I2C_ISR_Handler (void)
    307          {
   \                     I2C_ISR_Handler:
   \   00000000   00402DE9           PUSH     {LR}
    308              CPU_INT32U  status;
    309              CPU_INT32U  temp;
    310          
    311          
    312              status      = I20STAT;
   \   00000004   4E02A0E3           MOV      R0,#-536870908
   \   00000008   700B80E3           ORR      R0,R0,#0x1C000
   \   0000000C   000090E5           LDR      R0,[R0, #+0]
    313              temp        = 0;
   \   00000010   0010A0E3           MOV      R1,#+0
    314          
    315              switch (status & 0xF8) {
   \   00000014   F80010E2           ANDS     R0,R0,#0xF8
   \   00000018   080050E3           CMP      R0,#+8
   \   0000001C   1400000A           BEQ      ??I2C_ISR_Handler_0
   \   00000020   100050E3           CMP      R0,#+16
   \   00000024   1200000A           BEQ      ??I2C_ISR_Handler_0
   \   00000028   180050E3           CMP      R0,#+24
   \   0000002C   1900000A           BEQ      ??I2C_ISR_Handler_1
   \   00000030   200050E3           CMP      R0,#+32
   \   00000034   5200000A           BEQ      ??I2C_ISR_Handler_2
   \   00000038   280050E3           CMP      R0,#+40
   \   0000003C   2900000A           BEQ      ??I2C_ISR_Handler_3
   \   00000040   300050E3           CMP      R0,#+48
   \   00000044   4E00000A           BEQ      ??I2C_ISR_Handler_2
   \   00000048   380050E3           CMP      R0,#+56
   \   0000004C   5B00000A           BEQ      ??I2C_ISR_Handler_4
   \   00000050   400050E3           CMP      R0,#+64
   \   00000054   6400000A           BEQ      ??I2C_ISR_Handler_5
   \   00000058   480050E3           CMP      R0,#+72
   \   0000005C   4800000A           BEQ      ??I2C_ISR_Handler_2
   \   00000060   500050E3           CMP      R0,#+80
   \   00000064   7000000A           BEQ      ??I2C_ISR_Handler_6
   \   00000068   580050E3           CMP      R0,#+88
   \   0000006C   8900000A           BEQ      ??I2C_ISR_Handler_7
   \   00000070   A20000EA           B        ??I2C_ISR_Handler_8
    316          
    317                  case I2STAT_START:
    318                  case I2STAT_REPEATED_START:
    319                       I20DAT             = I2C_Address;
   \                     ??I2C_ISR_Handler_0:
   \   00000074   8E02A0E3           MOV      R0,#-536870904
   \   00000078   700B80E3           ORR      R0,R0,#0x1C000
   \   0000007C   ........           LDR      R1,??DataTable29  ;; I2C_Address
   \   00000080   0010D1E5           LDRB     R1,[R1, #+0]
   \   00000084   001080E5           STR      R1,[R0, #+0]
    320                       I20CONCLR          = I2CON_STA | I2CON_SI;
   \   00000088   ........           LDR      R0,??DataTable66  ;; 0xffffffffe001c018
   \   0000008C   2810A0E3           MOV      R1,#+40
   \   00000090   001080E5           STR      R1,[R0, #+0]
   \   00000094   9C0000EA           B        ??I2C_ISR_Handler_9
    321                       break;
    322          
    323                  case I2STAT_SLA_W_ACK:
    324                       temp               = *I2C_BufPtr;
   \                     ??I2C_ISR_Handler_1:
   \   00000098   ........           LDR      R0,??DataTable61  ;; I2C_BufPtr
   \   0000009C   000090E5           LDR      R0,[R0, #+0]
   \   000000A0   0010D0E5           LDRB     R1,[R0, #+0]
    325                       I20DAT             = temp;
   \   000000A4   8E02A0E3           MOV      R0,#-536870904
   \   000000A8   700B80E3           ORR      R0,R0,#0x1C000
   \   000000AC   001080E5           STR      R1,[R0, #+0]
    326                       I2C_BufPtr        += 1;
   \   000000B0   ........           LDR      R0,??DataTable61  ;; I2C_BufPtr
   \   000000B4   ........           LDR      R1,??DataTable61  ;; I2C_BufPtr
   \   000000B8   001091E5           LDR      R1,[R1, #+0]
   \   000000BC   011091E2           ADDS     R1,R1,#+1
   \   000000C0   001080E5           STR      R1,[R0, #+0]
    327                       I2C_Count         -= 1;
   \   000000C4   ........           LDR      R0,??DataTable63  ;; I2C_Count
   \   000000C8   ........           LDR      R1,??DataTable63  ;; I2C_Count
   \   000000CC   0010D1E5           LDRB     R1,[R1, #+0]
   \   000000D0   011051E2           SUBS     R1,R1,#+1
   \   000000D4   0010C0E5           STRB     R1,[R0, #+0]
    328                       I20CONCLR          = I2CON_STA | I2CON_SI;
   \   000000D8   ........           LDR      R0,??DataTable66  ;; 0xffffffffe001c018
   \   000000DC   2810A0E3           MOV      R1,#+40
   \   000000E0   001080E5           STR      R1,[R0, #+0]
   \   000000E4   880000EA           B        ??I2C_ISR_Handler_9
    329                       break;
    330          
    331                  case I2STAT_DAT_T_ACK:
    332                       if (I2C_Count > 0) {
   \                     ??I2C_ISR_Handler_3:
   \   000000E8   ........           LDR      R0,??DataTable63  ;; I2C_Count
   \   000000EC   0000D0E5           LDRB     R0,[R0, #+0]
   \   000000F0   010050E3           CMP      R0,#+1
   \   000000F4   1300003A           BCC      ??I2C_ISR_Handler_10
    333                           temp           = *I2C_BufPtr;
   \   000000F8   ........           LDR      R0,??DataTable61  ;; I2C_BufPtr
   \   000000FC   000090E5           LDR      R0,[R0, #+0]
   \   00000100   0010D0E5           LDRB     R1,[R0, #+0]
    334                           I20DAT         = temp;
   \   00000104   8E02A0E3           MOV      R0,#-536870904
   \   00000108   700B80E3           ORR      R0,R0,#0x1C000
   \   0000010C   001080E5           STR      R1,[R0, #+0]
    335                           I2C_BufPtr    += 1;
   \   00000110   ........           LDR      R0,??DataTable61  ;; I2C_BufPtr
   \   00000114   ........           LDR      R1,??DataTable61  ;; I2C_BufPtr
   \   00000118   001091E5           LDR      R1,[R1, #+0]
   \   0000011C   011091E2           ADDS     R1,R1,#+1
   \   00000120   001080E5           STR      R1,[R0, #+0]
    336                           I2C_Count     -= 1;
   \   00000124   ........           LDR      R0,??DataTable63  ;; I2C_Count
   \   00000128   ........           LDR      R1,??DataTable63  ;; I2C_Count
   \   0000012C   0010D1E5           LDRB     R1,[R1, #+0]
   \   00000130   011051E2           SUBS     R1,R1,#+1
   \   00000134   0010C0E5           STRB     R1,[R0, #+0]
    337                           I20CONCLR      = I2CON_STA | I2CON_SI;
   \   00000138   ........           LDR      R0,??DataTable66  ;; 0xffffffffe001c018
   \   0000013C   2810A0E3           MOV      R1,#+40
   \   00000140   001080E5           STR      R1,[R0, #+0]
   \   00000144   700000EA           B        ??I2C_ISR_Handler_9
    338                       } else {
    339                           I20CONCLR      = I2CON_STA | I2CON_SI;
   \                     ??I2C_ISR_Handler_10:
   \   00000148   ........           LDR      R0,??DataTable66  ;; 0xffffffffe001c018
   \   0000014C   2810A0E3           MOV      R1,#+40
   \   00000150   001080E5           STR      R1,[R0, #+0]
    340                           I20CONSET      = I2CON_STO;
   \   00000154   E004A0E3           MOV      R0,#-536870912
   \   00000158   700B80E3           ORR      R0,R0,#0x1C000

⌨️ 快捷键说明

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