?? 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 + -