ARM专辑-152M-pdf.zip

源代码在线查看: adc0.s

软件大小: 74715 K
上传用户: QQ
关键词: M-pdf ARM 152 zip
下载地址: 免注册下载 普通下载 VIP

相关代码

				;****************************************************************************** 
				; 文件名:ADC0.S
				; 功能:使用ADC模块的通道0进行电压的测量,然后将转换结果的高8位值输出LED1--LED8
				;      显示。
				; 说明:由W1调节测量电压值。
				;****************************************************************************** 
							INCLUDE		LPC2294.INC
							EXPORT  	MAIN	
					
				; 定义PCLK值			
				FPCLK			EQU		11059200			
				; 定义ADC控制字 (设置通道0进行ADC转换)
				ADC_MODE		EQU		  (1 				                        | ((FPCLK / 1000000 - 1) 				                        | (0 				                        | (0 				                        | (1 				                        | (0 				          				| (1 				          				| (0 				
				; 定义SPI控制口
				SPI_CS			EQU	    0x00000100		; P0.8
				SPI_DATA		EQU	    0x00000040		; P0.6
				SPI_CLK			EQU	    0x00000010		; P0.4
				
				SPI_IOCON		EQU	    0x00000150		; SPI接口的I/O设置字
						
				
							AREA   	LEDDISPC,CODE,READONLY 
						    ENTRY
						    CODE32
						    
				MAIN		LDR		SP,=0x40003F00		
						    LDR	    R0,=PINSEL0			
						    MOV	    R1,#0x00000000		
						    STR	    R1,[R0]
						    MOV		R1,#0x00400000		; 设置P0.27连接到AIN0
						    STR	    R1,[R0,#0x04]
						   	BL		SYSCLK_INI			; 设置系统时钟
				
						    LDR	    R0,=IO0DIR			; 设置SPI控制口为输出				
						    MOV	    R1,#SPI_IOCON		
						    STR	    R1,[R0]
				
				MAIN_LOOP	LDR		R0,=ADCR
						    LDR		R1,=ADC_MODE		
						    STR		R1,[R0]				; 启动ADC转换
							BL		DELAYS
							LDR		R0,=ADDR
							LDR		R1,[R0]
							ANDS	R1,R1,#0x80000000
							BEQ		MAIN_LOOP			; 判断AD转换是否已结束
							
							LDR		R1,[R0]				; 读取ADC转换结果
							MVN		R2,R1,LSR #0x08		; 右移8位后得到8位ADC数据,取反后放入R2
						    BL	    HC595_SENDDAT		; 发送显示
						    B	    MAIN_LOOP
				
				 
				;******************************************************************************		
				; 名称:SYSCLK_INI
				; 功能:设置系统时钟。(M值为4,P值为2)
				; 入口参数:无
				; 出口参数:无
				; 占用资源:R0、R1		
				;******************************************************************************
				SYSCLK_INI	
							LDR		R0,=VPBDIV
							MOV		R1,#0x00
							STR		R1,[R0]					; VPBDIV=0x00
							
							LDR		R0,=PLLCFG
							MOV		R1,#0x23
							STR		R1,[R0]					; PLLCFG=0x23,设置M值为4,P值为2
							LDR		R0,=PLLCON
							MOV		R1,#0x01
							STR		R1,[R0]					; PLLCON=0x01
							LDR		R0,=PLLFEED
							MOV		R1,#0xAA
							STR		R1,[R0]					; PLLFEED=0xAA
							MOV		R1,#0x55
							STR		R1,[R0]					; PLLFEED=0x55
				WAIT_OK		LDR		R0,=PLLSTAT				
							LDR		R1,[R0]
							ANDS	R1,R1,#0x0400
							BEQ		WAIT_OK					; 等待PLL锁定
							
							LDR		R0,=PLLCON
							MOV		R1,#0x03
							STR		R1,[R0]
							LDR		R0,=PLLFEED
							MOV		R1,#0xAA
							STR		R1,[R0]
							MOV		R1,#0x55
							STR		R1,[R0]	
							
							MOV		PC,LR		    
				
				;******************************************************************************		
				; 名称:HC595_SENDDAT
				; 功能:向74HC595发送一字节数据
				; 入口参数:R2		待发送的数据,低8位有效
				; 出口参数:无
				; 占用资源:(R0、R1、R2、R7)
				;******************************************************************************
				HC595_SENDDAT
						    STMFD	SP!,{R0-R12,LR}		; 寄存器入栈保护
						    LDR	    R0,=IO0CLR		    ; SPI_CS = 0
						    MOV	    R1,#SPI_CS
						    STR	    R1,[R0]
						
						    MOV	    R7,#8
				HC595_SDL1	LDR	    R0,=IO0CLR		    ; SPI_CLK = 0
						    MOV	    R1,#SPI_CLK
						    STR	    R1,[R0]
						
						    ANDS	R1,R2,#0x00000080	; 判断要发送的数据位,并设置SPI_DAT
						    LDRNE	R0,=IO0SET
						    LDREQ	R0,=IO0CLR
						    MOV	    R1,#SPI_DATA
						    STR	    R1,[R0]
						    MOV	    R2,R2,LSL #1        ; 数据左移一位
						
						    LDR	    R0,=IO0SET		    ; SPI_CLK = 1
						    MOV	    R1,#SPI_CLK
						    STR	    R1,[R0]
						
						    SUBS	R7,R7,#1
						    BNE	    HC595_SDL1		    ; 若数据未发送完毕,再次发送
						
						    LDR	    R0,=IO0SET		    ; SPI_CS = 1,输出显示数据
						    MOV	    R1,#SPI_CS
						    STR	    R1,[R0]
						
						    LDMFD	SP!,{R0-R12,PC}		; 返回  
						    
						    
				;******************************************************************************
				; 名称:DELAYS
				; 功能:软件延时
				; 入口参数:无
				; 出口参数:无
				; 占用资源:R7
				;******************************************************************************
				DELAYS	
							MOV		R7,#0x0000FF00		; 延时参数
				DELAYS_L1	SUBS	R7,R7,#1		    ; R7 = R7-1
							BNE		DELAYS_L1          	; 判断R7-1结果是否为0,若不为0则跳转
							MOV		PC,LR				; 返回		    
						    
						    LTORG						; 声明文字池	
				
							END			

相关资源