/*---------------------------------------------------------------------------------------------------- INCLUDE HEADE FILES ----------------------------------------------------------------------------------------------------*/ #include "Includes.h" /* --------------------------------------------------------------------------------------------------- - 函数名称: Init_uart - 函数功能: UART初始化 - 输入参数: 初始化串口号(0:uart0 1:uart1); 波特率 - 创建日期: 2016-05-26 ----------------------------------------------------------------------------------------------------*/ extern void Init_uart(uint32_t ch , uint32_t baud) { uint32_t val; __write_hw_reg32(CPR_RSTCTL_SUBRST_SW , (1<<(16+ch))); //复位uart模块 __write_hw_reg32(CPR_RSTCTL_SUBRST_SW , ((1<<(16+ch))|(1<>4); __write_hw_reg32(UARTx_TCR(ch) , 0x80); //使能DLAB位 //__write_hw_reg32(UARTx_DLL(ch) , baud); __write_hw_reg32(UARTx_DLL(ch) , baud&0x0F); __write_hw_reg32(UARTx_DLH(ch) , 0); __write_hw_reg32(UARTx_TCR(ch) , 0x03); //清零DLAB位,8个BIT位 __write_hw_reg32(UARTx_FCR(ch) , 0xb7); //接收FIFO半满报中断, 并使能FIFO中断 __write_hw_reg32(UARTx_IER(ch) , 0x01); //打开接收中断 val = UART0_IRQn + ch; NVIC_EnableIRQ((IRQn_Type)val); } /* --------------------------------------------------------------------------------------------------- - 函数名称: UART0_Handler - 函数功能: UART0中断处理函数 - 输入参数: 无 - 创建日期: 2016-05-26 ----------------------------------------------------------------------------------------------------*/ extern void UART0_Handler(void) { uint32_t iWK = 0 ; uint8_t tWK = 0 ; __read_hw_reg32(UART0_IIR , iWK); iWK &= 0x0F; if((iWK != 0x04) && (iWK != 0x0c)) return; __read_hw_reg32(UART0_RBR , tWK); } /* --------------------------------------------------------------------------------------------------- - 函数名称: UART1_Handler - 函数功能: UART1中断处理函数 - 输入参数: 无 - 创建日期: 2016-05-26 ----------------------------------------------------------------------------------------------------*/ extern void UART1_Handler(void) { uint32_t iWK = 0 ; uint8_t tWK = 0 ; __read_hw_reg32(UART1_IIR , iWK); iWK &= 0x0F; if((iWK != 0x04) && (iWK != 0x0c)) return; __read_hw_reg32(UART1_RBR , tWK); #if 1 Uart_Send_Char(1,'R'); Uart_Send_Char(1,'e'); Uart_Send_Char(1,'v'); Uart_Send_Char(1,':'); Uart_Send_Char(1,tWK); Uart_Send_Char(1,'\n'); #endif } /* --------------------------------------------------------------------------------------------------- - 函数名称: Uart_Send_Char - 函数功能: Uart发送一个字符 - 输入参数: 串口号; 要发送的字符 - 创建日期: 2016-05-26 ----------------------------------------------------------------------------------------------------*/ extern void Uart_Send_Char(uint32_t ch, uint8_t c) { unsigned int status; for(; ;) { __read_hw_reg32(UARTx_TSR(ch), status); status &= 0x20; if(status == 0x20) break; } __write_hw_reg32(UARTx_THR(ch), c); } /* --------------------------------------------------------------------------------------------------- - 函数名称: Uart_Send_String - 函数功能: Uart发送一个字符串 - 输入参数: 串口号; 要发送的字符串 - 创建日期: 2016-05-26 ----------------------------------------------------------------------------------------------------*/ extern void Uart_Send_String(uint32_t ch, uint8_t *s) { while(*s != '\0') { Uart_Send_Char(ch, *s++); } } /* --------------------------------------------------------------------------------------------------- - 函数名称: Uart_Send_Buf - 函数功能: Uart发送一个长度为length的uint8_t类型的数组 - 输入参数: 串口号; 要发送的数组,数组长度 - 创建日期: 2019-04-02 - 作 者:陈俊伟 ----------------------------------------------------------------------------------------------------*/ extern void Uart_Send_Buf(uint32_t ch, uint8_t *s,uint32_t length) { while(length--) { Uart_Send_Char(ch, *s++); } } extern void test_uart(void) { gpio_mux_ctl(0,0);gpio_fun_inter(0,0);gpio_fun_sel(0,UART1_RX); gpio_mux_ctl(1,0);gpio_fun_inter(1,0);gpio_fun_sel(1,UART1_TX); Init_uart(1, BAUD_57600); Uart_Send_String(1,"I am uart1...\n"); }