📄 dac.lis
字号:
.module DAC.c
.area text
0000 .dbfile DAC.c
0000 .dbfunc e DA_SPIInit _DA_SPIInit fV
0000 _DA_SPIInit::
0000 .dbline -1
0000 .dbline 19
0000 ; /*-------------------------------------------------------*
0000 ; *(1)TLV5608Init:TLV5608初始化
0000 ; *(2)TLV5608Z:1路DA转换子程序 *
0000 ; *(3)DAC:2片TLV5608转换 *
0000 ; *-------------------------------------------------------*/
0000 ; //[包含头文件]
0000 ; #include "Includes.h"
0000 ; //[包含外部函数]
0000 ; void Delay(void);
0000 ; /*SPIInit:SPI初始化子程序-------------------------------*
0000 ; *功 能:对SPI进行初始化,默认为允许SPI,主机工作方式,时钟 *
0000 ; * 空闲低电平,比特率2分频, *
0000 ; * 波特率为CGMOUT/2*BD(设CGMOUT=2*fBUS=2*2.4576MHz)*
0000 ; *参 数:无 *
0000 ; *返 回:无 *
0000 ; *------------------------------------------------------*/
0000 ; #include "Includes.h"
0000 ; void DA_SPIInit(void)
0000 ; {
0000 .dbline 20
0000 ; SPCR=0b00100010; //不产生中断、主机方式、时钟空闲低电平
0000 A622 lda #34
0002 B710 sta 0x10
0004 .dbline 21
0004 ; SPSCR=0b00000000; //2分频
0004 3F11 clr 0x11
0006 .dbline -2
0006 L1:
0006 .dbline 0 ; func end
0006 81 rts
0007 .dbend
0007 .dbfunc e DAC _DAC fV
0007 ; i -> 0,X
0007 ; value -> 3,X
0007 _DAC::
0007 .dbline -1
0007 A7FF ais #-1
0009 95 tsx
000A .dbline 29
000A ; }
000A ; /*D/A转换子程序(DAC.c)-----------------------------------*
000A ; *功能:将TLV5608(0)-(1)片,共16通道的数字量转换为模拟量 *
000A ; *入口:value--2片5608、16路通道的数字量值 *
000A ; *调用:TLV5608Z *
000A ; *-------------------------------------------------------*/
000A ; void DAC(INT16U *value)
000A ; {
000A .dbline 32
000A ; INT8U i;
000A ; //TLV5608初始化
000A ; TLV5608Init();
000A CD0050 jsr _TLV5608Init
000D 95 tsx
000E .dbline 33
000E ; for(i=1;i<=16;i++)
000E A601 lda #1
0010 F7 sta ,X
0011 2035 bra L6
0013 L3:
0013 .dbline 34
0013 3F00 clr *__r0
0015 F6 lda ,X
0016 B700 sta *__r1
0018 3800 lsl *__r1
001A 3900 rol *__r0
001C B600 lda *__r1
001E EB04 add 4,X
0020 B700 sta *__r1
0022 B600 lda *__r0
0024 E903 adc 3,X
0026 B700 sta *__r0
0028 5500 ldhx *__r0
002A AFFE aix #-2
002C E601 lda 1,x
002E B700 sta *__r1
0030 F6 lda ,x
0031 95 tsx
0032 B700 sta *__r0
0034 B600 lda *__r1
0036 87 psha
0037 B600 lda *__r0
0039 87 psha
003A 3F00 clr *__r0
003C F6 lda ,X
003D 87 psha
003E B600 lda *__r0
0040 87 psha
0041 CD00ED jsr _TLV5608Z
0044 A704 ais #4
0046 95 tsx
0047 L4:
0047 .dbline 33
0047 7C inc ,X
0048 L6:
0048 .dbline 33
0048 F6 lda ,X
0049 A110 cmp #16
004B 23C6 bls L3
004D .dbline -2
004D L2:
004D A701 ais #1
004F .dbline 0 ; func end
004F 81 rts
0050 .dbsym l i 0 c
0050 .dbsym l value 3 ps
0050 .dbend
0050 .dbfunc e TLV5608Init _TLV5608Init fV
0050 ; fs -> 0,X
0050 _TLV5608Init::
0050 .dbline -1
0050 A7FF ais #-1
0052 95 tsx
0053 .dbline 42
0053 ; TLV5608Z(i,*(value+i-1));
0053 ; }
0053 ; /*TLV5608芯片D/A转换初始化子程序(TLV5608Init.c)-----------------*
0053 ; *功 能:初始化2片TLV5608的CTRL0、CTRL1寄存器 *
0053 ; *参 数:无 *
0053 ; *返 回:无 *
0053 ; *--------------------------------------------------------------*/
0053 ; void TLV5608Init(void)
0053 ; {
0053 .dbline 44
0053 ; INT8U fs;
0053 ; for(fs=0;fs<=1;fs++)
0053 7F clr ,X
0054 CC00E2 jmp L11
0057 L8:
0057 .dbline 45
0057 ; {
0057 .dbline 46
0057 ; CS_D |=0b00001100; //定义PTC2~3为输出
0057 B606 lda 0x6
0059 AA0C ora #12
005B B706 sta 0x6
005D .dbline 47
005D ; CS_P |=0b00001100; //PTC2~3输出为高电平
005D B602 lda 0x2
005F AA0C ora #12
0061 B702 sta 0x2
0063 .dbline 49
0063 ; //设置CTRL0寄存器
0063 ; CS_P &= ~(1<<(fs+2)); //相应片TLV.FS由高电平变为低电平,产生下降沿
0063 F6 lda ,X
0064 AB02 add #2
0066 6E0100 mov #1,*__r2
0069 A407 and #7
006B 2704 beq X1
006D X0:
006D 3800 lsl *__r2
006F 4BFC dbnza X0
0071 X1:
0071 4E0000 mov *__r2,*__r0
0074 3300 com *__r0
0076 B602 lda 0x2
0078 B400 and *__r0
007A B702 sta 0x2
007C .dbline 51
007C ; //此后在每个SCLK的下降沿传送一位数据,共传输16位数据
007C ; Delay(); //延时20个时钟周期
007C CD0000 jsr _Delay
007F 95 tsx
0080 .dbline 52
0080 ; SPIDR=0b10000000; //发送高8位数据(CTRL0地址为1000)
0080 A680 lda #-128
0082 B712 sta 0x12
0084 L12:
0084 .dbline 53
0084 L13:
0084 .dbline 53
0084 ; while((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
0084 0711FD brclr #3,0x11,L12
0087 .dbline 55
0087 ; //发送完毕
0087 ; SPIDR=0b00000000; //发送低8位数据
0087 3F12 clr 0x12
0089 L15:
0089 .dbline 56
0089 L16:
0089 .dbline 56
0089 ; while((SPISCR & (1<<SendEmyptBit)) == 0); //为0等待,也就是等待SPTE为1
0089 0711FD brclr #3,0x11,L15
008C .dbline 58
008C ; //发送完毕
008C ; asm("nop");
008C 9D nop
008D .dbline 59
008D ; asm("nop");
008D 9D nop
008E .dbline 60
008E ; CS_P |= (1<<(fs+2)); //数据传输完毕,相应片TLV.FS由低电平变为高电平
008E F6 lda ,X
008F AB02 add #2
0091 6E0100 mov #1,*__r2
0094 A407 and #7
0096 2704 beq X3
0098 X2:
0098 3800 lsl *__r2
009A 4BFC dbnza X2
009C X3:
009C B602 lda 0x2
009E BA00 ora *__r2
00A0 B702 sta 0x2
00A2 .dbline 64
00A2 ;
00A2 ;
00A2 ; //设置CTRL1寄存器
00A2 ; CS_P &= ~(1<<(fs+2)); //相应片TLV.FS由高电平变为低电平,产生下降沿
00A2 F6 lda ,X
00A3 AB02 add #2
00A5 6E0100 mov #1,*__r2
00A8 A407 and #7
00AA 2704 beq X5
00AC X4:
00AC 3800 lsl *__r2
00AE 4BFC dbnza X4
00B0 X5:
00B0 4E0000 mov *__r2,*__r0
00B3 3300 com *__r0
00B5 B602 lda 0x2
00B7 B400 and *__r0
00B9 B702 sta 0x2
00BB .dbline 66
00BB ; //此后在每个SCLK的下降沿传送一位数据
00BB ; Delay(); //延时20个时钟周期
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -