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

📄 lf.asm

📁 DSP 语音录放程序
💻 ASM
字号:

;McBsp 内存映射寄存器
SPSA0		.set    038h
SPSD0		.set    039h
DRR10		.set    021h
DRR20		.set	020h
DXR10		.set    023h
DXR20		.set	022h

SPSA1		.set    048h
SPSD1       .set    049h
DRR11       .set	041h
DRR21       .set    040h
DXR11       .set    043h
DXR21       .set	042h
;McBsp Subaddressed Registers
SPCR1		.set	00h
SPCR2		.set	01h
RCR1		.set	02h
RCR2		.set	03h
XCR1		.set	04h
XCR2		.set	05h
SRGR1		.set	06h
SRGR2		.set	07h
MCR1		.set	08h
MCR2		.set	09h
RCERA		.set	0ah
RCERB		.set	0bh
XCERA		.set	0ch
XCERB		.set	0dh
PCR			.set	0eh
SPSA	.set	SPSA0
SPSD	.set	SPSD0
RDRR	.set	DRR10
RDXR	.set	DXR10

		
WR_SUB_REG	.macro val,addr			;写McBsp控制寄存器
			stm addr,SPSA
			nop
			stm val,SPSD
			nop
			.endm
			
RD_SUB_REG	.macro addr,acc			;读McBsp控制寄存器
			stm #:addr:,SPSA
			nop
			ldm SPSD,acc
			nop
			nop
			nop
			.endm

WAITTRX   .macro					;等待串口中断
WAITR?
        RD_SUB_REG SPCR1,A
        and #1<<1, A
        bc   WAITR?, AEQ
          .endm

PROGREG   .macro progword			;与AD50二次通讯
     
 		stm  #01h,RDXR
        WAITTRX
        stm     #:progword:,RDXR
        WAITTRX
          .endm               


wait   .macro
  		STM #0008h, AR0
		RPT *AR0
		NOP
		.endm 			

		.mmregs
		.global _c_int00

  
		.sect ".vectors"

RESET	bd _c_int00
		stm #1000h,SP
		.space 19*4*16
BRINT0	b recv
		nop
		nop
BXINT0	b trans
		nop
		nop
		.space 10*4*16
		.text
_c_int00
		ld #0h,DP
		stm #1000h,SP
		ssbx INTM
		ssbx SXM
        st #7fffh,SWWSR
        st #0ffe0h,PMST
        st #0f000h,CLKMD
        stm #1000h,AR1
    	stm #1000h,AR2
mcbsp_init							;初始化McBsp串口
        rsbx CPL
	    nop                 ; cpl latency
    	nop                 ; cpl latency
     	nop                 ; cpl latency
     	ld   #0, DP              
     	ssbx INTM      
     	ssbx SXM  
		WR_SUB_REG #0000H,SPCR1
		WR_SUB_REG #0200H,SPCR2
		WR_SUB_REG #000CH,PCR
		WR_SUB_REG #0000H,SPCR1
		WR_SUB_REG #0000H,SPCR2
		WR_SUB_REG #0040H,RCR1		;16 BITs
		WR_SUB_REG #0004H,RCR2		;Ignore FS after the first
		WR_SUB_REG #0040H,XCR1		;16 BITs
		WR_SUB_REG #0004H,XCR2		;Ignore FS after the first
		ld 100,A
		wait
		andm #0ff3fh, 54h			;set interrupts to come from serial ports not DMA
								;by clearing bits 6 and 7 in DMPREC
		stm #0,RDXR
		WR_SUB_REG #0001H,SPCR1		;启动McBsp串口
		WR_SUB_REG #0201H,SPCR2
    	ld 100,A
		wait
		
aic_init
		stm #0h,IMR
		orm #030h,IMR   ; 030h
		stm #0ffffh,IFR
        PROGREG 0000001100000001b
        PROGREG 0000010000010000b 
        PROGREG 010aH				;二次通讯初始化AD50
		PROGREG 0280H
		;PROGREG 0301h
		PROGREG 0408h

		ld RDRR,A
		ld RDRR,A
		
		stlm A,RDXR
		stlm A,RDXR
		rsbx intm
		nop
		nop
		nop
js		nop
		nop
		nop
		b js

recv	ldm RDRR,A				;读取ADC采样数据
		ld #0e000h,b
		sub ar1,b
		bc record,beq			;判断录音是否结束
		stl a,*ar1+				;未结束->录音
		b play					;未结束放音
record	ld #0e000h,b            ;已结束->放音
		sub ar2,b
		bc load,bneq			;录制数据放完,再从头放起
		stm	#1000h,ar2
load    ld *ar2+,a				;加载录制数据
play	and #0fffeh,a			;放音
		stlm A,RDXR
		rete

trans	rsbx XF
		rete 
        .end

⌨️ 快捷键说明

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