📄 uart.s
字号:
DATA
??DataTable0_3:
DC32 0x4006b000
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_4:
DC32 0x4004b010
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_5:
DC32 0x4004b00c
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_6:
DC32 0x4006c000
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_7:
DC32 0x4004c00c
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_8:
DC32 0x4004c008
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_9:
DC32 0x4006d000
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_10:
DC32 0x4004b044
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_11:
DC32 0x4004b040
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_12:
DC32 0x400ea000
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_13:
DC32 0x4004d060
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_14:
DC32 0x4004d064
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_15:
DC32 0x400eb000
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_16:
DC32 0x4004d020
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_17:
DC32 0x4004d024
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_18:
DC32 0x40048034
SECTION `.text`:CODE:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
??DataTable0_19:
DC32 0x40048028
// 104
// 105 //-------------------------------------------------------------------------*
// 106 //函数名: uart_re1 *
// 107 //功 能: 串行接受1个字节 *
// 108 //参 数: uartch: 串口号 *
// 109 // ch: 接收到的字节 *
// 110 //返 回: 成功:1;失败:0 *
// 111 //说 明: *
// 112 //-------------------------------------------------------------------------*
SECTION `.text`:CODE:NOROOT(1)
THUMB
// 113 uint8 uart_re1 (UART_MemMapPtr uartch,uint8 *ch)
// 114 {
// 115 uint32 k;
// 116
// 117 for (k = 0; k < 0xfbbb; k++)//有时间限制
uart_re1:
MOVS R2,#+0
B.N ??uart_re1_0
??uart_re1_1:
ADDS R2,R2,#+1
??uart_re1_0:
MOVW R3,#+64443
CMP R2,R3
BCS.N ??uart_re1_2
// 118 if((UART_S1_REG(uartch) & UART_S1_RDRF_MASK)!= 0)//判断接收缓冲区是否满
LDRB R3,[R0, #+4]
LSLS R3,R3,#+26
BPL.N ??uart_re1_1
// 119 {
// 120 *ch = UART_D_REG(uartch);
LDRB R0,[R0, #+7]
STRB R0,[R1, #+0]
// 121 return 1; //接受成功
MOVS R0,#+1
B.N ??uart_re1_3
// 122 }
// 123 if(k>=0xfbbb)
??uart_re1_2:
MOVW R0,#+64443
CMP R2,R0
BCC.N ??uart_re1_4
// 124 {
// 125 return 0; //接受失败
MOVS R0,#+0
B.N ??uart_re1_3
// 126 }
// 127 return 0;
??uart_re1_4:
MOVS R0,#+0
??uart_re1_3:
BX LR ;; return
// 128 }
// 129
// 130 //-------------------------------------------------------------------------*
// 131 //函数名: uart_send1 *
// 132 //功 能: 串行发送1个字节 *
// 133 //参 数: uartch: 串口号 *
// 134 // ch: 要发送的字节 *
// 135 //返 回: 无 *
// 136 //说 明: *
// 137 //-------------------------------------------------------------------------*
SECTION `.text`:CODE:NOROOT(1)
THUMB
// 138 void uart_send1 (UART_MemMapPtr uartch, uint8 ch)
// 139 {
// 140 //等待发送缓冲区空
// 141 while(!(UART_S1_REG(uartch) & UART_S1_TDRE_MASK));
uart_send1:
??uart_send1_0:
LDRB R2,[R0, #+4]
LSLS R2,R2,#+24
BPL.N ??uart_send1_0
// 142 //发送数据
// 143 UART_D_REG(uartch) = (uint8)ch;
STRB R1,[R0, #+7]
// 144 }
BX LR ;; return
// 145
// 146 //-------------------------------------------------------------------------*
// 147 //函数名: uart_reN *
// 148 //功 能: 串行 接收n个字节 *
// 149 //参 数: uartch: 串口号 *
// 150 // buff: 接收缓冲区 *
// 151 // len:接收长度 *
// 152 //返 回: 1:成功;0:失败 *
// 153 //说 明: *
// 154 //-------------------------------------------------------------------------*
SECTION `.text`:CODE:NOROOT(1)
THUMB
// 155 uint8 uart_reN (UART_MemMapPtr uartch ,uint8* buff,uint16 len)
// 156 {
uart_reN:
PUSH {R3-R7,LR}
MOVS R4,R0
MOVS R5,R1
MOVS R6,R2
// 157 uint16 m=0;
MOVS R7,#+0
B.N ??uart_reN_0
// 158 while (m < len)
// 159 {
// 160 if(0==uart_re1(uartch,&buff[m]))
// 161 return 0; //接收失败
// 162 else m++;
??uart_reN_1:
ADDS R7,R7,#+1
??uart_reN_0:
UXTH R7,R7 ;; ZeroExt R7,R7,#+16,#+16
UXTH R6,R6 ;; ZeroExt R6,R6,#+16,#+16
CMP R7,R6
BCS.N ??uart_reN_2
UXTH R7,R7 ;; ZeroExt R7,R7,#+16,#+16
ADDS R1,R7,R5
MOVS R0,R4
BL uart_re1
CMP R0,#+0
BNE.N ??uart_reN_1
MOVS R0,#+0
B.N ??uart_reN_3
// 163 }
// 164
// 165 return 1; //接收成功
??uart_reN_2:
MOVS R0,#+1
??uart_reN_3:
POP {R1,R4-R7,PC} ;; return
// 166
// 167 }
// 168
// 169 //-------------------------------------------------------------------------*
// 170 //函数名: uart_sendN *
// 171 //功 能: 串行 接收n个字节 *
// 172 //参 数: uartch: 串口号 *
// 173 // buff: 发送缓冲区 *
// 174 // len:发送长度 *
// 175 //返 回: 无 *
// 176 //说 明: *
// 177 //-------------------------------------------------------------------------*
SECTION `.text`:CODE:NOROOT(1)
THUMB
// 178 void uart_sendN (UART_MemMapPtr uartch ,uint8* buff,uint16 len)
// 179 {
uart_sendN:
PUSH {R3-R7,LR}
MOVS R4,R0
MOVS R5,R1
MOVS R6,R2
// 180 int i;
// 181 for(i=0;i<len;i++)
MOVS R7,#+0
B.N ??uart_sendN_0
// 182 {
// 183 uart_send1(uartch,buff[i]);
??uart_sendN_1:
LDRB R1,[R7, R5]
MOVS R0,R4
BL uart_send1
// 184 }
ADDS R7,R7,#+1
??uart_sendN_0:
UXTH R6,R6 ;; ZeroExt R6,R6,#+16,#+16
CMP R7,R6
BLT.N ??uart_sendN_1
// 185 }
POP {R0,R4-R7,PC} ;; return
// 186
// 187 //-------------------------------------------------------------------------*
// 188 //函数名: enableuartreint *
// 189 //功 能: 开串口接收中断 *
// 190 //参 数: uartch: 串口号 *
// 191 // irqno: 对应irq号 *
// 192 //返 回: 无 *
// 193 //说 明: *
// 194 //-------------------------------------------------------------------------*
SECTION `.text`:CODE:NOROOT(1)
THUMB
// 195 void enableuartreint(UART_MemMapPtr uartch,uint8 irqno)
// 196 {
enableuartreint:
PUSH {R7,LR}
// 197 UART_C2_REG(uartch)|=UART_C2_RIE_MASK; //开放UART接收中断
LDRB R2,[R0, #+3]
ORRS R2,R2,#0x20
STRB R2,[R0, #+3]
// 198 enable_irq(irqno); //开接收引脚的IRQ中断
UXTB R1,R1 ;; ZeroExt R1,R1,#+24,#+24
MOVS R0,R1
BL enable_irq
// 199 }
POP {R0,PC} ;; return
// 200
// 201 //-------------------------------------------------------------------------*
// 202 //函数名: disableuartreint *
// 203 //功 能: 关串口接收中断 *
// 204 //参 数: uartch: 串口号 *
// 205 // irqno: 对应irq号 *
// 206 //返 回: 无 *
// 207 //说 明: *
// 208 //-------------------------------------------------------------------------*
SECTION `.text`:CODE:NOROOT(1)
THUMB
// 209 void disableuartreint(UART_MemMapPtr uartch,uint8 irqno)
// 210 {
disableuartreint:
PUSH {R7,LR}
// 211 UART_C2_REG(uartch)&=~UART_C2_RIE_MASK; //禁止UART接收中断
LDRB R2,[R0, #+3]
ANDS R2,R2,#0xDF
STRB R2,[R0, #+3]
// 212 disable_irq(irqno); //关接收引脚的IRQ中断
UXTB R1,R1 ;; ZeroExt R1,R1,#+24,#+24
MOVS R0,R1
BL disable_irq
// 213 }
POP {R0,PC} ;; return
SECTION `.iar_vfe_header`:DATA:REORDER:NOALLOC:NOROOT(2)
SECTION_TYPE SHT_PROGBITS, 0
DATA
DC32 0
SECTION __DLIB_PERTHREAD:DATA:REORDER:NOROOT(0)
SECTION_TYPE SHT_PROGBITS, 0
SECTION __DLIB_PERTHREAD_init:DATA:REORDER:NOROOT(0)
SECTION_TYPE SHT_PROGBITS, 0
END
// 214
// 215
// 216
// 217
// 218
// 219
// 220
// 221
// 222
// 223
// 224
// 225
// 226
// 227
// 228
//
// 630 bytes in section .text
//
// 630 bytes of CODE memory
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -