📄 ad5664_driver.asm
字号:
//============================================================
// 文件名称: ad5664_driver.asm
// 功能描述: ad5664底层驱动程序
// 维护记录: 2006-9-17 v2.0.0 Edit by 马占平
//============================================================
.DEFINE P_IOA_Data 0x7000
.DEFINE P_IOA_Buffer 0x7001
.DEFINE P_IOA_Dir 0x7002
.DEFINE P_IOA_Attrib 0x7003
.DEFINE P_IOA_Latch 0x7004
.DEFINE P_IOB_Data 0x7005
.DEFINE P_IOB_Buffer 0x7006
.DEFINE P_IOB_Dir 0x7007
.DEFINE P_IOB_Attrib 0x7008
.DEFINE P_Watchdog_Clear 0x7012
.DEFINE Port_Data P_IOB_Data //定义用于与ad5664接口的端口是哪一组,便于修改端口
.DEFINE Port_Buffer P_IOB_Buffer
.DEFINE Port_Dir P_IOB_Dir
.DEFINE Port_Attrib P_IOB_Attrib
.define DIN 0x8000 //定义各个与ad5664上的控制、数据端口连接的具体的SPCE061A口位
.define SCLK 0x4000
.define SYNC 0x2000
//=============================================================
.ram
.VAR msb,lsb
.CODE
//========================================================
// 汇编格式: _ad5664_initial
// C格式: void ad5664_initial(void)
// 实现功能: 初始化端口
// 入口参数: 无
// 出口参数: 无
// 破坏寄存器:r1
//========================================================
.PUBLIC _ad5664_initial
_ad5664_initial:
push r1 to [sp]
r1 = [Port_Dir] //初始化IOB口为同相低电平输出口
r1 = r1|(DIN+SCLK+SYNC)
[Port_Dir] = r1
r1 = [Port_Attrib]
r1 = r1|(DIN+SCLK+SYNC)
[Port_Attrib] = r1
r1 = [Port_Buffer]
r1 = r1&~(DIN+SCLK+SYNC)
[Port_Buffer] = r1
pop r1 from [sp]
retf
//========================================================
// 汇编格式: _ad5664_whrite
// C格式: unsigned int ad5664_whrite(cammand,data)
// 实现功能: 向D/A写指令和数据
// 入口参数: cammand,data
// 出口参数: 无
// 破坏寄存器:r2,r3,r4,r5
//========================================================
.PUBLIC _ad5664_whrite
_ad5664_whrite:
push r3,r5 to [sp]
bp = sp
r3 = [bp+6] //高8位为控制字
[msb] = r3
r3 = [bp+7] //16位是数据
[lsb] = r3
loop: r4 = [Port_Buffer] //SYNC to high
r4 = r4|SYNC
[Port_Buffer] = r4
r4 = 0x00ff
loop1: r4 = r4-1
jnz loop1
r4 = [Port_Buffer] //SYNC to LOW
r4 = r4&(~SYNC)
[Port_Buffer] = r4
r5 = 0x0008 //8位控制字计数
r3 = [msb] //数据暂存
loop2: test r3,DIN
jz loop4
jmp loop5
loop4: r4 = [Port_Buffer] //数据位为0的处理程序
r4 = r4&(~DIN)
[Port_Buffer] = r4
jmp maichong
loop5: r4 = [Port_Buffer] //数据位为1的处理程序
r4 = r4|DIN
[Port_Buffer] = r4
jmp maichong
maichong:
R4 = [Port_Buffer]
R4 = R4|SCLK
[Port_Buffer] = R4 //SCLK TO HIGH
nop
nop
nop
r4 = [Port_Buffer]
r4 = r4&(~SCLK)
[Port_Buffer] = r4 //SCLK TO LOW
r3 = r3 lsl 1
r5 = r5-1
jnz loop2
r4 = 0x0001
[P_Watchdog_Clear] = r4 //清看门狗
r5 = 0x0010
r3 = [lsb] //数据暂存16位数据
loop3: test r3,DIN
jz loop6
jmp loop7
loop6: r4 = [Port_Buffer] //数据位为0的处理程序
r4 = r4&(~DIN)
[Port_Buffer] = r4
jmp maichong1
loop7: r4 = [Port_Buffer] //数据位为1的处理程序
r4 = r4|DIN
[Port_Buffer] = r4
jmp maichong1
maichong1:
R4 = [Port_Buffer]
R4 = R4|SCLK
[Port_Buffer] = R4 //SCLK TO HIGH
nop
nop
nop
r4 = [Port_Buffer]
r4 = r4&(~SCLK)
[Port_Buffer] = r4 //SCLK TO LOW
r3 = r3 lsl 1
r5 = r5-1
jnz loop3
//r3 = [lsb]
//r3 = r3+1
//[lsb] = r3 //加上一个步进值
r4 = 0x0001
[P_Watchdog_Clear] = r4 //清看门狗
//goto loop
pop r3,r5 from [sp]
retf
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -