📄 uart.c
字号:
#include <stdio.h>
#include "hardware_reg.h"
#include "HA_typedef.h"
#include "uart.h"
#include <stdio.h>
#include "intc.h"
void Prints(char *s,U32 uart_add);
void Uart0IntEn(S8 recie, S8 thrie);
UartResetTest ret_f;
UartRwTest rwt_f;
UartResetTest *ret_pt=&ret_f;
UartRwTest *rwt_pt=&rwt_f;
void UartPcTest(U32 uart_add,U32 sysclk,U32 baudrate,U32 data_bit,U32 tri_level_t,U32 tri_level_r);
/*************************************************************************/
/* FUNCTION */
/* */
/* TestUart */
/* */
/* DESCRIPTION */
/* */
/* 该函数的作用是用来选择UART测试通道对其使能。 */
/* */
/* AUTHOR */
/* */
/* QI Haochun, ASIC&Prochip. */
/* */
/* INPUTS */
/* */
/* char uart_choise */
/* */
/* OUTPUTS */
/* */
/* None */
/* */
/* */
/*************************************************************************/
void TestUart(char uart_choise,U32 *uart_name) //1:为uart0,2:为uart1,3:为uart2,4:为uart3,
{
U32 uart_add;
char uart_int;
switch (uart_choise)
{
case 1:
uart_add = 0x10005000;
uart_int = 24;
break;
case 2:
uart_add = 0x10006000;
uart_int = 23;
break;
case 3:
uart_add = 0x10007000;
uart_int = 22;
break;
case 4:
uart_add = 0x10008000;
uart_int = 21;
break;
default:
uart_add = 0x10005000;
uart_int = 24;
break;
}
*uart_name = uart_add;
MaskIrq(uart_int);
//中断使能
IrqEnable(uart_int);
//UartLoopbackTest(4000000,9600,8,1); //LOOPBACK模式
ReadReg((uart_add + 0x14));
ReadReg((uart_add + 0x08));
WriteReg((uart_add + 0x08), 0x6);
WriteReg((uart_add + 0x10), 0x0);
UartPcTest(uart_add,40000000,9600,8,0,8); //普通模式
//UartInit3(16000000, 9600, 8, 0, 8); //硬件流控模式
UnmaskIrq(uart_int);
}
/*************************************************************************/
/* FUNCTION */
/* */
/* Pmu */
/* */
/* DESCRIPTION */
/* */
/* 该函数的作用是用来配置PMU。 */
/* */
/* AUTHOR */
/* */
/* QI Haochun, ASIC&Prochip. */
/* */
/* INPUTS */
/* */
/* None */
/* */
/* OUTPUTS */
/* */
/* None */
/* */
/* */
/*************************************************************************/
void Pmu(void)
{
int i;
//*************************************************//
//***************** set to normal *****************//
//*************************************************//
*(RP)PMU_PSCR = 0x1ffff; //打开所有时钟
*(RP)PMU_PLTR = 0X00FA00FA;
*(RP)PMU_PMDR = 0X01;
//*(RP)PMU_PMCR = 0x7A8; // 7A8 -- 16M
*(RP)PMU_PMCR = 0x00A; // 00A -- 40M
*(RP)PMU_PMDR = 0x01; //设置为普通工作模式
for (i = 0; i < 10; i++)
;
}
/*************************************************************************/
/* FUNCTION */
/* */
/* WriteReg ReadReg */
/* */
/* DESCRIPTION */
/* */
/* 该函数的作用是用来描述寄存器的读和写。 */
/* */
/* AUTHOR */
/* */
/* QI Haochun, ASIC&Prochip. */
/* */
/* INPUTS */
/* */
/* U32 reg,U32 data */
/* */
/* OUTPUTS */
/* */
/* None */
/* */
/* */
/*************************************************************************/
/********************write and read registers*****************************/
void WriteReg(U32 reg,U32 data)
{
*(RP)reg = data;
}
U32 ReadReg(U32 reg)
{
return (*(RP)reg);
}
/*************************************************************************/
/* FUNCTION */
/* */
/* UartReset */
/* */
/* DESCRIPTION */
/* */
/* 该函数的作用是用来测试寄存器的复位值。 */
/* */
/* AUTHOR */
/* */
/* QI Haochun, ASIC&Prochip. */
/* */
/* INPUTS */
/* */
/* U32 DLBL,U32 RxFIFO,U32 TxFIFO,U32 DLBH,U32 IER, */
/* U32 IIR,U32 FCR,U32 LCR,U32 MCR,U32 LSR,U32 MSR. */
/* */
/* OUTPUTS */
/* */
/* 1 */
/* 0 */
/* */
/*************************************************************************/
/********************test point 1:test reset values of all registers******/
/*************************************************************************/
U32 UartReset(UartResetTest *urt_pt)
{
if ( (ReadReg (urt_pt->DLBL)==0)
&&(ReadReg (urt_pt->RxFIFO)==0)
&&(ReadReg (urt_pt->TxFIFO)==0)
&&(ReadReg (urt_pt->DLBH)==0)
&&(ReadReg (urt_pt->IER)==0)
&&(ReadReg (urt_pt->IIR)==0x01)
&&(ReadReg (urt_pt->LCR)==0)
&&(ReadReg (urt_pt->MCR)==0)
&&(ReadReg (urt_pt->LSR)==0x60)
)
return 1;
else
return 0;
}
/*************************************************************************/
/* FUNCTION */
/* */
/* UartRw */
/* */
/* DESCRIPTION */
/* */
/* 该函数的作用是用来测试寄存器的读和写的值。 */
/* */
/* */
/* AUTHOR */
/* */
/* QI Haochun, ASIC&Prochip. */
/* */
/* INPUTS */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -