Stair56E UART project
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
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<<ch)));//解复位uart模块
|
||||
|
||||
__read_hw_reg32(CPR_LP_CTL , val);
|
||||
val &= ~(1<<(1-ch));
|
||||
__write_hw_reg32(CPR_LP_CTL , val); //关闭uartx时钟保护
|
||||
|
||||
val = (1<<(16+ch+4)) | (1<<(ch+4));
|
||||
__write_hw_reg32(CPR_CTLAPBCLKEN_GRCTL , val); //打开uartx pclk
|
||||
__write_hw_reg32(CPR_UARTx_CLK_GRCTL(ch), 0x110018);
|
||||
//__write_hw_reg32(CPR_UARTx_CLK_CTL(ch), 0x480271);
|
||||
__write_hw_reg32(CPR_UARTx_CLK_CTL(ch), baud>>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");
|
||||
}
|
||||
Reference in New Issue
Block a user