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

📄 main.lss

📁 rtc code for lpc2148
💻 LSS
📖 第 1 页 / 共 5 页
字号:
 1e4:	e59f30c8 	ldr	r3, [pc, #200]	; 2b4 <.text+0x2b4>
 1e8:	b1e01ca1 	mvnlt	r1, r1, lsr #25
 1ec:	e7cc2003 	strb	r2, [ip, r3]
 1f0:	b2811001 	addlt	r1, r1, #1	; 0x1
 1f4:	e1a03801 	mov	r3, r1, lsl #16
 1f8:	e1a03823 	mov	r3, r3, lsr #16
 1fc:	e5de2014 	ldrb	r2, [lr, #20]
 200:	e1530006 	cmp	r3, r6
 204:	11a0c003 	movne	ip, r3
 208:	e3120001 	tst	r2, #1	; 0x1
 20c:	0a000011 	beq	258 <.text+0x258>
 210:	eaffffeb 	b	1c4 <.text+0x1c4>
 214:	e1550000 	cmp	r5, r0
 218:	0a000009 	beq	244 <.text+0x244>
            {
            U0THR = uart0_tx_buffer[uart0_tx_extract_idx++];
 21c:	e59f3094 	ldr	r3, [pc, #148]	; 2b8 <.text+0x2b8>
 220:	e7d03003 	ldrb	r3, [r0, r3]
 224:	e5c13000 	strb	r3, [r1]
            uart0_tx_extract_idx %= UART0_TX_BUFFER_SIZE;
 228:	e202007f 	and	r0, r2, #127	; 0x7f
 22c:	e59f1078 	ldr	r1, [pc, #120]	; 2ac <.text+0x2ac>
 230:	e5d13014 	ldrb	r3, [r1, #20]
 234:	e3130020 	tst	r3, #32	; 0x20
 238:	e2802001 	add	r2, r0, #1	; 0x1
 23c:	1afffff4 	bne	214 <.text+0x214>
 240:	ea000004 	b	258 <.text+0x258>
 244:	e3a04000 	mov	r4, #0	; 0x0
 248:	ea000002 	b	258 <.text+0x258>
            }
          else
            {
            // no
            uart0_tx_running = 0;       // clear running flag
            break;
            }
          }

        break;
#endif // UART0_TX_INT_MODE

      default:                          // Unknown
        U0LSR;
 24c:	e59f3058 	ldr	r3, [pc, #88]	; 2ac <.text+0x2ac>
 250:	e5d32014 	ldrb	r2, [r3, #20]
        U0RBR;
 254:	e5d33000 	ldrb	r3, [r3]
 258:	e59f304c 	ldr	r3, [pc, #76]	; 2ac <.text+0x2ac>
 25c:	e5d32008 	ldrb	r2, [r3, #8]
 260:	e2223001 	eor	r3, r2, #1	; 0x1
 264:	e2131001 	ands	r1, r3, #1	; 0x1
 268:	1affffc2 	bne	178 <uart0ISR+0x3c>
 26c:	e59f302c 	ldr	r3, [pc, #44]	; 2a0 <.text+0x2a0>
 270:	e5834000 	str	r4, [r3]
 274:	e59f3028 	ldr	r3, [pc, #40]	; 2a4 <.text+0x2a4>
 278:	e1c300b0 	strh	r0, [r3]
 27c:	e59f3024 	ldr	r3, [pc, #36]	; 2a8 <.text+0x2a8>
 280:	e1c3c0b0 	strh	ip, [r3]
        break;
      }
    }

  VICVectAddr = 0x00000000;             // clear this interrupt from the VIC
 284:	e59f3030 	ldr	r3, [pc, #48]	; 2bc <.text+0x2bc>
 288:	e5831030 	str	r1, [r3, #48]
  ISR_EXIT();                           // recover registers and return
 28c:	e8bd0002 	ldmia	sp!, {r1}
 290:	e161f001 	msr	SPSR_c, r1
 294:	e8fd9fff 	ldmia	sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}^
 298:	40000226 	andmi	r0, r0, r6, lsr #4
 29c:	4000008e 	andmi	r0, r0, lr, lsl #1
 2a0:	400001a0 	andmi	r0, r0, r0, lsr #3
 2a4:	40000198 	mulmi	r0, r8, r1
 2a8:	40000190 	mulmi	r0, r0, r1
 2ac:	e000c000 	and	ip, r0, r0
 2b0:	8000007f 	andhi	r0, r0, pc, ror r0
 2b4:	400001a4 	andmi	r0, r0, r4, lsr #3
 2b8:	4000000c 	andmi	r0, r0, ip
 2bc:	fffff000 	undefined instruction 0xfffff000

000002c0 <uart1ISR>:
}
#endif // defined(UART0_TX_INT_MODE) || defined(UART0_RX_INT_MODE)
#endif // UART0_SUPPORT


#if UART1_SUPPORT

#ifdef UART1_RX_INT_MODE
extern uint8_t  uart1_rx_buffer[UART1_RX_BUFFER_SIZE];
extern uint16_t uart1_rx_insert_idx, uart1_rx_extract_idx;
#endif // UART1_RX_INT_MODE

#ifdef UART1_TX_INT_MODE
extern uint8_t  uart1_tx_buffer[UART1_TX_BUFFER_SIZE];
extern uint16_t uart1_tx_insert_idx, uart1_tx_extract_idx;
extern int      uart1_tx_running;
#endif // UART1_TX_INT_MODE

#if defined(UART1_TX_INT_MODE) || defined(UART1_RX_INT_MODE)
/******************************************************************************
 *
 * Function Name: uart1ISR()
 *
 * Description:
 *    This function implements the ISR for UART1.
 *
 * Calling Sequence: 
 *    void
 *
 * Returns:
 *    void
 *
 *****************************************************************************/
void uart1ISR(void)
{
  uint8_t iid;

  // perform proper ISR entry so thumb-interwork works properly
  ISR_ENTRY();
 2c0:	e24ee004 	sub	lr, lr, #4	; 0x4
 2c4:	e92d5fff 	stmdb	sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, lr}
 2c8:	e14f1000 	mrs	r1, SPSR
 2cc:	e92d0002 	stmdb	sp!, {r1}

  // loop until not more interrupt sources
  while (((iid = U1IIR) & UIIR_NO_INT) == 0)
    {
    // identify & process the highest priority interrupt
    switch (iid & UIIR_ID_MASK)
      {
      case UIIR_RLS_INT:                // Receive Line Status
        U1LSR;                          // read LSR to clear
        break;

#ifdef UART1_RX_INT_MODE
      case UIIR_CTI_INT:                // Character Timeout Indicator
      case UIIR_RDA_INT:                // Receive Data Available
        do
          {
          uint16_t temp;

          // calc next insert index & store character
          temp = (uart1_rx_insert_idx + 1) % UART1_RX_BUFFER_SIZE;
          uart1_rx_buffer[uart1_rx_insert_idx] = U1RBR;

          // check for more room in queue
          if (temp != uart1_rx_extract_idx)
 2d0:	e59f3154 	ldr	r3, [pc, #340]	; 42c <.text+0x42c>
 2d4:	e1d360b0 	ldrh	r6, [r3]
            uart1_rx_insert_idx = temp; // update insert index
          }
        while (U1LSR & ULSR_RDR);

        break;
#endif

#ifdef UART1_TX_INT_MODE
      case UIIR_THRE_INT:               // Transmit Holding Register Empty
        while (U1LSR & ULSR_THRE)
          {
          // check if more data to send
          if (uart1_tx_insert_idx != uart1_tx_extract_idx)
 2d8:	e59f3150 	ldr	r3, [pc, #336]	; 430 <.text+0x430>
 2dc:	e1d350b0 	ldrh	r5, [r3]
 2e0:	e59f314c 	ldr	r3, [pc, #332]	; 434 <.text+0x434>
 2e4:	e5934000 	ldr	r4, [r3]
 2e8:	e59f3148 	ldr	r3, [pc, #328]	; 438 <.text+0x438>
 2ec:	e1d300b0 	ldrh	r0, [r3]
 2f0:	e59f3144 	ldr	r3, [pc, #324]	; 43c <.text+0x43c>
 2f4:	e1d3c0b0 	ldrh	ip, [r3]
 2f8:	ea00003b 	b	3ec <.text+0x3ec>
 2fc:	e202300e 	and	r3, r2, #14	; 0xe
 300:	e353000c 	cmp	r3, #12	; 0xc
 304:	979ff103 	ldrls	pc, [pc, r3, lsl #2]
 308:	ea000033 	b	3dc <.text+0x3dc>
 30c:	000003cc 	andeq	r0, r0, ip, asr #7
 310:	000003dc 	ldreqd	r0, [r0], -ip
 314:	000003b4 	streqh	r0, [r0], -r4
 318:	000003dc 	ldreqd	r0, [r0], -ip
 31c:	0000034c 	andeq	r0, r0, ip, asr #6
 320:	000003dc 	ldreqd	r0, [r0], -ip
 324:	00000340 	andeq	r0, r0, r0, asr #6
 328:	000003dc 	ldreqd	r0, [r0], -ip
 32c:	000003dc 	ldreqd	r0, [r0], -ip
 330:	000003dc 	ldreqd	r0, [r0], -ip
 334:	000003dc 	ldreqd	r0, [r0], -ip
 338:	000003dc 	ldreqd	r0, [r0], -ip
 33c:	0000034c 	andeq	r0, r0, ip, asr #6
 340:	e59f30f8 	ldr	r3, [pc, #248]	; 440 <.text+0x440>
 344:	e5d33014 	ldrb	r3, [r3, #20]
 348:	ea000027 	b	3ec <.text+0x3ec>
 34c:	e59f10f0 	ldr	r1, [pc, #240]	; 444 <.text+0x444>
 350:	e28c3001 	add	r3, ip, #1	; 0x1
 354:	e0031001 	and	r1, r3, r1
 358:	e3510000 	cmp	r1, #0	; 0x0
 35c:	e59fe0dc 	ldr	lr, [pc, #220]	; 440 <.text+0x440>
 360:	b2411001 	sublt	r1, r1, #1	; 0x1
 364:	b1e01c81 	mvnlt	r1, r1, lsl #25
 368:	e5de2000 	ldrb	r2, [lr]
 36c:	e59f30d4 	ldr	r3, [pc, #212]	; 448 <.text+0x448>
 370:	b1e01ca1 	mvnlt	r1, r1, lsr #25
 374:	e7cc2003 	strb	r2, [ip, r3]
 378:	b2811001 	addlt	r1, r1, #1	; 0x1
 37c:	e1a03801 	mov	r3, r1, lsl #16
 380:	e1a03823 	mov	r3, r3, lsr #16
 384:	e5de2014 	ldrb	r2, [lr, #20]
 388:	e1530006 	cmp	r3, r6
 38c:	11a0c003 	movne	ip, r3
 390:	e3120001 	tst	r2, #1	; 0x1
 394:	0a000014 	beq	3ec <.text+0x3ec>
 398:	eaffffeb 	b	34c <.text+0x34c>
 39c:	e1550000 	cmp	r5, r0
 3a0:	0a00000b 	beq	3d4 <.text+0x3d4>
            {
            U1THR = uart1_tx_buffer[uart1_tx_extract_idx++];
 3a4:	e59f30a0 	ldr	r3, [pc, #160]	; 44c <.text+0x44c>
 3a8:	e7d03003 	ldrb	r3, [r0, r3]
 3ac:	e5c13000 	strb	r3, [r1]
            uart1_tx_extract_idx %= UART1_TX_BUFFER_SIZE;
 3b0:	e202007f 	and	r0, r2, #127	; 0x7f
 3b4:	e59f1084 	ldr	r1, [pc, #132]	; 440 <.text+0x440>
 3b8:	e5d13014 	ldrb	r3, [r1, #20]
 3bc:	e3130020 	tst	r3, #32	; 0x20
 3c0:	e2802001 	add	r2, r0, #1	; 0x1
 3c4:	1afffff4 	bne	39c <.text+0x39c>
 3c8:	ea000007 	b	3ec <.text+0x3ec>
            }
          else
            {
            // no
            uart1_tx_running = 0;       // clear running flag
            break;
            }
          }

        break;
#endif // UART1_TX_INT_MODE

      case UIIR_MS_INT:                 // MODEM Status
        U1MSR;                          // read MSR to clear
 3cc:	e59f306c 	ldr	r3, [pc, #108]	; 440 <.text+0x440>
 3d0:	ea000004 	b	3e8 <.text+0x3e8>
 3d4:	e3a04000 	mov	r4, #0	; 0x0
 3d8:	ea000003 	b	3ec <.text+0x3ec>
        break;

      default:                          // Unknown
        U1LSR;
 3dc:	e59f305c 	ldr	r3, [pc, #92]	; 440 <.text+0x440>
 3e0:	e5d32014 	ldrb	r2, [r3, #20]
        U1RBR;
 3e4:	e5d32000 	ldrb	r2, [r3]
        U1MSR;
 3e8:	e5d33018 	ldrb	r3, [r3, #24]
 3ec:	e59f304c 	ldr	r3, [pc, #76]	; 440 <.text+0x440>
 3f0:	e5d32008 	ldrb	r2, [r3, #8]
 3f4:	e2223001 	eor	r3, r2, #1	; 0x1
 3f8:	e2131001 	ands	r1, r3, #1	; 0x1
 3fc:	1affffbe 	bne	2fc <uart1ISR+0x3c>
 400:	e59f302c 	ldr	r3, [pc, #44]	; 434 <.text+0x434>
 404:	e5834000 	str	r4, [r3]
 408:	e59f3028 	ldr	r3, [pc, #40]	; 438 <.text+0x438>
 40c:	e1c300b0 	strh	r0, [r3]
 410:	e59f3024 	ldr	r3, [pc, #36]	; 43c <.text+0x43c>
 414:	e1c3c0b0 	strh	ip, [r3]
        break;
      }
    }

  VICVectAddr = 0x00000000;             // clear this interrupt from the VIC
 418:	e59f3030 	ldr	r3, [pc, #48]	; 450 <.text+0x450>
 41c:	e5831030 	str	r1, [r3, #48]
  ISR_EXIT();                           // recover registers and return
 420:	e8bd0002 	ldmia	sp!, {r1}
 424:	e161f001 	msr	SPSR_c, r1
 428:	e8fd9fff 	ldmia	sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, pc}^
 42c:	4000019c 	mulmi	r0, ip, r1
 430:	4000019a 	mulmi	r0, sl, r1
 434:	40000194 	mulmi	r0, r4, r1
 438:	40000224 	andmi	r0, r0, r4, lsr #4
 43c:	4000008c 	andmi	r0, r0, ip, lsl #1
 440:	e0010000 	and	r0, r1, r0
 444:	8000007f 	andhi	r0, r0, pc, ror r0
 448:	40000110 	andmi	r0, r0, r0, lsl r1
 44c:	40000090 	mulmi	r0, r0, r0
 450:	fffff000 	undefined instruction 0xfffff000

00000454 <enableFIQ>:

static inline unsigned __get_cpsr(void)
{
  unsigned long retval;
  asm volatile (" mrs  %0, cpsr" : "=r" (retval) : /* no inputs */  );
 454:	e10f0000 	mrs	r0, CPSR
  return retval;
}

static inline void __set_cpsr(unsigned val)
{
  asm volatile (" msr  cpsr, %0" : /* no outputs */ : "r" (val)  );
 458:	e3c03040 	bic	r3, r0, #64	; 0x40
 45c:	e129f003 	msr	CPSR_fc, r3
}

unsigned disableIRQ(void)
{
  unsigned _cpsr;

  _cpsr = __get_cpsr();
  __set_cpsr(_cpsr | IRQ_MASK);
  return _cpsr;
}

unsigned restoreIRQ(unsigned oldCPSR)
{
  unsigned _cpsr;

  _cpsr = __get_cpsr();
  __set_cpsr((_cpsr & ~IRQ_MASK) | (oldCPSR & IRQ_MASK));
  return _cpsr;
}

unsigned enableIRQ(void)
{
  unsigned _cpsr;

  _cpsr = __get_cpsr();
  __set_cpsr(_cpsr & ~IRQ_MASK);
  return _cpsr;
}

unsigned disableFIQ(void)
{
  unsigned _cpsr;

  _cpsr = __get_cpsr();
  __set_cpsr(_cpsr | FIQ_MASK);
  return _cpsr;
}

unsigned restoreFIQ(unsigned oldCPSR)
{
  unsigned _cpsr;

  _cpsr = __get_cpsr();
  __set_cpsr((_cpsr & ~FIQ_MASK) | (oldCPSR & FIQ_MASK));
  return _cpsr;
}

unsigned enableFIQ(void)
{
  unsigned _cpsr;

  _cpsr = __get_cpsr();
  __set_cpsr(_cpsr & ~FIQ_MASK);
  return _cpsr;
}
 460:	e12fff1e 	bx	lr

00000464 <disableIRQ>:
 464:	e10f0000 	mrs	r0, CPSR
 468:	e3803080 	orr	r3, r0, #128	; 0x80
 46c:	e129f003 	msr	CPSR_fc, r3
 470:	e12fff1e 	bx	lr

00000474 <restoreIRQ>:
 474:	e10f2000 	mrs	r2, CPSR
 478:	e2000080 	and	r0, r0, #128	; 0x80
 47c:	e3c23080 	bic	r3, r2, #128	; 0x80
 480:	e1833000 	orr	r3, r3, r0
 484:	e129f003 	msr	CPSR_fc, r3
 488:	e1a00002 	mov	r0, r2
 48c:	e12fff1e 	bx	lr

00000490 <enableIRQ>:
 490:	e10f0000 	mrs	r0, CPSR
 494:	e3c03080 	bic	r3, r0, #128	; 0x80
 498:	e129f003 	msr	CPSR_fc, r3
 49c:	e12fff1e 	bx	lr

000004a0 <disableFIQ>:
 4a0:	e10f0000 	mrs	r0, CPSR
 4a4:	e3803040 	orr	r3, r0, #64	; 0x40
 4a8:	e129f003 	msr	CPSR_fc, r3
 4ac:	e12fff1e 	bx	lr

000004b0 <restoreFIQ>:
 4b0:	e10f2000 	mrs	r2, CPSR
 4b4:	e2000040 	and	r0, r0, #64	; 0x40
 4b8:	e3c23040 	bic	r3, r2, #64	; 0x40
 4bc:	e1833000 	orr	r3, r3, r0
 4c0:	e129f003 	msr	CPSR_fc, r3
 4c4:	e1a00002 	mov	r0, r2
 4c8:	e12fff1e 	bx	lr

000004cc <rtc0>:

}
/*************************************************************/
void rtc0(void)

⌨️ 快捷键说明

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