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

📄 pwmout.s

📁 pwm test for arm lpc2104
💻 S
字号:
;******************************************************************************
; File:PWMOUT.S
; 功能:控制PWM输出,并实现PWM DAC转换操作。
; 说明:将跳线器JP10短接。使用示波器观察测试点PWM和PWMDAC。
;******************************************************************************

		INCLUDE	LPC2106.INC
		
KEY1		EQU		0x00004000			; P0.14引脚连接KEY1
PWMDAC		EQU		0x40002F00			; 定义DAC变量
		
		    AREA   	PWMOUTC,CODE,READONLY 
		    ENTRY
		
		    CODE32  					
MAIN 		LDR	    SP,=0x40003000		; 设置堆栈指针SP
		    LDR	    R0,=PINSEL0		    ; 设置PWM6接口有效
		    MOV	    R1,#0x00080000		
		    STR	    R1,[R0]
		
		    LDR	    R0,=PWM_BASE
		
		    MOV	    R1,#0xFF
		    STR	    R1,[R0]			    ; PWMIR复位为0
		
		    MOV	    R1,#0x00
		    STR	    R1,[R0,#0x08]		; PWMTC复位,PWMTC为32位增量定时器
		
		    STR	    R1,[R0,#0x0C]		; PWMPR置为0,即计数器不进行分频
		
		    MOV	    R1,#0x02
		    STR	    R1,[R0,#0x14]		; PWMMCR,设置MR0匹配时复位PWMTC
			
		    MOV	    R1,#0x4000		
		    STR	    R1,[R0,#0x4C]		; PWMPCR,使能PWM6输出,并设置PWMSEL6 = 0
		
		    MOV	    R1,#0x41
		    STR	    R1,[R0,#0x50]		; PWMLER,设置PWM比较值自动更新
		
		
		    ; 设置脉宽
		    MOV	    R1,#0xFF0		    ; 到达此值后,输出高电平
		    STR	    R1,[R0,#0x18]
		
		    ; 设置占空比
		    MOV	    R1,#0x800		    ; 当到达此值后,输出低电平
		    STR	    R1,[R0,#0x48]
		
		    ; 设置PWM模式,启动PWM功能。计数频率为PCLK,不分频
		    MOV	    R1,#0x09		
		    STR	    R1,[R0,#0x04]		; PWMTCR,启动PWM
	
		    LDR	    R0,=PWMDAC
		    MOV	    R1,#0x800
		    STR	    R1,[R0]
LOOP		BL	    WAITKEY
		    ; 占空比加100
		    LDR	    R0,=PWMDAC
		    LDR	    R1,[R0]
		    ADD	    R1,R1,#100
		    ; 若变空比大于脉宽值,则复位为0
		    CMP	    R1,#0xFF0
		    MOVHI	R1,#0x000
		    STR	    R1,[R0]			    ; 保存占空比数据
		
		    ; 设置占空比
		    LDR	    R0,=PWM_BASE
		    STR	    R1,[R0,#0x48]
		    MOV	    R1,#0x40
		    STR	    R1,[R0,#0x50]		; PWMLER,设置PWM比较值自动更新
			
		    B	    LOOP

;******************************************************************************		
; 名称:WAITKEY
; 功能:等待一个有效按键。本程序有去抖功能。
; 入口参数:无
; 出口参数:无
; 占用资源:R0、R1、R7
;******************************************************************************
WAITKEY
		    ; 等待KEY1键按下
WAITKEY_DOWN	LDR		R0,=IOPIN		; 装载寄存器地址,IOPIN
		    LDR		R1,[R0]				; 读取I/O口的值
		    ANDS	R1,R1,#KEY1			; 屏蔽有效位,判断KEY1键是否按下
		    BNE		WAITKEY_DOWN		; 若没有按下,则等待
		
		    ; 去抖动
		    MOV		R7,#0x00000FF0
WAITKEY_L1	SUBS	R7,R7,#1
		    BNE		WAITKEY_L1
		    LDR		R1,[R0]				; 读取I/O口的值,判断KEY1键是否仍按下
		    ANDS	R1,R1,#KEY1		
		    BNE		WAITKEY_DOWN
		
		    ; 等待按键放开
WAITKEY_UP	LDR		R1,[R0]
		    ANDS	R1,R1,#KEY1		
		    BEQ		WAITKEY_UP

		    MOV		PC,LR				; 返回		
		
		    ALIGN						; 数据字对齐
		    LTORG						; 声明文字池		
		
		    END
		

⌨️ 快捷键说明

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