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

📄 test.lst

📁 由keil软件调试的串口中断程序[IRQ中断]
💻 LST
📖 第 1 页 / 共 2 页
字号:
ARM COMPILER V2.53,  test                                                                  12/07/06  14:50:21  PAGE 1   


ARM COMPILER V2.53, COMPILATION OF MODULE test
OBJECT MODULE PLACED IN .\obj\test.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe test.c THUMB BROWSE DEBUG PRINT(.\LST\TEST.LST) TABS(4) OBJECT(.\obj\test.ob
                    -j) 

stmt  level    source

    1          #include <LPC214X.H>
    2          
    3          /* System configuration: Fosc, Fcclk, Fcco, Fpclk must be defined */
    4          /* Crystal frequence,10MHz~25MHz should be the same as actual status. */
    5          #define Fosc    12000000
    6          
    7          /* System frequence,should be (1~32)multiples of Fosc,and should be equal or 
    8          less than 60MHz. */
    9          #define Fcclk   (Fosc * 5)
   10          
   11          /* CCO frequence,should be 2/4/8/16 multiples of Fcclk, ranged from 156MHz to 
   12          320MHz. */
   13          #define Fcco    (Fcclk * 4)
   14          
   15          /* VPB clock frequence , must be 1/2/4 multiples of (Fcclk / 4). */
   16          #define Fpclk   (Fcclk / 4) * 1
   17          
   18          
   19          unsigned char rcv_buf[8];       // UART0数据接收缓冲区
   20          unsigned char rcv_new;          // 接收新数据标志
   21          /****************************************************************************
   22          * 名称:IRQ_UART0()
   23          * 功能:串口UART0接收中断。
   24          * 入口参数:无
   25          * 出口参数:无
   26          ****************************************************************************/
   27          void  IRQ_UART0(void) __irq 
   28          {  unsigned int  i;
   29   1         
   30   1         
   31   1         //i = 0;
   32   1         if( 0x04==(U0IIR&0x0F) )
   33   1         { rcv_new = 1;        // 设置接收到新的数据标志
   34   2        // IODIR = SPI_IOCON | LED1CON;
   35   2         for(i=0; i<8; i++)
   36   2         { 
   37   3           rcv_buf[i] = U0RBR;                        // 读取FIFO的数据,并清除中断标志
   38   3         }
   39   2          }
   40   1         VICVectAddr = 0x00;                          // 中断处理结束
   41   1      }               
   42          
   43          
   44          /****************************************************************************
   45          * 名称:SendByte()
   46          * 功能:向串口发送字节数据。
   47          * 入口参数:data                要发送的数据
   48          * 出口参数:无
   49          ****************************************************************************/
   50          void  SendByte(unsigned char data)
   51          {  
   52   1         U0THR = data;                                // 发送数据
   53   1         while( (U0LSR & 0x20)==0 );                    // 等待数据发送
   54   1      }
   55          
   56          
   57          /****************************************************************************
   58          * 名称:ISendBuf()
ARM COMPILER V2.53,  test                                                                  12/07/06  14:50:21  PAGE 2   

   59          * 功能:将缓冲区的数据发送回主机,并等待发送完毕。
   60          * 入口参数:无
   61          * 出口参数:无
   62          ****************************************************************************/
   63          void  ISendBuf(void)
   64          {  unsigned char  i;
   65   1        
   66   1         //i = 0;
   67   1         for(i=0; i<8; i++) 
   68   1          SendByte(rcv_buf[i]);
   69   1          i='\n';
   70   1          SendByte(i);
   71   1      
   72   1         //while( (U0LSR & 0x20)==0 );                    // 等待数据发送
   73   1      }               
   74                  
   75                  
   76                  
   77          /****************************************************************************
   78          * 名称:UART0_Ini()
   79          * 功能:初始化串口0。设置其工作模式及波特率。
   80          * 入口参数:baud                波特率
   81          *          set          模式设置(UARTMODE数据结构)
   82          * 出口参数:返回值为1时表示初化成功,为0表除参数出错
   83          ****************************************************************************/
   84          unsigned char  UART0_Ini(unsigned int baud)
   85          {  
   86   1         unsigned long  bak;
   87   1         
   88   1         /* 参数过滤 */
   89   1       /*  if( (0==baud)||(baud>115200) ) return(0);
   90   1         if( (set.datab<5)||(set.datab>8) ) return(0);
   91   1         if( (0==set.stopb)||(set.stopb>2) ) return(0);
   92   1         if( set.parity>4 ) return(0);
   93   1        */
   94   1         /* 设置串口波特率 */
   95   1         U0LCR = 0x80;                        // DLAB位置1
   96   1         bak = (Fpclk / 16)/baud;
   97   1         U0DLM = bak / 256;
   98   1         U0DLL = bak % 256;
   99   1         U0LCR = 0x83;               /* 8 bits, no Parity, 1 Stop bit    */
  100   1         
  101   1          U0LCR = 0x03;               /* DLAB = 0                         */
  102   1      //    U0FCR = 0x07;     /* Enable and reset TX and RX FIFO. */
  103   1      
  104   1         /* 设置串口模式 */
  105   1      /*   bak = set.datab-5;                   // 设置字长度
  106   1         if(2==set.stopb) bak |= 0x04;        // 判断是否为2位停止位  
  107   1         if(0!=set.parity) set.parity = set.parity-1;
  108   1         bak |= set.parity;                   // 设置奇偶校验
  109   1         U0LCR = bak;
  110   1        */ 
  111   1         return(1);
  112   1      }
  113          
  114          
  115          
  116          
  117          int  main(void)
  118          {  
  119   1      //   unsigned char  i;   
  120   1         //UARTMODE  uart0_set; 
  121   1      
  122   1      
  123   1         
  124   1      
ARM COMPILER V2.53,  test                                                                  12/07/06  14:50:21  PAGE 3   

  125   1         PINSEL0 = 0x00000005;  // 设置所有管脚连接GPIO
  126   1         PINSEL1 = 0x00000000;
  127   1         
  128   1         rcv_new = 0;
  129   1         
  130   1         //uart0_set.datab = 8;                 // 8位数据位
  131   1        // uart0_set.stopb = 1;                 // 1位停止位
  132   1        // uart0_set.parity = 0;                // 无奇偶校验
  133   1         UART0_Ini(115200);          // 初始化串口模式
  134   1         
  135   1         U0FCR = 0x81;                        // 使能FIFO,并设置触发点为8字节
  136   1         //U0FCR = 0x00;                        //关闭FIFO 设置触发为1字节
  137   1         U0IER = 0x01;                        // 允许RBR中断,即接收中断
  138   1         
  139   1         /* 设置中断允许 */
  140   1         VICIntSelect = 0x00000000;           // 设置所有通道为IRQ中断
  141   1         VICVectCntl0 = 0x26;                 // UART0中断通道分配到IRQ slot 0,即优先级最高
  142   1         VICVectAddr0 = (int)IRQ_UART0;       // 设置UART0向量地址
  143   1         VICIntEnable = 0x00000040;           // 使能UART0中断
  144   1      
  145   1         while(1) 
  146   1         {  
  147   2               if(1==rcv_new)
  148   2                { 
  149   3               ISendBuf();                     // 将接收到的数据发送回主机
  150   3                  rcv_new = 0;  
  151   3                }
  152   2           
  153   2           
  154   2         }
  155   1         return 0;
  156   1      }
  157          
  158          
ARM COMPILER V2.53,  test                                                                  12/07/06  14:50:21  PAGE 4   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE16 (?C?UDIV?T)
 EXTERN NUMBER (__startup)



*** PUBLICS:
 PUBLIC         IRQ_UART0?A
 PUBLIC         SendByte?T
 PUBLIC         ISendBuf?T
 PUBLIC         UART0_Ini?T
 PUBLIC         main
 PUBLIC         rcv_buf
 PUBLIC         rcv_new



*** DATA SEGMENT '?DT0?test':
 00000000          rcv_buf:
 00000000            DS          8
 00000008          rcv_new:
 00000008            DS          1



*** CODE SEGMENT '?PR?IRQ_UART0?A?test':
   27: void  IRQ_UART0(void) __irq 
 00000000  E92D000F  STMDB       R13!,{R0-R3}
   28: {  unsigned int  i;
 00000004            ; SCOPE-START
   32:    if( 0x04==(U0IIR&0x0F) )
 00000004  E5100000  LDR         R0,=0xE000C008
 00000008  E5900000  LDR         R0,[R0,#0x0]
 0000000C  E200000F  AND         R0,R0,#0x000F
 00000010  E3500004  CMP         R0,#0x0004
 00000014  1A00000C  BNE         L_1  ; Targ=0x4C
   33:    { rcv_new = 1;        // 设置接收到新的数据标志
 00000018  E3A01001  MOV         R1,#0x1
 0000001C  E5100000  LDR         R0,=rcv_new ; rcv_new
 00000020  E5C01000  STRB        R1,[R0,#0x0] ; rcv_new
   35:    for(i=0; i<8; i++)
 00000024  E3A00000  MOV         R0,#0x0
 00000028  ---- Variable 'i' assigned to Register 'R0' ----

⌨️ 快捷键说明

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