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

📄 z16f_lowuart.s

📁 這是一個實時嵌入式作業系統 實作了MCS51 ARM等MCU
💻 S
字号:
/************************************************************************* * arch/z16/src/z16f/z16f_lowuart.asm * Z16F UART management * *   Copyright (C) 2008 Gregory Nutt. All rights reserved. *   Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * 3. Neither the name NuttX nor the names of its contributors may be *    used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSeqUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * *************************************************************************//************************************************************************* * Included Files *************************************************************************/#include <nuttx/config.h>#include "chip/chip.h"#include "common/up_internal.h"#ifdef CONFIG_USE_LOWUARTINIT/************************************************************************* * External References / External Definitions *************************************************************************/	xdef	_z16f_lowuartinit	xref	_SYS_CLK_FREQ:EROM#ifdef CONFIG_Z16_LOWPUTC	xdef	_up_lowputc#endif#ifdef CONFIG_Z16_LOWGETC	xdef	_up_lowgetc#endif/************************************************************************* * Data Allocation *************************************************************************/	define CODESEG, SPACE=EROM	segment CODESEG/************************************************************************* * Code *************************************************************************//************************************************************************* * Name: z16f_lowuartinit * * Description: *   Initialize UART0 or UART1 * * Parameters: *   None * *************************************************************************/_z16f_lowuartinit:	/* Calculate and set the baud rate generation register */#ifdef CONFIG_UART1_SERIAL_CONSOLE	ld	r3, #CONFIG_UART1_BAUD	/* r3 = Selected UART1 baud */#else	ld	r3, #CONFIG_UART0_BAUD	/* r3 = Selected UART0 (default) baud */#endif	ld	r0, r3			/* r0 = baud */	sll	r0, #3			/* r0 = baud * 8 */	add	r0, #_SYS_CLK_FREQ	/* r3 = freq + baud * 8*/	sll	r3, #4			/* r3 = baud * 16 */	udiv	r0, r3			/* BRG = (freq + baud * 8)/(baud * 16) */#ifdef CONFIG_UART1_SERIAL_CONSOLE	ld.w	Z16F_UART1_BR, r0	/* Z16F_UART1_BR = BRG */	/* Set the GPIO Alternate Function Register Lo (AFL) register */	ld	r0, #%30	or.b	Z16F_GPIOD_AFL, r0	/* Z16F_GPIOD_AFL |= %30 */	/* Enable UART receive (REN) and transmit (TEN) */	clr.b	Z16F_UART1_CTL1 	/* Z16F_UART1_CTL1 = 0 */	ld	r0, #(Z16F_UARTCTL0_TEN|Z16F_UARTCTL0_REN)	ld.b	Z16F_UART1_CTL0, r0	/* Z16F_UART1_CTL0 = %c0 */#else	ld.w	Z16F_UART0_BR, r0	/* Z16F_UART0_BR = BRG */	/* Set the GPIO Alternate Function Register Lo (AFL) register */	ld	r0, #%30	or.b	Z16F_GPIOA_AFL, r0	/* Z16F_GPIOA_AFL |= %30 */	/* Enable UART receive (REN) and transmit (TEN) */	clr.b	Z16F_UART0_CTL1 	/* Z16F_UART0_CTL1 = 0 */	ld	r0, #(Z16F_UARTCTL0_TEN|Z16F_UARTCTL0_REN)	ld.b	Z16F_UART0_CTL0, r0	/* Z16F_UART0_CTL0 = %c0 */#endif	ret				/* Return */#endif /* CONFIG_USE_LOWUARTINIT *//************************************************************************* * Name: _up_lowputc * * Description: *   Send one character to the selected serial console * * Parmeters: *   r1 = character * * Return: *   None * * Modifies r0 (and maybe r1) * *************************************************************************/#ifdef CONFIG_Z16_LOWPUTC_up_lowputc:	/* Check if the character to output is a linefeed */	ext.ub	r0, r1			/* r0=Character masked to 8-bits */ 	cp	r0, #10			/* Is it a linefeed ('\n') */	jp	ne, _z16f_xmitc		/* No? Jump to _z16f_xmitc with character in r1 */	/* Output a carriage return before the linefeed */	ld	r1, #13			/* Output carriage reuturn ('\r') */	call	_z16f_xmitc		/* Call _z16f_xmitc with r1='\r' */	ld	r1, #10			/* Restore r1=linefeed to output */					/* Fall through to _z16f_xmitc with linefeed in r1 *//************************************************************************* * Name: _z16f_xmitc * * Description: *   Send one character on the selected port (really a part of up_lowputc) * * Parameters: *   r1 = character * * Return: *   None * * Modifies r0 * *************************************************************************/_z16f_xmitc:_z16f_xmitc1:	ld	r0, Z16F_UARTSTAT0_TDRE		/* TDRE=Transmitter Data Register Empty */#ifdef CONFIG_UART1_SERIAL_CONSOLE	tm.b	Z16F_UART1_STAT0, r0		/* r0 = Z16F_UART1_STAT0 */	jp	eq, _z16f_xmitc1 		/* While (!(Z16F_UART1_STAT0 & TDRE)) */	ld.b	Z16F_UART1_TXD, r1		/* Z16F_UART1_TXD = r1 (character) */#else	tm.b	Z16F_UART0_STAT0, r0		/* r0 = Z16F_UART0_STAT1 */	jp	eq, _z16f_xmitc1		/* While (!(Z16F_UART0_STAT0 & TDRE)) */	ld.b	Z16F_UART0_TXD, r1		/* Z16F_UART0_TXD = r1 (character) */#endif	ret					/* Return */#endif /* CONFIG_Z16_LOWPUTC *//************************************************************************* * Name: _up_lowgetc * * Description: *   Get a character from the serial port * * Parmeters: *   None * * Return *   R0 = Character read * *************************************************************************/#ifdef CONFIG_Z16_LOWGETC_up_lowgetc:_up_lowgetc1:	ld	r0, #Z16F_UARTSTAT0_RDA		/* RDA=Receive data available */#ifdef CONFIG_UART1_SERIAL_CONSOLE	tm.b	Z16F_UART1_STAT0, r0	jp	eq, _up_lowgetc1		/* While (!Z16F_UART1_STAT0 & RDA)) */	ld.ub	r0, Z16F_UART1_RXD		/* r0 = Z16F_UART1_RXD */#else	tm.b	Z16F_UART0_STAT0,r0		/* While (!Z16F_UART0_STAT0 & RDA) */	jp	eq, _up_lowgetc1	ld.ub	r0, Z16F_UART0_RXD		/* r0 = Z16F_UART0_RXD */#endif	cp	r0, #%0d			/* Test for '\r' */	jp	eq, _up_lowgetc2	cp	r0, #%0d			/* Test \r + high bit */	jp	ne, _up_lowgetc3_up_lowgetc2:	ld	r0, #%0a			/* Convert '\r' to '\n' */_up_lowgetc3:					/* Return value in r0 */	ret					/* Return */#endif	end

⌨️ 快捷键说明

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