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

📄 uart_init.s54

📁 TMS320C54系列在CCS3.1 下实验教程
💻 S54
字号:
;****************************************************************
;                       RS232 DEMO
;  Copyright (c) 2001 SJTU DSP Tech. Center. All Rights Reserved.
;  History:
;		Date		Authors			
;		2002/08/12	ChenShanrong		
;*****************************************************************

	.mmregs

	.include "uartasm.h54"

	.text
;************************************************
;Function: UART_Init
;Description:
;	Initialize uart chip TL16C550
;Input :
;	None
;Output:
;	None
;************************************************
var_reg		.set	0
off_m		.set	-1
off_p		.set	1

UART_Init:
	frame	off_m

	;reset  bit 4 in cntl2 to select UART as the signal source
	portr	ADDR_CNTL2, *SP(var_reg)
	andm	#0xffef, *SP(var_reg)
	portw	*SP(var_reg), ADDR_CNTL2


	;test for existance
	st	#0x55, *SP(var_reg)
	portw	*SP(var_reg), ADDR_SCR   ;write out
	portr	ADDR_SCR, *SP(var_reg)   ;read back
	ld	*SP(var_reg), A
	sub	#0x55, A, B              ;check for same
	bc	uart_no_error,  BEQ

	;if initial of rs232 meet with error, LED3 shines
	portr	ADDR_CNTL1, *SP(var_reg)
	orm	#0x04, *SP(var_reg)
	portw	*SP(var_reg), ADDR_CNTL1

	b	uart_init_exit


uart_no_error:
	;enable divisor latch(set DLAB) to set baud rate
	st	#0x83, *SP(var_reg)
	portw	*SP(var_reg), ADDR_LCR

	;set baud rate=9600
	st	#0x00, *SP(var_reg)
	portw	*SP(var_reg), ADDR_DIV_MSB	;write DLM(MSB)
	st	#0x18, *SP(var_reg)
	portw	*SP(var_reg), ADDR_DIV_LSB	;write DEC(LSB)

	;disable divisor latch (reset DKAB)
	st	#0x03, *SP(var_reg)
	portw	*SP(var_reg), ADDR_LCR

	;only receive interrupt
	st	#0x05, *SP(var_reg)
	portw	*SP(var_reg), ADDR_IER

	;set FCR
	st	#0x08, *SP(var_reg)
	portw	*SP(var_reg), ADDR_FCR

	;no loopback, no output
	st	#0x00, *SP(var_reg)
	portw	*SP(var_reg) ,ADDR_MCR

	;check LED1 and LED2, then both shut off
	portr	ADDR_CNTL1, *SP(var_reg)
	orm		#0x07, *SP(var_reg)
	portw	*SP(var_reg), ADDR_CNTL1

	;delay some time
	stm		#50, AR1
delay_out_loop:
	stm		#1000, BRC
	rptb	delay_inner_loop-1
	rpt 	#1000
	nop
delay_inner_loop:
	banz	delay_out_loop, *AR1-

	portr	ADDR_CNTL1, *SP(var_reg)
	andm	#0xF8, *SP(var_reg)
	portw	*SP(var_reg), ADDR_CNTL1

uart_init_exit:
	frame	#off_p
	ret

;end of uart_init.s54

⌨️ 快捷键说明

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