⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpc_iic.asm

📁 8051 mp3 very good for using
💻 ASM
字号:
;--------------------------------------;
; Set functions of DAC3550A with IIC


inc_volume:	; Increase Volume setting (ZR=could not increse)
	lds	r16,Volume
	inc	r16
	cpi	r16,VOLMAX+1
	brcs	PC+3
	sez
	ret
	sts	Volume,r16
	rcall	set_volume
	clz
	ret


dec_volume:	; Decrease Volume setting (ZR=could not decrese)
	lds	r16,Volume
	dec	r16
	cpi	r16,VOLMIN
	brcc	PC+3
	sez
	ret
	sts	Volume,r16
	rcall	set_volume
	clz
	ret


set_volume:	; Volume = send data into AVOL
	 rcall	iic_start	; START
	ldi	r16,0x9a	; Device address
	 rcall	iic_send	; /
	ldi	r16,0xc2	; Register = AVOL
	 rcall	iic_send	; /
	lds	r16,Volume	; Volume R
	 rcall	iic_send	; /
	lds	r16,Volume	; Volume L
	 rcall	iic_send	; /
	rjmp	iic_stop	; STOP


dac_on:		; Unmute
	 rcall	iic_start	; START
	ldi	r16,0x9a	; Device address
	 rcall	iic_send	; /
	ldi	r16,0xc3	; Register = GCFG
	 rcall	iic_send	; /
	ldi	r16,0b00001110	; GCFG = DAC on, AUX1 on-mono
	 rcall	iic_send	; /
	rjmp	iic_stop	; STOP


dac_off:	; Mute
	sts	FtmMr,_0	; Clear muting delayed release
	 rcall	iic_start	; START
	ldi	r16,0x9a	; Device address
	 rcall	iic_send	; /
	ldi	r16,0xc3	; Register = GCFG
	 rcall	iic_send	; /
	ldi	r16,0b00001010	; GCFG = DAC off, AUX1 on-mono
	 rcall	iic_send	; /
	rjmp	iic_stop	; STOP


dac_iiscfg: 	; Set LR_SEL bit because DSP outputs inverted LRCK in default.
	 rcall	iic_start	; START
	ldi	r16,0x9a	; Device address
	 rcall	iic_send	; /
	ldi	r16,0xc1	; Register = SR_REG
	 rcall	iic_send	; /
	ldi	r16,0b00010110	; WSI:L=R-ch, No delay
	 rcall	iic_send	; /
	rjmp	iic_stop	; STOP



;--------------------------------------;
; Set functions of MAS3570D with IIC


set_dcdc:	; Set DC-DC output voltage
	sbi	PORTD,WSEN	; Enable DSP
	ldi	r16,100		; Delay 600us
	 rcall	iic_delay	; 
	dec	r16		; 
	brne	PC-2		; /
	 rcall	iic_start	; START
	ldi	r16,0x3a	; Device address
	 rcall	iic_send	; /
	ldi	r16,0x68	; CMD:Write
	 rcall	iic_send	; /
	ldi	r16,0x98
	 rcall	iic_send
	ldi	r16,0xe0
	 rcall	iic_send
	ldi	r16,0x04	; Voltage: 04=2.9, 08=3.0, 0c=3.1,
	 rcall	iic_send	;          10=3.2, 14=3.3, 18=3.4
	ldi	r16,0x00	; 
	 rcall	iic_send	; /
	 rcall	iic_stop	; STOP
	ldi	r16,100		; Delay 600us
	 rcall	iic_delay	; 
	dec	r16		; 
	brne	PC-2		; /
	cbi	PORTD,WSEN	; Disable DSP
	ret


;--------------------------------------;
; IIC - Generate START condition
;
; Call: None
; Rte:  None

iic_start:
	cbi	DDRD,IICD	; SDA="P"
	 rcall	iic_delay	; Delay
	sbi	PORTD,IICC	; SCK="H"
	 rcall	iic_delay	; Delay
	sbi	DDRD,IICD	; SDA="L"
	 rcall	iic_delay	; Delay
	cbi	PORTD,IICC	; SCK="L"
	rjmp	iic_delay	; Delay


;--------------------------------------;
; IIC - Generate STOP condition
;
; Call: None
; Rte:  None

iic_stop:
	cbi	PORTD,IICC	; SCK="L"
	sbi	DDRD,IICD	; SDA="L"
	 rcall	iic_delay	; Delay
	sbi	PORTD,IICC	; SCK="H"
	 rcall	iic_delay	; Delay
	cbi	DDRD,IICD	; SDA="P"
	rjmp	iic_delay	; Delay


;--------------------------------------;
; IIC - Send byte data to slave device
;
; Call: r16 = data to send
; Ret:  C = 0:ACK, 1:NAK

iic_send:
	sec
	rol	r16		; SDA = Bit for send
	breq	iic_rack	; Break when end of data
	cbi	PORTD,IICC	; SCK="L"
	brcc	PC+3		; Set data to SDA
	cbi	DDRD,IICD	; 
	rjmp	PC+2		; 
	sbi	DDRD,IICD	; /
	 rcall	iic_delay	; Delay
	sbi	PORTD,IICC	; SCK="H"
	 rcall	iic_delay	; Delay
	clc
	rjmp	PC-11

iic_rack:			; Receive ACK/NAK bit into C.
	cbi	PORTD,IICC	; SCK="L"
	cbi	DDRD,IICD	; SDA="P"
	 rcall	iic_delay	; Delay
	sbi	PORTD,IICC	; SCK="H"
	 rcall	iic_delay	; Delay
	clc			; Read SDA into C
	sbic	PIND,IICD	; 
	sec			; /
	ret


;--------------------------------------;
; IIC - Read byte data from slave
;
; Call: None
; Ret:  r16 = read data, C = ACK/NAK


iic_rcvr:
	cbi	DDRD,IICD	; SDA="P"
	ldi	r16,1
	cbi	PORTD,IICC	; SCK="L"
	 rcall	iic_delay	; Delay
	sbi	PORTD,IICC	; SCK="H"
	 rcall	iic_delay	; Delay
	lsl	r16
	sbic	PIND,IICD	; Read SDA into r16.0
	ori	r16,1		; /
	brcc	PC-7
	rjmp	iic_rack


;--------------------------------------;
; IIC timing
;
iic_delay:	; delay for 5.8us 
	push	r16
	ldi	r16,5
	dec	r16
	brne	PC-1
	pop	r16
	ret


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -