?? pwmout.s
字號(hào):
;******************************************************************************
; 文件名:PWMOUT.S
; 功能:控制PWM6輸出PWM信號(hào),通過濾波電實(shí)現(xiàn)DAC轉(zhuǎn)換。由KEY1控制PWM的占空比,每按一次按鍵
; 將會(huì)改變一次PWM的占空比。
; 說明:將跳線器JP11短接,JP6_RXD1斷開。使用示波器觀察測(cè)試點(diǎn)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 ; 設(shè)置堆棧指針SP
LDR R0,=PINSEL0 ; 設(shè)置PWM6接口有效
MOV R1,#0x00080000
STR R1,[R0]
BL SYSCLK_INI
LDR R0,=PWM_BASE
MOV R1,#0xFF
STR R1,[R0] ; PWMIR復(fù)位為0
MOV R1,#0x00
STR R1,[R0,#0x08] ; PWMTC復(fù)位,PWMTC為32位增量定時(shí)器
STR R1,[R0,#0x0C] ; PWMPR置為0,即計(jì)數(shù)器不進(jìn)行分頻
MOV R1,#0x02
STR R1,[R0,#0x14] ; PWMMCR,設(shè)置MR0匹配時(shí)復(fù)位PWMTC
MOV R1,#0x4000
STR R1,[R0,#0x4C] ; PWMPCR,使能PWM6輸出,并設(shè)置PWMSEL6 = 0
MOV R1,#0x41
STR R1,[R0,#0x50] ; PWMLER,設(shè)置PWM比較值自動(dòng)更新
; 設(shè)置脈寬
MOV R1,#0xFF0 ; 到達(dá)此值后,輸出高電平
STR R1,[R0,#0x18]
; 設(shè)置占空比
MOV R1,#0x800 ; 當(dāng)?shù)竭_(dá)此值后,輸出低電平
STR R1,[R0,#0x48]
; 設(shè)置PWM模式,啟動(dòng)PWM功能。計(jì)數(shù)頻率為PCLK,不分頻
MOV R1,#0x09
STR R1,[R0,#0x04] ; PWMTCR,啟動(dòng)PWM
LDR R0,=PWMDAC
MOV R1,#0x800
STR R1,[R0]
LOOP BL WAITKEY
; 占空比加100
LDR R0,=PWMDAC
LDR R1,[R0]
ADD R1,R1,#100
; 若變空比大于脈寬值,則復(fù)位為0
CMP R1,#0xFF0
MOVHI R1,#0x000
STR R1,[R0] ; 保存占空比數(shù)據(jù)
; 設(shè)置占空比
LDR R0,=PWM_BASE
STR R1,[R0,#0x48]
MOV R1,#0x40
STR R1,[R0,#0x50] ; PWMLER,設(shè)置PWM比較值自動(dòng)更新
B LOOP
;******************************************************************************
; 名稱:SYSCLK_INI
; 功能:設(shè)置系統(tǒng)時(shí)鐘。(M值為4,P值為2)
; 入口參數(shù):無
; 出口參數(shù):無
; 占用資源: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,設(shè)置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
; 功能:等待一個(gè)有效按鍵。本程序有去抖功能。
; 入口參數(shù):無
; 出口參數(shù):無
; 占用資源:R0、R1、R7
;******************************************************************************
WAITKEY
; 等待KEY1鍵按下
WAITKEY_DOWN LDR R0,=IO0PIN ; 裝載寄存器地址,IO0PIN
LDR R1,[R0] ; 讀取I/O口的值
ANDS R1,R1,#KEY1 ; 屏蔽有效位,判斷KEY1鍵是否按下
BNE WAITKEY_DOWN ; 若沒有按下,則等待
; 去抖動(dòng)
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 ; 數(shù)據(jù)字對(duì)齊
LTORG ; 聲明文字池
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -