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

📄 test.lst

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

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

  125          
  126          
  127          
  128          
  129          int  main(void)
  130          {  
  131   1      //   unsigned char  i;   
  132   1         //UARTMODE  uart0_set; 
  133   1      
  134   1      
  135   1         
  136   1      
  137   1         PINSEL0 = 0x00000005;  // 设置所有管脚连接GPIO
  138   1         PINSEL1 = 0x00000000;
  139   1         
  140   1         rcv_new = 0;
  141   1         
  142   1         //uart0_set.datab = 8;                 // 8位数据位
  143   1        // uart0_set.stopb = 1;                 // 1位停止位
  144   1        // uart0_set.parity = 0;                // 无奇偶校验
  145   1         UART0_Ini(115200);          // 初始化串口模式
  146   1         
  147   1         U0FCR = 0x81;                        // 使能FIFO,并设置触发点为8字节
  148   1         //U0FCR = 0x00;                        //关闭FIFO 设置触发为1字节
  149   1         U0IER = 0x01;                        // 允许RBR中断,即接收中断
  150   1         
  151   1         /* 设置中断允许 */
  152   1         VICIntSelect = 0x00000000;           // 设置所有通道为IRQ中断
  153   1         VICVectCntl0 = 0x26;                 // UART0中断通道分配到IRQ slot 0,即优先级最高
  154   1         VICVectAddr0 = (int)IRQ_UART0;       // 设置UART0向量地址
  155   1         VICIntEnable = 0x00000040;           // 使能UART0中断
  156   1      
  157   1         while(1) 
  158   1         {  
  159   2               if(1==rcv_new)
  160   2                { 
  161   3               ISendBuf();                     // 将接收到的数据发送回主机
  162   3                  rcv_new = 0;  
  163   3                }
  164   2           
  165   2           
  166   2         }
  167   1         return 0;
  168   1      }
  169          
  170          
ARM COMPILER V2.53,  test                                                                  26/07/07  15:56:53  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':
   39: void  IRQ_UART0(void) __irq 
 00000000  E92D000F  STMDB       R13!,{R0-R3}
   40: {  unsigned int  i;
 00000004            ; SCOPE-START
   44:    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
   45:    { rcv_new = 1;        // 设置接收到新的数据标志

⌨️ 快捷键说明

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