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

📄 uart.lst

📁 rtc code for lpc2148
💻 LST
📖 第 1 页 / 共 5 页
字号:
 170 0138 000053E3 		ldrne	r3, .L14+20
 145:uart.c        ****     {
 146:uart.c        ****     // add to queue
 147:uart.c        ****     uart0_tx_buffer[uart0_tx_insert_idx] = (uint8_t)ch;
 148:uart.c        ****     uart0_tx_insert_idx = temp;
 149:uart.c        ****     }
 150:uart.c        ****   else
 151:uart.c        ****     {
 152:uart.c        ****     // set running flag and write to output register
 153:uart.c        ****     uart0_tx_running = 1;
 154:uart.c        ****     U0THR = (uint8_t)ch;
 171              	neh	r2, [r6, #0]
 172 013c FF2004E2 		.loc 1 153 0
 173              		moveq	r3, #1
 174 0140 4C309F15 		.loc 1 147 0
 175 0144 B020D611 		strneb	r4, [r2, r3]
 176              		.loc 1 153 0
 177 0148 0130A003 		streq	r3, [r1, #0]
 178              		.loc 1 154 0
 179 014c 0340C217 		streqb	r2, [r7, #0]
 180              		.loc 1 148 0
 181 0150 00308105 		strneh	r5, [r6, #0]	@ movhi
 182              		.loc 1 157 0
 183 0154 0020C705 		bl	disableIRQ
 184              		.loc 1 158 0
 185 0158 B050C611 		ldr	r2, .L14+12
 155:uart.c        ****     }
 156:uart.c        **** 
 157:uart.c        ****   cpsr = disableIRQ();                  // disable global interrupts
 186              	#4]	@ zero_extendqisi2
 187 015c FEFFFFEB 		orr	r3, r3, #2
 158:uart.c        ****   U0IER |= UIER_ETBEI;                  // enable TX interrupts
 188              	trb	r3, [r2, #4]
 189 0160 24209FE5 		.loc 1 159 0
 190 0164 0430D2E5 		bl	restoreIRQ
 191 0168 023083E3 		.loc 1 166 0
 192 016c 0430C2E5 		and	r3, r4, #255
 159:uart.c        ****   restoreIRQ(cpsr);                     // restore global interrupts
 193              	:
 194 0170 FEFFFFEB 	.L9:
 160:uart.c        **** #else
 161:uart.c        ****   while (!(U0LSR & ULSR_THRE))          // wait for TX buffer to empty
 162:uart.c        ****     continue;                           // also either WDOG() or swap()
 163:uart.c        **** 
 164:uart.c        ****   U0THR = (uint8_t)ch;
 165:uart.c        **** #endif
 166:uart.c        ****   return (uint8_t)ch;
 195              	loc 1 167 0
 196 0174 FF3004E2 		mov	r0, r3
 197              		ldmfd	sp!, {r4, r5, r6, r7, pc}
 198              	.L15:
 167:uart.c        **** }
 199              	ign	2
 200 0178 0300A0E1 	.L14:
 201 017c F080BDE8 		.word	uart0_tx_insert_idx
 202              		.word	-2147483521
 203              		.word	uart0_tx_extract_idx
 204              		.word	-536821760
 205 0180 00000000 		.word	uart0_tx_running
 206 0184 7F000080 		.word	uart0_tx_buffer
 207 0188 00000000 	.LFE3:
 209 0190 00000000 		.align	2
 210 0194 00000000 		.global	uart0Space
 212              	uart0Space:
 213              	.LFB4:
 214              		.loc 1 184 0
 215              		@ args = 0, pretend = 0, frame = 0
 216              		@ frame_needed = 0, uses_anonymous_args = 0
 217              		@ link register save eliminated.
 168:uart.c        **** 
 169:uart.c        **** /******************************************************************************
 170:uart.c        ****  *
 171:uart.c        ****  * Function Name: uart0Space()
 172:uart.c        ****  *
 173:uart.c        ****  * Description:  
 174:uart.c        ****  *    This function gets the available space in the transmit queue
 175:uart.c        ****  *
 176:uart.c        ****  * Calling Sequence: 
 177:uart.c        ****  *    void
 178:uart.c        ****  *
 179:uart.c        ****  * Returns:
 180:uart.c        ****  *    available space in the transmit queue
 181:uart.c        ****  *
 182:uart.c        ****  *****************************************************************************/
 183:uart.c        **** uint16_t uart0Space(void)
 184:uart.c        **** {
 218              	 0
 219              		ldr	r3, .L20
 220              		ldrh	r2, [r3, #0]
 221              		ldr	r3, .L20+4
 222              		ldrh	r3, [r3, #0]
 185:uart.c        **** #ifdef UART0_TX_INT_MODE
 186:uart.c        ****   int space;
 187:uart.c        **** 
 188:uart.c        ****   if ((space = (uart0_tx_extract_idx - uart0_tx_insert_idx)) <= 0)
 223              	r0, r3, r2
 224 0198 24309FE5 	.LVL11:
 225 019c B020D3E1 		cmp	r0, #0
 226 01a0 20309FE5 		.loc 1 189 0
 227 01a4 B030D3E1 		addle	r0, r0, #128
 228 01a8 020063E0 		sub	r0, r0, #1
 229              	.LVL12:
 230 01ac 000050E3 		mov	r0, r0, asl #16
 189:uart.c        ****     space += UART0_TX_BUFFER_SIZE;
 231              	195 0
 232 01b0 800080D2 		mov	r0, r0, lsr #16
 233 01b4 010040E2 		.loc 1 184 0
 234              		@ lr needed for prologue
 235 01b8 0008A0E1 		.loc 1 195 0
 190:uart.c        **** 
 191:uart.c        ****   return (uint16_t)(space - 1);
 192:uart.c        **** #else
 193:uart.c        ****   return USHRT_MAX;
 194:uart.c        **** #endif
 195:uart.c        **** }
 236              	r
 237 01bc 2008A0E1 	.L21:
 238              		.align	2
 239              	.L20:
 240              		.word	uart0_tx_extract_idx
 241 01c0 1EFF2FE1 		.word	uart0_tx_insert_idx
 242              	.LFE4:
 244              		.align	2
 245 01c4 00000000 		.global	uart0Puts
 247              	uart0Puts:
 248              	.LFB5:
 249              		.loc 1 214 0
 250              		@ args = 0, pretend = 0, frame = 0
 251              		@ frame_needed = 0, uses_anonymous_args = 0
 252              	.LVL13:
 253              		stmfd	sp!, {r4, lr}
 196:uart.c        **** 
 197:uart.c        **** /******************************************************************************
 198:uart.c        ****  *
 199:uart.c        ****  * Function Name: uart0Puts()
 200:uart.c        ****  *
 201:uart.c        ****  * Description:  
 202:uart.c        ****  *    This function writes a NULL terminated 'string' to the UART output
 203:uart.c        ****  *    queue, returning a pointer to the next character to be written.
 204:uart.c        ****  *
 205:uart.c        ****  * Calling Sequence: 
 206:uart.c        ****  *    address of the string
 207:uart.c        ****  *
 208:uart.c        ****  * Returns:
 209:uart.c        ****  *    a pointer to the next character to be written
 210:uart.c        ****  *    (\0 if full string is written)
 211:uart.c        ****  *
 212:uart.c        ****  *****************************************************************************/
 213:uart.c        **** const char *uart0Puts(const char *string)
 214:uart.c        **** {
 254              	4 0
 255              		mov	r4, r0
 256              		b	.L23
 257              	.LVL14:
 258 01cc 10402DE9 	.L24:
 259              		.loc 1 218 0
 260              		add	r4, r4, #1
 261 01d0 0040A0E1 	.LVL15:
 262 01d4 000000EA 	.L23:
 263              		.loc 1 217 0
 264              		ldrb	r3, [r4, #0]	@ zero_extendqisi2
 215:uart.c        ****   register char ch;
 216:uart.c        **** 
 217:uart.c        ****   while ((ch = *string) && (uart0Putch(ch) >= 0))
 218:uart.c        ****     string++;
 265              	bs	r0, r3, #0
 266 01d8 014084E2 		beq	.L25
 267              	.LVL17:
 268              		bl	uart0Putch
 269              	.LVL18:
 270 01dc 0030D4E5 		cmp	r0, #0
 271              		bge	.L24
 272 01e0 000053E2 	.LVL19:
 273 01e4 0200000A 	.L25:
 274              		.loc 1 221 0
 275 01e8 FEFFFFEB 		mov	r0, r4
 276              	.LVL20:
 277 01ec 000050E3 		ldmfd	sp!, {r4, pc}
 278 01f0 F8FFFFAA 	.LFE5:
 280              		.align	2
 219:uart.c        **** 
 220:uart.c        ****   return string;
 221:uart.c        **** }
 281              	ite
 283              	uart0Write:
 284 01f8 1080BDE8 	.LFB6:
 285              		.loc 1 240 0
 286              		@ args = 0, pretend = 0, frame = 0
 287              		@ frame_needed = 0, uses_anonymous_args = 0
 288              	.LVL21:
 289              		stmfd	sp!, {r4, r5, r6, lr}
 290              	.LCFI3:
 291              		.loc 1 240 0
 222:uart.c        **** 
 223:uart.c        **** /******************************************************************************
 224:uart.c        ****  *
 225:uart.c        ****  * Function Name: uart0Write()
 226:uart.c        ****  *
 227:uart.c        ****  * Description:  
 228:uart.c        ****  *    This function writes 'count' characters from 'buffer' to the UART
 229:uart.c        ****  *    output queue.
 230:uart.c        ****  *
 231:uart.c        ****  * Calling Sequence: 
 232:uart.c        ****  *    
 233:uart.c        ****  *
 234:uart.c        ****  * Returns:
 235:uart.c        ****  *    0 on success, -1 if insufficient room, -2 on error
 236:uart.c        ****  *    NOTE: if insufficient room, no characters are written.
 237:uart.c        ****  *
 238:uart.c        ****  *****************************************************************************/
 239:uart.c        **** int uart0Write(const char *buffer, uint16_t count)
 240:uart.c        **** {
 292              	, asl #16
 293              	.LVL22:
 294              		mov	r6, r1, lsr #16
 295              	.LVL23:
 296 01fc 70402DE9 		mov	r5, r0
 297              		.loc 1 242 0
 298              		bl	uart0Space
 299 0200 0118A0E1 	.LVL24:
 300              		cmp	r6, r0
 301 0204 2168A0E1 		mvnhi	r0, #0
 302              		ldmhifd	sp!, {r4, r5, r6, pc}
 303 0208 0050A0E1 		b	.L29
 241:uart.c        **** #ifdef UART0_TX_INT_MODE
 242:uart.c        ****   if (count > uart0Space())
 304              	:
 305 020c FEFFFFEB 		.loc 1 245 0
 306              		mov	r0, #0
 307 0210 000056E1 		ldmfd	sp!, {r4, r5, r6, pc}
 308 0214 0000E083 	.LVL26:
 309 0218 7080BD88 	.L29:
 310 021c 010000EA 		.loc 1 242 0
 311              		mov	r4, r6
 312              	.LVL27:
 243:uart.c        ****     return -1;
 244:uart.c        **** #endif
 245:uart.c        ****   while (count && (uart0Putch(*buffer++) >= 0))
 313              	L33:
 314 0220 0000A0E3 		.loc 1 246 0
 315 0224 7080BDE8 		sub	r3, r4, #1
 316              		mov	r3, r3, asl #16
 317              		mov	r4, r3, lsr #16
 318              	.L32:
 319 0228 0640A0E1 		.loc 1 245 0
 320              		cmp	r4, #0
 321 022c 020000EA 		beq	.L38
 322              		ldrb	r0, [r5], #1	@ zero_extendqisi2
 246:uart.c        ****     count--;
 323              	utch
 324 0230 013044E2 		cmp	r0, #0
 325 0234 0338A0E1 		bge	.L33
 326 0238 2348A0E1 		mvn	r0, #1
 327              		.loc 1 249 0
 328              		ldmfd	sp!, {r4, r5, r6, pc}
 329 023c 000054E3 	.LFE6:
 331 0244 0100D5E4 		.align	2
 332 0248 FEFFFFEB 		.global	uart0TxEmpty
 334 0250 F6FFFFAA 	uart0TxEmpty:
 335 0254 0100E0E3 	.LFB7:
 247:uart.c        **** 
 248:uart.c        ****   return (count ? -2 : 0);
 249:uart.c        **** }
 336              	
 337 0258 7080BDE8 		@ args = 0, pretend = 0, frame = 0
 338              		@ frame_needed = 0, uses_anonymous_args = 0
 339              		@ link register save eliminated.
 340              	.LVL28:
 341              		.loc 1 269 0
 342              		ldr	r3, .L41
 343              		ldrb	r0, [r3, #20]	@ zero_extendqisi2
 344              		and	r0, r0, #96
 250:uart.c        **** 
 251:uart.c        **** /******************************************************************************
 252:uart.c        ****  *
 253:uart.c        ****  * Function Name: uart0TxEmpty()
 254:uart.c        ****  *
 255:uart.c        ****  * Description:
 256:uart.c        ****  *    This function returns the status of the UART transmit data
 257:uart.c        ****  *    registers.
 258:uart.c        ****  *
 259:uart.c        ****  * Calling Sequence: 
 260:uart.c        ****  *    void
 261:uart.c        ****  *
 262:uart.c        ****  * Returns:
 263:uart.c        ****  *    FALSE - either the tx holding or shift register is not empty
 264:uart.c        ****  *   !FALSE - if both the tx holding & shift registers are empty
 265:uart.c        ****  *
 266:uart.c        ****  *****************************************************************************/
 267:uart.c        **** int uart0TxEmpty(void)
 268:uart.c        **** {
 345              	270 0
 346              		cmp	r0, #96
 347              		movne	r0, #0
 348              		moveq	r0, #1
 349              		.loc 1 268 0
 269:uart.c        ****   return (U0LSR & (ULSR_THRE | ULSR_TEMT)) == (ULSR_THRE | ULSR_TEMT);
 350              	 needed for prologue
 351 025c 14309FE5 		.loc 1 270 0
 352 0260 1400D3E5 		bx	lr
 353 0264 600000E2 	.L42:
 270:uart.c        **** }
 354              	ign	2

⌨️ 快捷键说明

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