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

📄 simulatei2c.s79

📁 用于监视I2C通信总线
💻 S79
📖 第 1 页 / 共 3 页
字号:
//////////////////////////////////////////////////////////////////////////////
//                                                                           /
// IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION   15/Dec/2008  09:53:05 /
// Copyright 1999-2005 IAR Systems. All rights reserved.                     /
//                                                                           /
//    Cpu mode        =  thumb                                               /
//    Endian          =  little                                              /
//    Stack alignment =  4                                                   /
//    Source file     =  D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\sou /
//                       rce\simulateI2C.c                                   /
//    Command line    =  D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\sou /
//                       rce\simulateI2C.c -D VECT_TAB_FLASH -D              /
//                       USE_STM3210E_EVAL -lA D:\资料\ST\ST\usb\USBLib\demo /
//                       s\Virtual_COM_Port\project\EWARMv4\STM3210E-EVAL\Li /
//                       st\ -o D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_P /
//                       ort\project\EWARMv4\STM3210E-EVAL\Obj\ -z9 --debug  /
//                       --cpu_mode thumb --endian little --cpu cortex-M3    /
//                       --stack_align 4 --require_prototypes --fpu None     /
//                       --dlib_config "C:\Program Files\IAR                 /
//                       Systems\Embedded Workbench 4.0                      /
//                       Evaluation\arm\LIB\dl7mptnnl8f.h" -I                /
//                       D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\pro /
//                       ject\EWARMv4\..\..\include\ -I                      /
//                       D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\pro /
//                       ject\EWARMv4\..\..\..\..\library\inc\ -I            /
//                       D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\pro /
//                       ject\EWARMv4\..\..\..\..\..\FWLib\library\inc\ -I   /
//                       "C:\Program Files\IAR Systems\Embedded Workbench    /
//                       4.0 Evaluation\arm\INC\" --inline_threshold=2       /
//    List file       =  D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\pro /
//                       ject\EWARMv4\STM3210E-EVAL\List\simulateI2C.s79     /
//                                                                           /
//                                                                           /
//////////////////////////////////////////////////////////////////////////////

        NAME simulateI2C

        RTMODEL "StackAlign4", "USED"
        RTMODEL "__cpu_mode", "__pcs__thumb"
        RTMODEL "__data_model", "absolute"
        RTMODEL "__endian", "little"
        RTMODEL "__rt_version", "6"

        RSEG CSTACK:DATA:NOROOT(2)

??DataTable0 EQU 0
??DataTable1 EQU 0
??DataTable10 EQU 0
??DataTable11 EQU 0
??DataTable13 EQU 0
??DataTable14 EQU 0
??DataTable15 EQU 0
??DataTable2 EQU 0
??DataTable3 EQU 0
??DataTable5 EQU 0
??DataTable6 EQU 0
??DataTable7 EQU 0
??DataTable8 EQU 0
??DataTable9 EQU 0
        MULTWEAK ??SetEPTxCount??rT
        MULTWEAK ??SetEPTxValid??rT
        MULTWEAK ??UserToPMABufferCopy??rT
        PUBWEAK ?init?tab?DATA_Z
        PUBLIC EXTI0_IRQHandler
        FUNCTION EXTI0_IRQHandler,0203H
        LOCFRAME CSTACK, 16, STACK
        PUBLIC EXTI1_IRQHandler
        FUNCTION EXTI1_IRQHandler,0203H
        LOCFRAME CSTACK, 40, STACK
        PUBLIC I2C_To_USB_Send_Data
        FUNCTION I2C_To_USB_Send_Data,0203H
        LOCFRAME CSTACK, 20, STACK
        PUBLIC SI2C_data_out_enable
        FUNCTION SI2C_data_out_enable,0203H
        PUBLIC SI2C_init
        FUNCTION SI2C_init,0203H
        PUBLIC WINDOW_In
        FUNCTION WINDOW_In,0203H
        LOCFRAME CSTACK, 8, STACK
        PUBLIC WINDOW_Out
        FUNCTION WINDOW_Out,0203H
        PUBLIC data_convert
        FUNCTION data_convert,0203H
        LOCFRAME CSTACK, 20, STACK
        PUBLIC data_to_ascii
        FUNCTION data_to_ascii,0203H
        PUBLIC si2c1
        PUBLIC tempp1
        PUBLIC tempp2
        PUBLIC tempp_choise
        PUBLIC tempp_count1
        PUBLIC tempp_count2
        
        CFI Names cfiNames0
        CFI StackFrame CFA R13 HUGEDATA
        CFI Resource R0:32, R1:32, R2:32, R3:32, R4:32, R5:32, R6:32, R7:32
        CFI Resource R8:32, R9:32, R10:32, R11:32, R12:32, R13:32, R14:32
        CFI VirtualResource ?RET:32
        CFI EndNames cfiNames0
        
        CFI Common cfiCommon0 Using cfiNames0
        CFI CodeAlign 2
        CFI DataAlign 4
        CFI ReturnAddress ?RET CODE
        CFI CFA R13+0
        CFI R0 Undefined
        CFI R1 Undefined
        CFI R2 Undefined
        CFI R3 Undefined
        CFI R4 SameValue
        CFI R5 SameValue
        CFI R6 SameValue
        CFI R7 SameValue
        CFI R8 SameValue
        CFI R9 SameValue
        CFI R10 SameValue
        CFI R11 SameValue
        CFI R12 Undefined
        CFI R14 Undefined
        CFI ?RET R14
        CFI EndCommon cfiCommon0
        
