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

📄 adccont.lst

📁 ADuC7020/26是ADI模拟公司开发的ARM7TDMI内核
💻 LST
📖 第 1 页 / 共 2 页
字号:
ARM COMPILER V2.32c,  ADCcont                                                              10/09/05  18:11:23  PAGE 1   


ARM COMPILER V2.32c, COMPILATION OF MODULE ADCcont
OBJECT MODULE PLACED IN ADCcont.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe ADCcont.c THUMB DEBUG TABS(4) 

stmt  level    source

    1          /*********************************************************************
    2          
    3           Author        : ADI - Apps            www.analog.com/MicroConverter
    4          
    5           Date          : Sept. 2005
    6          
    7           File          : ADCcont.c
    8          
    9           Hardware      : Applicable to ADuC702x rev H or I silicon
   10                           Currently targetting ADuC7026.
   11          
   12           Description   : Performs 1024 continuous ADC conversions on ADC0,
   13                           store the results in SRAM and send them through UART
   14                           at 9600bps when the 1024 conversions are done
   15                  
   16          *********************************************************************/
   17          #include <ADuC7026.h>
   18          
   19          void senddata(short);
   20          void ADCpoweron(int);
   21          char hex2ascii(char);
   22          
   23          int main (void)  {
   24   1      
   25   1          unsigned short ADCDATA[32];
   26   1          int i;
   27   1      
   28   1          ADCpoweron(20000);                  // power on ADC
   29   1                                                      
   30   1          ADCCP = 0x00;                       // select ADC channel 0
   31   1          REFCON = 0x01;                      // internal 2.5V reference. 2.5V on Vref pin
   32   1      
   33   1          GP0CON = 0x100000;                  // Enable ADCbusy on P0.5
   34   1      
   35   1          GP4DAT = 0x04000000;                // P4.2 configured as an output. LED is turned on   
   36   1      
   37   1          GP1CON = 0x011;                     // Setup tx & rx pins on P1.0 and P1.1
   38   1         
   39   1         // Setting up UART at 9600 (CD=0)
   40   1          COMCON0 = 0x80;                     // Setting DLAB
   41   1          COMDIV0 = 0x88;                     
   42   1          COMDIV1 = 0x00;
   43   1          COMCON0 = 0x07;                     // Clearing DLAB
   44   1      
   45   1          ADCCON = 0x4E4;                 // ADC Config: fADC/2, acq. time = 2 clocks => ADC Speed = 1MSPS
   46   1      
   47   1          while(1)
   48   1          {                                   // start continuous conversion
   49   2              for (i=0; i <1024; i++) {
   50   3                  while (!ADCSTA){}           // wait for end of conversion
   51   3                  ADCDATA[i] = (ADCDAT >> 16);
   52   3                  if (ADCCP == 0) ADCCP = 1;  // change channel
   53   3                  else ADCCP = 0;
   54   3              }
   55   2              GP4DAT ^= 0x00040000;           // Complement P4.2
   56   2              for (i=0; i <1024; i++) senddata (ADCDATA[i]);
   57   2              GP4DAT ^= 0x00040000;           // Complement P4.2
   58   2          }
   59   1      }
ARM COMPILER V2.32c,  ADCcont                                                              10/09/05  18:11:23  PAGE 2   

   60          
   61          void senddata(short to_send)
   62          {
   63   1          while(!(0x020==(COMSTA0 & 0x020))){}
   64   1              COMTX = 0x0A;                       // output LF 
   65   1          while(!(0x020==(COMSTA0 & 0x020))){}
   66   1              COMTX = 0x0D;                       // output CR 
   67   1          while(!(0x020==(COMSTA0 & 0x020))){}
   68   1              COMTX = hex2ascii ((to_send >> 8) & 0x0F);
   69   1          while(!(0x020==(COMSTA0 & 0x020))){}
   70   1              COMTX = hex2ascii ((to_send >> 4) & 0x0F);                      
   71   1          while(!(0x020==(COMSTA0 & 0x020))){}
   72   1              COMTX = hex2ascii (to_send & 0x0F);                         
   73   1      }
   74          
   75          
   76          char hex2ascii(char toconv)
   77          {
   78   1          if (toconv<0x0A) 
   79   1          {
   80   2              toconv += 0x30;
   81   2          }
   82   1          else 
   83   1          {
   84   2              toconv += 0x37;
   85   2          }
   86   1          
   87   1          return (toconv);
   88   1      }
   89          
   90          void ADCpoweron(int time)
   91          {
   92   1          ADCCON = 0x20;                      // power-on the ADC
   93   1          while (time >=0)                    // wait for ADC to be fully powered on
   94   1          time--;
   95   1      }
   96          
ARM COMPILER V2.32c,  ADCcont                                                              10/09/05  18:11:23  PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN NUMBER (__startup)



*** PUBLICS:
 PUBLIC         senddata?T
 PUBLIC         ADCpoweron?T
 PUBLIC         hex2ascii?T
 PUBLIC         main



*** CODE SEGMENT '?PR?main?ADCcont':
   23: int main (void)  {
 00000000  B500      PUSH        {LR}
 00000002  B090      SUB         R13,#0x40
 00000004            ; SCOPE-START
   28:     ADCpoweron(20000);                  // power on ADC
 00000004  4800      LDR         R0,=0x4E20
 00000006  F7FF      BL          ADCpoweron?T  ; T=0x0001  (1)
 00000008  FFFB      BL          ADCpoweron?T  ; T=0x0001  (2)
   30:      ADCCP = 0x00;                      // select ADC channel 0
 0000000A  2100      MOV         R1,#0x0
 0000000C  4800      LDR         R0,=0xFFFF0504
 0000000E  6001      STR         R1,[R0,#0x0]
   31:     REFCON = 0x01;                      // internal 2.5V reference. 2.5V on Vref pin
 00000010  2101      MOV         R1,#0x1
 00000012  4800      LDR         R0,=0xFFFF048C
 00000014  6001      STR         R1,[R0,#0x0]
   33:     GP0CON = 0x100000;                  // Enable ADCbusy on P0.5
 00000016  4800      LDR         R1,=0x100000
 00000018  4800      LDR         R0,=0xFFFFF400
 0000001A  6001      STR         R1,[R0,#0x0]
   35:     GP4DAT = 0x04000000;                // P4.2 configured as an output. LED is turned on   
 0000001C  4800      LDR         R1,=0x4000000
 0000001E  4800      LDR         R0,=0xFFFFF460
 00000020  6001      STR         R1,[R0,#0x0]
   37:     GP1CON = 0x011;                     // Setup tx & rx pins on P1.0 and P1.1
 00000022  2111      MOV         R1,#0x11
 00000024  4800      LDR         R0,=0xFFFFF404
 00000026  6001      STR         R1,[R0,#0x0]
   40:     COMCON0 = 0x80;                     // Setting DLAB
 00000028  2180      MOV         R1,#0x80
 0000002A  4800      LDR         R0,=0xFFFF070C
 0000002C  6001      STR         R1,[R0,#0x0]
   41:     COMDIV0 = 0x88;                     
 0000002E  2188      MOV         R1,#0x88
 00000030  4800      LDR         R0,=0xFFFF0700
 00000032  6001      STR         R1,[R0,#0x0]
   42:        COMDIV1 = 0x00;
 00000034  2100      MOV         R1,#0x0
 00000036  4800      LDR         R0,=0xFFFF0704
 00000038  6001      STR         R1,[R0,#0x0]
   43:        COMCON0 = 0x07;                      // Clearing DLAB
 0000003A  2107      MOV         R1,#0x7
 0000003C  4800      LDR         R0,=0xFFFF070C
 0000003E  6001      STR         R1,[R0,#0x0]
   45:     ADCCON = 0x4E4;                 // ADC Config: fADC/2, acq. time = 2 clocks => ADC Speed = 1MSPS
 00000040  4800      LDR         R1,=0x4E4
 00000042  4800      LDR         R0,=0xFFFF0500
 00000044  6001      STR         R1,[R0,#0x0]
   49:         for (i=0; i <1024; i++) {
 00000046          L_9:
 00000046  2400      MOV         R4,#0x0
 00000048  ---- Variable 'i' assigned to Register 'R4' ----
   50:             while (!ADCSTA){}           // wait for end of conversion
ARM COMPILER V2.32c,  ADCcont                                                              10/09/05  18:11:23  PAGE 4   

 00000048          L_13:
 00000048          L_10:
 00000048  4800      LDR         R0,=0xFFFF050C
 0000004A  6800      LDR         R0,[R0,#0x0]
 0000004C  2800      CMP         R0,#0x0
 0000004E  D0FB      BEQ         L_10  ; T=0x00000048
   51:             ADCDATA[i] = (ADCDAT >> 16);
 00000050  4800      LDR         R0,=0xFFFF0510
 00000052  6800      LDR         R0,[R0,#0x0]
 00000054  0C00      LSR         R0,R0,#0x10
 00000056  1C22      MOV         R2,R4 ; i
 00000058  0052      LSL         R2,R2,#0x1 ; i
 0000005A  A900      ADD         R1,R13,#0x0
 0000005C  5288      STRH        R0,[R1,R2]
   52:             if (ADCCP == 0) ADCCP = 1;  // change channel
 0000005E  4800      LDR         R0,=0xFFFF0504
 00000060  6800      LDR         R0,[R0,#0x0]
 00000062  2800      CMP         R0,#0x0
 00000064  D103      BNE         L_14  ; T=0x0000006E
 00000066  2101      MOV         R1,#0x1
 00000068  4800      LDR         R0,=0xFFFF0504
 0000006A  6001      STR         R1,[R0,#0x0]
 0000006C  E002      B           L_5  ; T=0x00000074
 0000006E          L_14:
   53:             else ADCCP = 0;
 0000006E  2100      MOV         R1,#0x0

⌨️ 快捷键说明

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