📄 simulatei2c.s79
字号:
//////////////////////////////////////////////////////////////////////////////
// /
// 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 + -