📄 ad9851.asm
字号:
.include hardware.inc
.define FQ_UD 0x0020 //IOA5
.define W_CLK 0x0040 //IOA6
.define RESET 0x0080 //IOA7
.define CONTROL P_IOA_Data //9851's Control
.define SYSCLK 120000000 //9851's系统时钟为120M=20M x 6
.ram
.public H_16bit,L_16bit
.var H_16bit,L_16bit
.code
//*********************************************//
//Update9851
//*********************************************//
.public Update9851
Update9851: .proc
push r1,r2 to [sp]
r1 = FQ_UD
r2 = [CONTROL]
r2 |= r1 //set update
[CONTROL] = r2
r1 = r1^0xffff
r2 = [CONTROL]
r2 &= r1
[CONTROL] = r2 //clear updata
r1=0x0001
[P_Watchdog_Clear]=r1
pop r1,r2 from [sp]
retf
.endp
//*******************************************//
//Reset9851
//*******************************************//
.public Reset9851
Reset9851: .proc
push r1,r2 to [sp]
r1 = RESET
r2 = [CONTROL] //set reset
r2 |= r1
[CONTROL] = r2
r1 = r1^0xffff
r2 = [CONTROL]
r2 &= r1 //clear reset
[CONTROL] = r2
r1 = 0x0001
[P_Watchdog_Clear] = r1
pop r1,r2 from [sp]
retf
.endp
//******************************************//
//Init9851
//******************************************//
.public _Init9851
_Init9851: .proc
push r1,r2 to [sp]
r1 = [P_IOA_Data]
r1 &= 0x001f //clear data and control
[P_IOA_Data] = r1
call Update9851
call Reset9851
pop r1,r2 from [sp]
retf
.endp
//******************************************//
//_WriteFreq
//******************************************//
.public _WriteFreq
_WriteFreq: .proc
push bp to [sp]
bp=sp+1
push r1,r5 to [sp]
r1 = [bp + 3] //get first parameter,high 16 bit
[H_16bit] = r1
r2 = [bp + 4] //get second parameter,low 16 bit
[L_16bit] = r2
r1 = [P_IOA_Data]
r1 &= 0x00ff //send W0
r1 |= 0x0100
[P_IOA_Data] = r1
r1 = W_CLK
r2 = [CONTROL]
r2 |= r1 //set clock
[CONTROL] = r2
r1 = r1^0xffff
r2 = [CONTROL]
r2 &= r1 //clear clock
[CONTROL] = r2
r2 = [H_16bit] //send W1
r2 &= 0xff00
r1 = [P_IOA_Data]
r1 &= 0x00ff
r1 |= r2
[P_IOA_Data] = r1
r1 = W_CLK
r2 = [CONTROL]
r2 |= r1 //set clock
[CONTROL] = r2
r1 = r1^0xffff
r2 = [CONTROL]
r2 &= r1 //clear clock
[CONTROL] = r2
r2 = [H_16bit] //send W2
r2 = r2 lsl 4
r2 = r2 lsl 4
r3 = [P_IOA_Data]
r3 &= 0x00ff
r3 |= r2
[P_IOA_Data] = r3
r1 = W_CLK
r3 = [CONTROL]
r3 |= r1 //set clock
[CONTROL] = r3
r1 = r1^0xffff
r3 = [CONTROL]
r3 &= r1 //clear clock
[CONTROL] = r3
r2 = [L_16bit] //send W3
r2 &= 0xff00
r1 = [P_IOA_Data]
r1 &= 0x00ff
r1 |= r2
[P_IOA_Data] = r1
r1 = W_CLK
r2 = [CONTROL]
r2 |= r1 //set clock
[CONTROL] = r2
r1 = r1^0xffff
r2 = [CONTROL]
r2 &= r1 //clear clock
[CONTROL] = r2
r2 = [L_16bit] //send W4
r2 = r2 lsl 4
r2 = r2 lsl 4
r3 = [P_IOA_Data]
r3 &= 0x00ff
r3 |= r2
[P_IOA_Data] = r3
r1 = W_CLK
r3 = [CONTROL]
r3 |= r1 //set clock
[CONTROL] = r3
r1 = r1^0xffff
r3 = [CONTROL]
r3 &= r1 //clear clock
[CONTROL] = r3
call Update9851
r1 = 0x0001
[P_Watchdog_Clear] = r1
pop r1,r5 from [sp]
pop bp from [sp]
retf
.endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -