📄 uart.c
字号:
#include <stdio.h>
#include "sep4020.h"
#include "uart.h"
#include <stdio.h>
#include "intc.h"
#include "ub4020evb.h"
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(U32 uart_add, U8 uart_int) /*1:为uart0,2:为uart1,3:为uart2,4:为uart3*/
{
mask_irq(uart_int); /*中断使能*/
UartPcTest(uart_add,80000000,9600,8,0,8); /*普通模式*/
irq_enable(uart_int);
unmask_irq(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_PCSR = 0x1ffff; /*打开所有时钟*/
*(RP)PMU_PLTR = 0X00FA00FA;
*(RP)PMU_PMDR = 0X01;
*(RP)PMU_PMCR = 0xC00C; /*C00C -- 96M 000A -- 40M 8C10 -- 16M*/
*(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 */
/* */
/* U32 DLBL,U32 RxFIFO,U32 TxFIFO,U32 DLBH,U32 IER, */
/* U32 IIR,U32 FCR,U32 LCR,U32 MCR,U32 LSR,U32 MSR, */
/* U32 LCR_v1,U32 DLBL_v,U32 DLBH_v,U32 LCR_v2, */
/* U32 T_value,U32 IER_v,U32 FCR_v,U32 MCR_v, */
/* U32 LSR_v,U32 MSR_v */
/* */
/* OUTPUTS */
/* 1 (SEL is 1) */
/* 1 (SEL is 1) */
/* 1 (SEL is 1) */
/* 0 (SEL is 1) */
/* 0 (SEL is 1) */
/*************************************************************************/
/********************test point 2:test write and read value***************/
/*************************************************************************/
U32 UartRw(UartRwTest *urt)
{
WriteReg(urt->LCR,urt->LCR_v1); //SEL is 1
if
(ReadReg(urt->LCR)!= urt->LCR_v1)
return 0;
WriteReg(urt->DLBL,urt->DLBL_v);
if
(ReadReg(urt->DLBL)!= urt->DLBL_v)
return 0;
WriteReg(urt->DLBH,urt->DLBH_v);
if
(ReadReg(urt->DLBH)!= urt->DLBH_v)
return 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -