zch952102 发表于 2013-5-27 17:17:34

串口中断

我用IAR Embedded Workbench for ARM 6.10软件编写串口中断程序
设置STM32为串口接收中断,串口在接收到PC机数据后,产生中断,并将数据发回PC机。
将程序下载到STM32上全速运行的话,接收及返回给PC机的数据均是正确的。
现在我想看STM32串口中断的运行过程,所以采用单步运行方式,进入串口中断程序后,再单步运行至出串口中断,
此时程序不知运行到哪里去了。这是为什么?   我的中断程序很简单,如下:
void USART1_IRQHandler(void)
{
  asm("nop");  
  asm("nop");
 
  u8 t=USART1->SR;
  u8 i=USART1->DR;
  USART1->DR=i+1;
  u8 p=USART1->SR;
  asm("nop");  
  asm("nop");
  asm("nop");  
  asm("nop");
}
另外有个问题:
我查看DISASSEMBLY 窗口对上中断程序的译码时,没有看到有PUSH指令,其内容如下:

USART1_IRQHandler:
    0x800017c: 0xbf00         NOP
  asm("nop");
    0x800017e: 0xbf00         NOP
  u8 t=USART1->SR;
    0x8000180: 0xf8df 0x04b8  LDR.W     r0, ??DataTable10_1     ; USART1_SR
    0x8000184: 0x8800         LDRH      r0,
  u8 i=USART1->DR;
    0x8000186: 0xf8df 0x14b8  LDR.W     r1, ??DataTable10_2     ; USART1_DR
    0x800018a: 0x8809         LDRH      r1,
  USART1->DR=i+1;
    0x800018c: 0xb2c9         UXTB      r1, r1
    0x800018e: 0x1c4a         ADDS      r2, r1, #1
    0x8000190: 0xf8df 0x34ac  LDR.W     r3, ??DataTable10_2     ; USART1_DR
    0x8000194: 0x801a         STRH      r2,
  u8 p=USART1->SR;
    0x8000196: 0xf8df 0x24a4  LDR.W     r2, ??DataTable10_1     ; USART1_SR
    0x800019a: 0x8812         LDRH      r2,
  asm("nop");  
    0x800019c: 0xbf00         NOP
  asm("nop");
    0x800019e: 0xbf00         NOP
  asm("nop");  
    0x80001a0: 0xbf00         NOP
  asm("nop");
    0x80001a2: 0xbf00         NOP
}
    0x80001a4: 0x4770         BX        lr
麻烦高手指教
 

zch952102 发表于 2013-5-28 15:59:24

回复:串口中断

自己顶一个
页: [1]
查看完整版本: 串口中断