SetEPTxCount        SYMBOL "SetEPTxCount"
SetEPTxValid        SYMBOL "SetEPTxValid"
UserToPMABufferCopy SYMBOL "UserToPMABufferCopy"
??SetEPTxCount??rT  SYMBOL "??rT", SetEPTxCount
??SetEPTxValid??rT  SYMBOL "??rT", SetEPTxValid
??UserToPMABufferCopy??rT SYMBOL "??rT", UserToPMABufferCopy

        EXTERN SetEPTxCount
        FUNCTION SetEPTxCount,0202H
        EXTERN SetEPTxValid
        FUNCTION SetEPTxValid,0202H
        EXTERN UserToPMABufferCopy
        FUNCTION UserToPMABufferCopy,0202H

// D:\资料\ST\ST\usb\USBLib\demos\Virtual_COM_Port\source\simulateI2C.c
//    1 
//    2 #include "define.h"
//    3 #include "stm32f10x_it.h"
//    4 #include "usb_lib.h"
//    5 #include "usb_istr.h"
//    6 #include "hw_config.h"
//    7 #include "stm32f10x_exti.h"
//    8 
//    9 #define WINDOW_SIZE 30000
//   10 
//   11 typedef enum _I2CSTAT
//   12 {
//   13   WAITING,
//   14   START,
//   15   BUSY,
//   16 }I2CSTAT;
//   17 
//   18 typedef struct _SI2C
//   19 {
//   20   I2CSTAT status;
//   21   uint8 data[WINDOW_SIZE];
//   22   uint8 temp[1000];
//   23   uint32 head;
//   24   uint32 tail;
//   25   uint32 windowcount;
//   26   uint8 nowbyte;
//   27   uint32 bitcount;
//   28   uint8 flag;//0. data out control bit
//   29   uint8 test;
//   30   uint32 windowmaxcount;
//   31 }SI2C;
//   32 

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
//   33 SI2C si2c1;
si2c1:
        DS8 31032
//   34 

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
//   35 uint16 tempp1[2000];
tempp1:
        DS8 4000

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
//   36 uint16 tempp2[2000];
tempp2:
        DS8 4000

        RSEG DATA_Z:DATA:SORT:NOROOT(2)
//   37 uint32 tempp_count1;
//   38 uint32 tempp_count2;
//   39 uint16 tempp_choise;
tempp_choise:
        DS8 2
        DS8 2
tempp_count1:
        DS8 4
tempp_count2:
        DS8 4
//   40 
//   41 
//   42 void SI2C_init(void);
//   43 uint8 data_to_ascii(uint8 data);
//   44 //void SCL_DET(void);
//   45 //void SDA_DET(void);
//   46 void I2C_To_USB_Send_Data(void);
//   47 void WINDOW_In(uint8 data);
//   48 uint8 WINDOW_Out(void);
//   49 void data_convert(void);
//   50 void SI2C_data_out_enable(void);
//   51 

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function SI2C_data_out_enable
        THUMB
