?? pwmout.s
字號:
;******************************************************************************
; 文件名:PWMOUT.S
; 功能:控制PWM6輸出PWM信號,通過濾波電實現DAC轉換。由KEY1控制PWM的占空比,每按一次按鍵
; 將會改變一次PWM的占空比。
; 說明:將跳線器JP11短接,JP6_RXD1斷開。使用示波器觀察測試點PWM。
;******************************************************************************
INCLUDE LPC2294.INC
EXPORT MAIN
PWM_BASE EQU 0xE0014000
KEY1 EQU (1<<16) ; P0.16引腳連接KEY1
PWMDAC EQU 0x40002F00 ; 定義DAC變量
AREA PWMOUTC,CODE,READONLY
CODE32
MAIN LDR SP,=0x40003000 ; 設置堆棧指針SP
LDR R0,=PINSEL0 ; 設置PWM6接口有效
MOV R1,#0x00080000
STR R1,[R0]
BL SYSCLK_INI
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
;******************************************************************************
; 名稱: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
;******************************************************************************
; 名稱:WAITKEY
; 功能:等待一個有效按鍵。本程序有去抖功能。
; 入口參數:無
; 出口參數:無
; 占用資源:R0、R1、R7
;******************************************************************************
WAITKEY
; 等待KEY1鍵按下
WAITKEY_DOWN LDR R0,=IO0PIN ; 裝載寄存器地址,IO0PIN
LDR R1,[R0] ; 讀取I/O口的值
ANDS R1,R1,#KEY1 ; 屏蔽有效位,判斷KEY1鍵是否按下
BNE WAITKEY_DOWN ; 若沒有按下,則等待
; 去抖動
MOV R7,#0x00003F00
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 + -