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

📄 adc.lst

📁 uCOS在LPC213X上的移植。适合ARM嵌入式系统初学者。
💻 LST
字号:
ARM COMPILER V2.50a,  ADC                                                                  25/08/06  23:22:56  PAGE 1   


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

stmt  level    source

    1          /**********************************************************************
    2            ADC.c file
    3            LPC213X的ADC函数
    4            作者:Computer-lov
    5            建立日期:2006-3-25
    6            修改日期:2006-3-25
    7            最后修改时间:2006-08-25
    8            版本:V1.0
    9            版权所有,盗版必究。
   10            Copyright(C) Computer-lov 2006-2016
   11            All rights reserved
   12          **********************************************************************/
   13          
   14          
   15          #include "CPU.H"
   16          
   17          #include "My_type.h"
   18          #include "ADC.h"
   19          #include "KEYS.H"
   20          
   21          ////////////////////////由软件启动一次转换,并将ADC结果返回//////////////////////////
   22          uint16 ADC_software_conversion(void)
   23          {
   24   1       uint16 result;
   25   1      
   26   1       AD0CR |= 1<<24;            //开始启动一次转换
   27   1       while((AD0DR & 0x80000000)==0);       //等待转换完成
   28   1       AD0CR |= 1<<24;            //再次启动一次转换
   29   1       while((AD0DR & 0x80000000)==0);       //等待转换完成
   30   1      
   31   1       result=(AD0DR>>6)&0x3FF;              //读取结果
   32   1       return result;             //返回结果
   33   1      }
   34          /////////////////////////////////////////////////////////////////////////////////////
   35          
   36          /////////////////////////////ADC校准/////////////////////////////////////////////////
   37          void ADC_calibration(void)
   38          {
   39   1       //LPC213x的ADC没有校准功能。
   40   1      }
   41          //////////////////////////////////////////////////////////////////////////////////
   42          
   43          ////////////////////////////ADC初始化/////////////////////////////////////////////
   44          void ADC_init(void)
   45          {
   46   1       //将P0.30连接到AD0.3
   47   1       PINSEL1 &= ~0x20000000;
   48   1       PINSEL1 |=  0x10000000;
   49   1       
   50   1       //ADC模块设置
   51   1       AD0CR=(1<<3)|(55<<8)|(1<<21)|(1<<24);
   52   1       while((AD0DR & 0x80000000)==0);       //等待转换完成
   53   1      }
   54          //////////////////////////////////////////////////////////////////////////////////
   55          
   56          
   57          //////////////////////////选择通道ch,启动转换,并将ADC结果返回///////////////////
   58          uint16 read_ADC(uint8 ch)
   59          {
ARM COMPILER V2.50a,  ADC                                                                  25/08/06  23:22:56  PAGE 2   

   60   1       //设置通道
   61   1       AD0CR &= ~0xFF;
   62   1       AD0CR |= (1<<ch);
   63   1       return ADC_software_conversion();
   64   1      }
   65          //////////////////////////////////////////////////////////////////////////////////
   66          
ARM COMPILER V2.50a,  ADC                                                                  25/08/06  23:22:56  PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** PUBLICS:
 PUBLIC         ADC_init?T
 PUBLIC         read_ADC?T
 PUBLIC         ADC_software_conversion?T
 PUBLIC         ADC_calibration?T



*** CODE SEGMENT '?PR?ADC_software_conversion?T?ADC':
   23: {
 00000000            ; SCOPE-START
   26:  AD0CR |= 1<<24;            //开始启动一次转换
 00000000  4800      LDR         R2,=0x1000000
 00000002  4800      LDR         R0,=0xE0034000
 00000004  6801      LDR         R1,[R0,#0x0]
 00000006  4311      ORR         R1,R2
 00000008  6001      STR         R1,[R0,#0x0]
   27:  while((AD0DR & 0x80000000)==0);       //等待转换完成
 0000000A          L_1:
 0000000A  4800      LDR         R0,=0xE0034004
 0000000C  6800      LDR         R0,[R0,#0x0]
 0000000E  4800      LDR         R1,=0x80000000
 00000010  4208      TST         R0,R1
 00000012  D0FA      BEQ         L_1  ; T=0x0000000A
   28:  AD0CR |= 1<<24;            //再次启动一次转换
 00000014  4800      LDR         R2,=0x1000000
 00000016  4800      LDR         R0,=0xE0034000
 00000018  6801      LDR         R1,[R0,#0x0]
 0000001A  4311      ORR         R1,R2
 0000001C  6001      STR         R1,[R0,#0x0]
   29:  while((AD0DR & 0x80000000)==0);       //等待转换完成
 0000001E          L_5:
 0000001E  4800      LDR         R0,=0xE0034004
 00000020  6800      LDR         R0,[R0,#0x0]
 00000022  4800      LDR         R1,=0x80000000
 00000024  4208      TST         R0,R1
 00000026  D0FA      BEQ         L_5  ; T=0x0000001E
   31:  result=(AD0DR>>6)&0x3FF;              //读取结果
 00000028  4800      LDR         R0,=0xE0034004
 0000002A  6801      LDR         R1,[R0,#0x0]
 0000002C  0989      LSR         R1,R1,#0x6
 0000002E  4800      LDR         R0,=0x3FF
 00000030  4001      AND         R1,R0
 00000032  0409      LSL         R1,R1,#0x10
 00000034  0C09      LSR         R1,R1,#0x10
 00000036  ---- Variable 'result' assigned to Register 'R1' ----
   32:  return result;             //返回结果
 00000036  1C08      MOV         R0,R1 ; result
 00000038  0400      LSL         R0,R0,#0x10 ; result
 0000003A  0C00      LSR         R0,R0,#0x10
 0000003C            ; SCOPE-END
   33: }
 0000003C  4770      BX          R14
 0000003E          ENDP ; 'ADC_software_conversion?T'


*** CODE SEGMENT '?PR?ADC_calibration?T?ADC':
   40: }
 00000000  4770      BX          R14
 00000002          ENDP ; 'ADC_calibration?T'


*** CODE SEGMENT '?PR?ADC_init?T?ADC':
   47:  PINSEL1 &= ~0x20000000;
 00000000  4800      LDR         R2,=0x20000000
 00000002  4800      LDR         R0,=0xE002C004
 00000004  6801      LDR         R1,[R0,#0x0]
 00000006  4391      BIC         R1,R2
 00000008  6001      STR         R1,[R0,#0x0]
ARM COMPILER V2.50a,  ADC                                                                  25/08/06  23:22:56  PAGE 4   

   48:  PINSEL1 |=  0x10000000;
 0000000A  4800      LDR         R2,=0x10000000
 0000000C  4800      LDR         R0,=0xE002C004
 0000000E  6801      LDR         R1,[R0,#0x0]
 00000010  4311      ORR         R1,R2
 00000012  6001      STR         R1,[R0,#0x0]
   51:  AD0CR=(1<<3)|(55<<8)|(1<<21)|(1<<24);
 00000014  4800      LDR         R1,=0x1203708
 00000016  4800      LDR         R0,=0xE0034000
 00000018  6001      STR         R1,[R0,#0x0]
   52:  while((AD0DR & 0x80000000)==0);       //等待转换完成
 0000001A          L_10:
 0000001A  4800      LDR         R0,=0xE0034004
 0000001C  6800      LDR         R0,[R0,#0x0]
 0000001E  4800      LDR         R1,=0x80000000
 00000020  4208      TST         R0,R1
 00000022  D0FA      BEQ         L_10  ; T=0x0000001A
   53: }
 00000024  4770      BX          R14
 00000026          ENDP ; 'ADC_init?T'


*** CODE SEGMENT '?PR?read_ADC?T?ADC':
   58: uint16 read_ADC(uint8 ch)
 00000000  B500      PUSH        {LR}
 00000002  1C01      MOV         R1,R0 ; ch
 00000004  ---- Variable 'ch' assigned to Register 'R1' ----
   61:  AD0CR &= ~0xFF;
 00000004  23FF      MOV         R3,#0xFF
 00000006  4800      LDR         R0,=0xE0034000
 00000008  6802      LDR         R2,[R0,#0x0]
 0000000A  439A      BIC         R2,R3
 0000000C  6002      STR         R2,[R0,#0x0]
   62:  AD0CR |= (1<<ch);
 0000000E  1C08      MOV         R0,R1 ; ch
 00000010  0600      LSL         R0,R0,#0x18 ; ch
 00000012  0E00      LSR         R0,R0,#0x18
 00000014  2201      MOV         R2,#0x1
 00000016  4082      LSL         R2,R0
 00000018  4800      LDR         R0,=0xE0034000
 0000001A  6801      LDR         R1,[R0,#0x0]
 0000001C  4311      ORR         R1,R2
 0000001E  6001      STR         R1,[R0,#0x0]
   63:  return ADC_software_conversion();
 00000020  F7FF      BL          ADC_software_conversion?T  ; T=0x0001  (1)
 00000022  FFEE      BL          ADC_software_conversion?T  ; T=0x0001  (2)
 00000024  0400      LSL         R0,R0,#0x10 ; ADC_software_conversion?T
 00000026  0C00      LSR         R0,R0,#0x10
   64: }
 00000028  BC08      POP         {R3}
 0000002A  4718      BX          R3
 0000002C          ENDP ; 'read_ADC?T'



Module Information          Static
----------------------------------
  code size            =    ------
  data size            =    ------
  const size           =    ------
End of Module Information.


ARM COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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