//   52 void SI2C_data_out_enable(void)
//   53 {
//   54   BitSet(si2c1.flag,0);
SI2C_data_out_enable:
        LDR.N    R0,??SI2C_data_out_enable_0  ;; si2c1 + 31024
        LDRB     R1,[R0, #+0]
        ORRS     R1,R1,#0x1
        STRB     R1,[R0, #+0]
//   55 }
        BX       LR               ;; return
        DATA
??SI2C_data_out_enable_0:
        DC32     si2c1 + 31024
        CFI EndBlock cfiBlock0
//   56 

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock1 Using cfiCommon0
        CFI Function WINDOW_In
        THUMB
//   57 void WINDOW_In(uint8 data)
//   58 {
//   59   if(si2c1.windowcount<WINDOW_SIZE)
WINDOW_In:
        LDR.N    R1,??DataTable16  ;; si2c1
        LDR.N    R2,??DataTable4  ;; 0x791c
        PUSH     {R4,LR}
        CFI ?RET Frame(CFA, -4)
        CFI R4 Frame(CFA, -8)
        CFI CFA R13+8
        LDR.N    R4,??WINDOW_In_0  ;; 0x7530
        ADDS     R2,R1,R2
        LDR      R3,[R2, #+8]
        CMP      R3,R4
        BCS.N    ??WINDOW_In_1
//   60   {
//   61     if(si2c1.head==WINDOW_SIZE-1)
        LDR      R3,[R2, #+0]
        SUBS     R4,R4,#+1
        CMP      R3,R4
        ITTEE   NE 
        ADDNE    R3,R3,#+1
        STRNE    R3,[R2, #+0]
//   62     {
//   63       si2c1.head=0;
        MOVEQ    R3,#+0
        STREQ    R3,[R2, #+0]
//   64     }
//   65     else
//   66     {
//   67       si2c1.head++;
//   68     }
//   69     si2c1.data[si2c1.head]=data;
        LDR      R3,[R2, #+0]
        ADDS     R1,R1,R3
        STRB     R0,[R1, #+1]
//   70     si2c1.windowcount++;
        LDR      R0,[R2, #+8]
        ADDS     R0,R0,#+1
        STR      R0,[R2, #+8]
        B.N      ??WINDOW_In_2
//   71   }
//   72   else
//   73   {
//   74     si2c1.test=1;
??WINDOW_In_1:
        MOVS     R0,#+1
        STRB     R0,[R2, #+21]
//   75   }
//   76   if(si2c1.windowcount>si2c1.windowmaxcount)
??WINDOW_In_2:
        LDR      R0,[R2, #+8]
        LDR      R1,[R2, #+24]
        CMP      R1,R0
        IT      CC 
//   77   {
//   78     si2c1.windowmaxcount=si2c1.windowcount;
        STRCC    R0,[R2, #+24]
//   79   }
//   80 }
        POP      {R4,PC}          ;; return
        Nop      
        DATA
??WINDOW_In_0:
        DC32     0x7530
        CFI EndBlock cfiBlock1
//   81 

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function WINDOW_Out
        THUMB
//   82 uint8 WINDOW_Out(void)
//   83 {
//   84   uint8 data;
//   85   if(si2c1.windowcount>0)
WINDOW_Out:
        LDR.N    R1,??DataTable16  ;; si2c1
        LDR.N    R2,??WINDOW_Out_0  ;; 0x7920
        ADDS     R2,R1,R2
        LDR      R3,[R2, #+4]
        CBZ      R3,??WINDOW_Out_1
//   86   {
//   87     if(si2c1.tail==WINDOW_SIZE-1)
        LDR      R0,[R2, #+0]
        LDR.N    R3,??WINDOW_Out_0+0x4  ;; 0x752f
        CMP      R0,R3
        ITTEE   NE 
        ADDNE    R0,R0,#+1
        STRNE    R0,[R2, #+0]
//   88     {
//   89       si2c1.tail=0;
        MOVEQ    R0,#+0
        STREQ    R0,[R2, #+0]
//   90     }
//   91     else
//   92     {
//   93       si2c1.tail++;
//   94     }
//   95     data=si2c1.data[si2c1.tail];
        LDR      R0,[R2, #+0]
        ADDS     R0,R1,R0
//   96     si2c1.windowcount--;
        LDR      R1,[R2, #+4]
        LDRB     R0,[R0, #+1]
        SUBS     R1,R1,#+1
        STR      R1,[R2, #+4]
//   97   }
//   98   return(data);
??WINDOW_Out_1:
        UXTB     R0,R0
        BX       LR               ;; return
        Nop      
        DATA
??WINDOW_Out_0:
        DC32     0x7920
        DC32     0x752f
        CFI EndBlock cfiBlock2
//   99 }
//  100 
//  101 

        RSEG CODE:CODE:NOROOT(2)
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function SI2C_init
        THUMB
//  102 void SI2C_init(void)
//  103 {
//  104   si2c1.head=0;
SI2C_init:
        LDR.N    R0,??DataTable16  ;; si2c1
        LDR.N    R1,??DataTable4  ;; 0x791c
        MOVS     R2,#+0
//  105   si2c1.tail=0;
//  106   si2c1.status=WAITING;
        STRB     R2,[R0, #+0]
        ADDS     R1,R0,R1
        STR      R2,[R1, #+0]
        STR      R2,[R1, #+4]
//  107   si2c1.nowbyte=0;
        STRB     R2,[R1, #+12]
//  108   si2c1.bitcount=0;
        STR      R2,[R1, #+16]
//  109   si2c1.windowcount=0;
        STR      R2,[R1, #+8]
//  110 }
        BX       LR               ;; return
        CFI EndBlock cfiBlock3

        RSEG CODE:CODE:NOROOT(2)
        DATA

⌨️ 快捷键说明

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