📄 i2c.lst
字号:
\ 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 + -