📄 keypad.asm
字号:
; *****************************************************************************
; 文件名: keyboard.asm
;.mmregs
.global _InitC5402
.global _WRITE_READ_keyboard
.include MMRegs_sdt.h
_InitC5402:
NOP
LD #0, DP ; reset data–page pointer
STM #0, CLKMD ; software setting of DSP clock
STM #0, CLKMD ; (to divider mode before setting)
; STM #0x1007, CLKMD ; set C5402 DSP clock to 20MHz=10MHzx2
STM #0x4007, CLKMD ; set C5402 DSP clock to 50MHz=10MHzx5
* STM #0x9007, CLKMD ; set C5402 DSP clock to 100MHz
; (based on DSK crystal at 10MHz)
******* Configure C5402 System Registers *******
STM #0x2000, SWWSR ; 2 wait cycle for IO space &
; 0 wait cycle for data&prog spaces
STM #0x0000,BSCR ; set wait states for bank switch:
; 64k mem bank, extra 0 cycle between
; consecutive prog/data read
STM #0x1800,ST0 ; ST0 at default setting
STM #0x2900,ST1 ; ST1 at default setting(note:INTX=1)
; STM #0x3fe1,PMST ; MP/MC=0 mode & OVLY=1, vectors at FF80h
STM #0x00A0,PMST ; MC mode & OVLY=1, vectors at 0080h
******* Set up Timer Control Registers *******
STM #0x0010, TCR ; stop on–chip timer0
STM #0x0010, TCR1 ; stop on–chip timer1
; Timer0 is used as main loop timer
; STM #2499, PRD ; timer0 rate=CPUCLK/1/(PRD+1)
; =40M/2500=16KHz
* STM #6249, PRD ; if CPU at 100M/6250=16KHz
******* Finish DSP Initialization *******
STM #0x0000, IMR ; disable peripheral interrupts
STM #0xFFFF, IFR ; clear the intrupts’ flag
;STM 2000H,SP
RET ; return to main
NOP
NOP
*****************************************************************************
BIT_keyboard_c0:
nop
BIT *ar3, 15-0; test bit 15
nop
nop
nop
bc c0_r0,ntc
c0_r0_return:
BIT *ar3, 15-1; test bit 14
nop
nop
nop
bc c0_r1,ntc
c0_r1_return:
BIT *ar3, 15-2; test bit 13
nop
nop
nop
bc c0_r2,ntc
c0_r2_return:
BIT *ar3, 15-3; test bit 12
nop
nop
nop
bc c0_r3,ntc
c0_r3_return:
ret
*****************************************************************************
BIT_keyboard_c1:
nop
nop
BIT *ar3, 15-0; test bit 15
nop
nop
NOP
bc c1_r0,ntc
c1_r0_return:
BIT *ar3, 15-1; test bit 14
nop
nop
NOP
bc c1_r1,ntc
c1_r1_return:
BIT *ar3, 15-2; test bit 13
nop
nop
NOP
bc c1_r2,ntc
c1_r2_return:
BIT *ar3, 15-3; test bit 12
nop
nop
NOP
bc c1_r3,ntc
c1_r3_return:
ret
*****************************************************************************
BIT_keyboard_c2:
nop
nop
BIT *ar3, 15-0; test bit 15
nop
nop
NOP
bc c2_r0,ntc
c2_r0_return:
BIT *ar3, 15-1; test bit 14
nop
nop
NOP
bc c2_r1,ntc
c2_r1_return:
BIT *ar3, 15-2; test bit 13
nop
nop
NOP
bc c2_r2,ntc
c2_r2_return:
BIT *ar3, 15-3; test bit 12
nop
nop
NOP
bc c2_r3,ntc
c2_r3_return:
ret
*****************************************************************************
BIT_keyboard_c3:
nop
nop
BIT *ar3, 15-0; test bit 15
nop
nop
NOP
bc c3_r0,ntc
c3_r0_return:
BIT *ar3, 15-1; test bit 14
nop
nop
NOP
bc c3_r1,ntc
c3_r1_return:
BIT *ar3, 15-2; test bit 13
nop
nop
NOP
bc c3_r2,ntc
c3_r2_return:
BIT *ar3, 15-3; test bit 12
nop
nop
NOP
bc c3_r3,ntc
c3_r3_return:
ret
*****************************************************************************
c0_r0:
nop
nop
st #0000h,*ar2 ;key 0
nop
nop
b c0_r0_return
c0_r1:
nop
nop
st #0001h,*ar2 ;key 1
nop
nop
b c0_r1_return
c0_r2:
nop
nop
st #0002h,*ar2 ;key 2
nop
nop
b c0_r2_return
c0_r3:
nop
nop
st #0003h,*ar2 ;key 3
nop
nop
b c0_r3_return
c1_r0:
nop
nop
st #0004h,*ar2 ;key 4
nop
nop
b c1_r0_return
c1_r1:
nop
nop
st #0005h,*ar2 ;key 5
nop
nop
b c1_r1_return
c1_r2:
nop
nop
st #0006h,*ar2 ;key 6
nop
nop
b c1_r2_return
c1_r3:
nop
nop
st #0007h,*ar2 ;key 7
nop
nop
b c1_r3_return
c2_r0:
nop
nop
st #0008h,*ar2 ;key 8
nop
nop
b c2_r0_return
c2_r1:
nop
nop
st #0009h,*ar2 ;key 9
nop
nop
b c2_r1_return
c2_r2:
nop
nop
st #000ah,*ar2 ;key a
nop
nop
b c2_r2_return
c2_r3:
nop
nop
st #000bh,*ar2 ;key b
nop
nop
b c2_r3_return
c3_r0:
nop
nop
st #000ch,*ar2 ;key c
nop
nop
b c3_r0_return
c3_r1:
nop
nop
st #000dh,*ar2 ;key d
nop
nop
b c3_r1_return
c3_r2:
nop
nop
st #000eh,*ar2 ;key e
nop
nop
b c3_r2_return
c3_r3:
nop
nop
st #000fh,*ar2 ;key f
nop
nop
b c3_r3_return
*****************************************************************************
_WRITE_READ_keyboard:
nop
nop
stm 1000h,ar0
stm 1001h,ar3
stm 1002h,ar2 ;key value in 1002h
NOP
NOP
st #000eh,*ar0
NOP
NOP
NOP
portw *ar0,0006H
nop
nop
nop
portr 0004H,*ar3
NOP
NOP
NOP
call BIT_keyboard_c0
NOP
NOP
st #000dh,*ar0
NOP
NOP
NOP
portw *ar0,0006H
nop
nop
nop
portr 0004H,*ar3
NOP
NOP
NOP
call BIT_keyboard_c1
NOP
NOP
st #000bh,*ar0
NOP
NOP
NOP
portw *ar0,0006H
nop
nop
nop
portr 0004H,*ar3
NOP
NOP
NOP
call BIT_keyboard_c2
NOP
NOP
st #0007h,*ar0
NOP
NOP
NOP
portw *ar0,0006H
nop
nop
nop
portr 0004H,*ar3
NOP
NOP
NOP
call BIT_keyboard_c3
NOP
NOP
ret
nop
nop
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -