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

📄 i2c.lst

📁 Lpc2103的小程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
##############################################################################
#                                                                            #
# IAR ARM ANSI C/C++ Compiler V4.31A/W32 KICKSTART     08/Jun/2006  15:24:50 #
# Copyright 1999-2005 IAR Systems. All rights reserved.                      #
#                                                                            #
#    Cpu mode        =  interwork                                            #
#    Endian          =  little                                               #
#    Stack alignment =  4                                                    #
#    Source file     =  E:\项目文档\LPC2103 开发板\项目文档\LPC210X          #
#                       EK_V2.0\调试代码\IAR\JLINK for IAR Program           #
#                       Example\I2C\SRC\I2C.C                                #
#    Command line    =  "E:\项目文档\LPC2103 开发板\项目文档\LPC210X         #
#                       EK_V2.0\调试代码\IAR\JLINK for IAR Program           #
#                       Example\I2C\SRC\I2C.C" -lCN "E:\项目文档\LPC2103     #
#                       开发板\项目文档\LPC210X EK_V2.0\调试代码\IAR\JLINK   #
#                       for IAR Program Example\I2C\Jlink_RAM\List\" -o      #
#                       "E:\项目文档\LPC2103 开发板\项目文档\LPC210X         #
#                       EK_V2.0\调试代码\IAR\JLINK for IAR Program           #
#                       Example\I2C\Jlink_RAM\Obj\" -z2 --no_cse             #
#                       --no_unroll --no_inline --no_code_motion --no_tbaa   #
#                       --no_clustering --no_scheduling --debug --cpu_mode   #
#                       thumb --endian little --cpu ARM7TDMI-S               #
#                       --stack_align 4 --interwork -e --fpu None            #
#                       --dlib_config "C:\Program Files\IAR                  #
#                       Systems\Embedded Workbench 4.0                       #
#                       Kickstart\ARM\LIB\dl4tptinl8n.h" -I "C:\Program      #
#                       Files\IAR Systems\Embedded Workbench 4.0             #
#                       Kickstart\ARM\INC\"                                  #
#    List file       =  E:\项目文档\LPC2103 开发板\项目文档\LPC210X          #
#                       EK_V2.0\调试代码\IAR\JLINK for IAR Program           #
#                       Example\I2C\Jlink_RAM\List\I2C.lst                   #
#    Object file     =  E:\项目文档\LPC2103 开发板\项目文档\LPC210X          #
#                       EK_V2.0\调试代码\IAR\JLINK for IAR Program           #
#                       Example\I2C\Jlink_RAM\Obj\I2C.r79                    #
#                                                                            #
#                                                                            #
##############################################################################

E:\项目文档\LPC2103 开发板\项目文档\LPC210X EK_V2.0\调试代码\IAR\JLINK for IAR Program Example\I2C\SRC\I2C.C
      1          
      2          /****************************************Copyright (c)**************************************************
      3          **
      4          **                                  北天星国际有限公司
      5          **                                http://www.po-star.com
      6          **
      7          **------------------------------------------------------------------------------------------------------
      8          ********************************************************************************************************
      9          **函数功能:给24C02里写入4个字节,在串口上打印出来;然后读出来,也在串口上打印出来
     10                      显示完后比较,如果不相等,蜂鸣器鸣叫;如果相等,LED闪烁
     11          **说明:JP2_LED2连接上,J9连接上.实验前按复位键。保证复位i2c
     12          ********************************************************************/
     13          
     14          
     15          
     16          #include "..\inc\config.h"
     17          #define STA   (1<<5)
     18          #define I2CEN (1<<6)
     19          #define STO   (1<<4)
     20          #define SI    (1<<3)
     21          #define AA    (1<<2)
     22          
     23          #define   WRMode     0                               //写控制位
     24          #define   RDMode     1                               //读控制位
     25          #define   C02MasterAddr  0xA0                        //24c02的器件地址
     26          #define   C02SlaveAddr    0                          //24C02的子地址
     27          #define   lastbyte   1                               //最后一位标志位
     28          

   \                                 In segment DATA_Z, align 4, align-sorted
     29          U8 I2C_buf1[10];
   \                     I2C_buf1:
   \   00000000                      DS8 12

   \                                 In segment DATA_Z, align 4, align-sorted
     30          U8 I2C_buf2[10];
   \                     I2C_buf2:
   \   00000000                      DS8 12
     31          
     32          extern void UART0_PutString(char *str);
     33          extern void UART0_PutChar ( U32 data);
     34          extern void UART0_Init (void);	
     35          extern void PLL_Init(void);
     36          /***********************i2c总线初始化*********************/

   \                                 In segment CODE, align 4, keep-with-next
     37          void  I2C_Init(void)
     38          {  /* 设置I2C时钟为100KHz */
     39             I2SCLH = I2SCLL = 14;            // 晶振为11.0592MHz,Fpclk = 2.7648MHz,I2C时钟速率=2.7648/28=100k
   \                     I2C_Init:
   \   00000000   0E20               MOV         R0,#+14
   \   00000002   0549               LDR         R1,??I2C_Init_0    ;; 0xe001c014
   \   00000004   0860               STR         R0,[R1, #+0]
   \   00000006   0549               LDR         R1,??I2C_Init_0+0x4  ;; 0xe001c010
   \   00000008   0860               STR         R0,[R1, #+0]
     40             I2CONCLR=STA|SI|AA|STO;
   \   0000000A   ....               LDR         R0,??DataTable16   ;; 0xe001c018
   \   0000000C   3C21               MOV         R1,#+60
   \   0000000E   0170               STRB        R1,[R0, #+0]
     41             I2CONSET=I2CEN;                  //I2EN=1,使能I2C功能
   \   00000010   ....               LDR         R0,??DataTable15   ;; 0xe001c000
   \   00000012   4021               MOV         R1,#+64
   \   00000014   0170               STRB        R1,[R0, #+0]
     42          }
   \   00000016   7047               BX          LR                 ;; return
   \                     ??I2C_Init_0:
   \   00000018   14C001E0           DC32        0xe001c014
   \   0000001C   10C001E0           DC32        0xe001c010
     43          
     44          /*************************发送起始信号*********************/

   \                                 In segment CODE, align 4, keep-with-next
     45          void I2C_Start(void)
     46          {
   \                     I2C_Start:
   \   00000000   00B5               PUSH        {LR}
     47            I2CONSET=STA;                    //启动发送START脉冲
   \   00000002   ....               LDR         R0,??DataTable15   ;; 0xe001c000
   \   00000004   2021               MOV         R1,#+32
   \   00000006   0170               STRB        R1,[R0, #+0]
     48          //I2CONSET=SI;                     //发送完起始位会自动置1
     49            do{}while(0x08!=I2CSTAT);        //等待完成start脉冲发送
   \                     ??I2C_Start_0:
   \   00000008   ....               LDR         R0,??DataTable17   ;; 0xe001c004
   \   0000000A   0078               LDRB        R0,[R0, #+0]
   \   0000000C   0006               LSL         R0,R0,#+24         ;; ZeroExt     R0,R0,#+24,#+24
   \   0000000E   000E               LSR         R0,R0,#+24
   \   00000010   0828               CMP         R0,#+8
   \   00000012   F9D1               BNE         ??I2C_Start_0
     50            I2CONCLR=STA;                    //清除STA位,结束过程
   \   00000014   ....               LDR         R0,??DataTable16   ;; 0xe001c018
   \   00000016   2021               MOV         R1,#+32
   \   00000018   0170               STRB        R1,[R0, #+0]
     51          }
   \   0000001A   01BC               POP         {R0}
   \   0000001C   0047               BX          R0                 ;; return
     52          
     53          /*****************发送结束信号*********************/

   \                                 In segment CODE, align 4, keep-with-next
     54          void I2C_Stop(void)
     55          {
     56            I2CONSET=STO;                    //启动发送STop脉冲,STO位是自动清除的.不必判断是否结束
   \                     I2C_Stop:
   \   00000000   ....               LDR         R0,??DataTable15   ;; 0xe001c000
   \   00000002   1021               MOV         R1,#+16
   \   00000004   0170               STRB        R1,[R0, #+0]
     57            I2CONCLR=SI;                     //只能清除SI,清除STO还是会有影响,STO同时清除,返回到初始化的状态
   \   00000006   ....               LDR         R0,??DataTable16   ;; 0xe001c018
   \   00000008   0821               MOV         R1,#+8
   \   0000000A   0170               STRB        R1,[R0, #+0]
     58          }
   \   0000000C   7047               BX          LR                 ;; return
     59          
     60          /************************延时*********************************/

   \                                 In segment CODE, align 4, keep-with-next
     61          void  DelayMs(U32  dly)
     62          {  U32  i;
   \                     DelayMs:
   \   00000000   00B5               PUSH        {LR}
     63          
     64             for(; dly>0; dly--)
   \                     ??DelayMs_0:
   \   00000002   0028               CMP         R0,#+0
   \   00000004   09D0               BEQ         ??DelayMs_1
     65                for(i=0; i<1000; i++);
   \   00000006   0022               MOV         R2,#+0
   \   00000008   111C               MOV         R1,R2
   \                     ??DelayMs_2:
   \   0000000A   FA22               MOV         R2,#+250
   \   0000000C   9200               LSL         R2,R2,#+2          ;; #+1000
   \   0000000E   9142               CMP         R1,R2
   \   00000010   01D2               BCS         ??DelayMs_3
   \   00000012   491C               ADD         R1,#+1
   \   00000014   F9E7               B           ??DelayMs_2
   \                     ??DelayMs_3:
   \   00000016   401E               SUB         R0,#+1
   \   00000018   F3E7               B           ??DelayMs_0
     66          }
   \                     ??DelayMs_1:
   \   0000001A   01BC               POP         {R0}
   \   0000001C   0047               BX          R0                 ;; return
     67          
     68          /***************写8位数据*****************************/

   \                                 In segment CODE, align 4, keep-with-next
     69          void WriteByte(U8 data)
     70          {
     71            I2DAT=data;
   \                     WriteByte:
   \   00000000   ....               LDR         R1,??DataTable18   ;; 0xe001c008
   \   00000002   0870               STRB        R0,[R1, #+0]
     72            I2CONCLR=SI;                     //启动发送
   \   00000004   ....               LDR         R1,??DataTable16   ;; 0xe001c018
   \   00000006   0822               MOV         R2,#+8
   \   00000008   0A70               STRB        R2,[R1, #+0]
     73          }
   \   0000000A   7047               BX          LR                 ;; return
     74          
     75          /***************写器件地址和读写信号*****************************/

   \                                 In segment CODE, align 4, keep-with-next
     76          void WriteAddr(U8 ReadMode)
     77          {
   \                     WriteAddr:
   \   00000000   10B5               PUSH        {R4,LR}
   \   00000002   041C               MOV         R4,R0
     78            WriteByte(C02MasterAddr+ReadMode);
   \   00000004   201C               MOV         R0,R4
   \   00000006   A030               ADD         R0,#+160
   \   00000008   0006               LSL         R0,R0,#+24         ;; ZeroExt     R0,R0,#+24,#+24
   \   0000000A   000E               LSR         R0,R0,#+24
   \   0000000C   ........           BL          WriteByte
     79            if(ReadMode)  do{}while(I2CSTAT!=0x40); //等待器件地址和读信号完成
   \   00000010   002C               CMP         R4,#+0
   \   00000012   06D0               BEQ         ??WriteAddr_0
   \                     ??WriteAddr_1:
   \   00000014   ....               LDR         R0,??DataTable17   ;; 0xe001c004

⌨️ 快捷键说明

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