⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 东南大学开发ARM7芯片UART模块测试代码
💻 C
📖 第 1 页 / 共 3 页
字号:
#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);
                          //中断使能
	
  	//UartLoopbackTest(9600000,9600,8,1);         //LOOPBACK模式

  	//ReadReg(UART0_LSR);

//  	ReadReg(UART0_IIR);

//  	WriteReg(UART0_FCR, 0x6);

  //	WriteReg(UART0_MCR, 0x0);
 
  	UartPcTest(uart_add,96000000,9600,8,0,8);     //普通模式

    irq_enable(uart_int);
	//UartInit3(96000000, 9600, 8, 0, 8);          //硬件流控模式	 						
  	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 = 0x8C10;     //8C10 -- 16M
  //*(RP)PMU_PMCR = 0x000A;     //000A -- 40M
  *(RP)PMU_PMCR = 0xC00C;       //C00C -- 96M
  *(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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -