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

📄 test.asm

📁 基于ti公司TMS320C5416编写的语言程序
💻 ASM
字号:
		.title "ex12"
BSP			.set		0		  ;当前使用McBsp0
;McBsp0 内存映射寄存器
SPSA0		.set    038h          ;定义子地址寄存器映射位置
SPSD0		.set    039h          ;定义子块数据寄存器映射位置
DRR10		.set    021h          ;接收数据寄存器1映射位置
DRR20		.set	020h          ;接收数据寄存器2映射位置 
DXR10		.set    023h          ;发送数据寄存器1映射地址 
DXR20		.set	022h          ;发送数据寄存器2映射地址 
;McBsp1 内存映射寄存器
SPSA1		.set    048h           
SPSD1       .set    049h
DRR11       .set	041h
DRR21       .set    040h
DXR11       .set    043h
DXR21       .set	042h
;McBsp Subaddressed Registers
SPCR1		.set	00h          ;定义SPCR10的映射子地址 
SPCR2		.set	01h          ;定义SPCR20的映射子地址 
RCR1		.set	02h          ;接收控制寄存器1映射子地址 
RCR2		.set	03h          ;接收控制寄存器2映射子地址  
XCR1		.set	04h          ;发送控制寄存器1映射子地址
XCR2		.set	05h          ;发送控制寄存器2映射子地址 
SRGR1		.set	06h          ;采样率发生器寄存器1映射子地址
SRGR2		.set	07h          ;采样率发生器寄存器2映射子地址
MCR1		.set	08h          ;多通道控制寄存器1映射子地址
MCR2		.set	09h          ;多通道控制寄存器2映射子地址
RCERA		.set	0ah          ;接收通道控制寄存器1映射子地址
RCERB		.set	0bh          ;接收通道控制寄存器2映射子地址
XCERA		.set	0ch          ;发送通道使能寄存器A映射子地址 
XCERB		.set	0dh          ;发送通道使能寄存器B映射子地址
PCR			.set	0eh          ;引脚控制寄存器映射子地址

		.if BSP = 0              ;条件汇编,因为5402有两个同步缓冲口如果BSP=0则使用同步缓冲口0  
SPSA	.set	SPSA0            ;由于同步缓冲口采用子地址寻址方式 
SPSD	.set	SPSD0
RDRR	.set	DRR10
RDXR	.set	DXR10
		.endif
		
		.if BSP = 1              ;条件汇编,因为5402有两个同步缓冲口如果BSP=1则使用同步缓冲口1  
SPSA	.set	SPSA1  
SPSD	.set	SPSD1
RDRR	.set	DRR11
RDXR	.set	DXR11
		.endif
		;以下程序是写数据的子程序也就是宏
WR_SUB_REG	.macro val,addr			;写McBsp控制寄存器
			stm addr,SPSA           ;将ADDR的地址写入SPSA
			nop                     ;空操作
			stm val,SPSD            ;将配置值写入SPSD
			nop                     ;空操作  
			.endm
		;以下程序是读数据的子程序也就是宏	
RD_SUB_REG	.macro addr,acc			;读McBsp控制寄存器
			stm addr,SPSA           ;将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			;DSP与AD50的二次通讯(将其最后一位置为1便可)
   		  stm  #01h,RDXR
          WAITTRX
          stm  progword,RDXR
          WAITTRX
          .endm               

         ;以下程序是等待延时子程序
wait     .macro
  	     STM #0400h, AR0
		 RPT *AR0
		 NOP
		.endm 			
		.mmregs               
		.global _c_int00
    	.sect ".vectors"
        ;以下是中断向量表
RESET	b _c_int00          
		nop
		nop
		.space 19*4*16
BRINT0	b recv
		nop
		nop
BXINT0	rete
        nop
		nop
		nop
		.space 10*4*16
         ;以下是主程序
		.text
_c_int00
		ld #0h,DP           ;设置数据页指针为第0页
		stm #0ff00h,SP      ;设置堆栈指针地址为2000H   
		ssbx INTM           ;关闭所有中断 
		ssbx SXM            ;禁止符号扩展方式位。请看ST1寄存器  
		st #7FFFh,SWWSR     ;设置等待寄存器全都设置为7等待
        st #0E8h,PMST     ;设置处理器工作方式状态寄存器 
        st #1007h,CLKMD      ;设置时钟方式寄存器,工作频率为20M(工作频率取决于(高四位+1*10M

⌨️ 快捷键说明

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