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

📄 dec5502_uart.c.bak

📁 1、该PERIPHERAL文件夹包含五个有关系统外设的程序:DEC5502_USB、DEC5502_LED和DEC5502_UART程序。 2、DEC5502_USB程序主要实现了与PC机应用程
💻 BAK
字号:


/******************************************************************************/
/*  Copyright 2004 by SEED Electronic Technology LTD.                         */
/*  All rights reserved. SEED Electronic Technology LTD.                      */
/*  Restricted rights to use, duplicate or disclose this code are             */
/*  granted through contract.                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*----------------------------------------------------------------------------*/
/* MODULE NAME... Uart and emif												  */
/* FILENAME...... DEC5502_UART.c											  */
/* DATE CREATED.. Wed 6/11/2004 											  */
/* PROJECT....... Communicate with PC througth TL16C752B			  		  */
/* COMPONENT..... 															  */
/* PREREQUISITS.. 															  */
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* DESCRIPTION:  															  */
/*   																		  */
/* This is an example of communication with PC througth TL16C752B	          */
/*----------------------------------------------------------------------------*/

#include <stdio.h>
#include <csl.h>
#include <csl_pll.h>
#include <csl_chip.h>
#include <csl_irq.h>
#include <csl_emif.h>
#include <csl_gpt.h>
#include <csl_emifBhal.h>
#include "UART.h"
#include "type.h"
#include "emif.h"

#define LENGTH 20

/* Function/ISR prototypes */
extern void VECSTART(void);
interrupt void UartIsr(void);
interrupt void Timer0Isr(void);


/* Define receiver data array */
unsigned int ReceivData[LENGTH];
HANDLE	MyUart;
Uint16 EventId0; 		// 定时器0所对应的事件ID号
BOOL PctoDsp = False;

/* Create a TIMER_Handle object for use with TIMER_open */
GPT_Handle 	 hGpt;
Uint16 Counter;
Uint16 i, j;
Uint16 DataCount;
Uint16 	Temp=0;

GPT_Config  MyGptConfig = {
0, 							//Emulation management register
0,		 					//GPIO interrupt control register
0,	 						//GPIO enable register
0,		 					//GPIO direction register
0,		 					//GPIO data register
//0xC4B4, 					//Timer period register 1
//0x4,	 					//Timer period register 2
0x56C4, 					//Timer period register 1		(主频为300MHz)
0x0003,	 					//Timer period register 2
0,							//Timer period register 3
0, 							//Timer period register 4
GPT_GPTCTL1_RMK(			//Timer control register 1
  GPT_GPTCTL1_TIEN_NOT_GATED,
  GPT_GPTCTL1_CLKSRC_VBUS,
  GPT_GPTCTL1_ENAMODE_CONTINUOUS,
  GPT_GPTCTL1_PWID_INACTIVE_1CYCLE,
  GPT_GPTCTL1_CP_CLOCK_MODE,
  GPT_GPTCTL1_INVIN_DONT_INVERT_OUTPUT,
  GPT_GPTCTL1_INVOUT_DONT_INVERT_OUTPUT
  ), 			
GPT_GPTCTL2_RMK(			//Timer control register 2
  GPT_GPTCTL2_TIEN_NOT_GATED,
  GPT_GPTCTL2_CLKSRC_VBUS,
  GPT_GPTCTL2_ENAMODE_CONTINUOUS,
  GPT_GPTCTL2_PWID_INACTIVE_1CYCLE,
  GPT_GPTCTL2_CP_CLOCK_MODE,
  GPT_GPTCTL2_INVIN_DONT_INVERT_OUTPUT,
  GPT_GPTCTL2_INVOUT_DONT_INVERT_OUTPUT
  ), 			
GPT_GPTGCTL1_RMK(			//Global timer control register
  GPT_GPTGCTL1_PSC34_DEFAULT,
  GPT_GPTGCTL1_TIMMODE_DEFAULT,
  GPT_GPTGCTL1_TIM34RS_IN_RESET,
  GPT_GPTGCTL1_TIM12RS_IN_RESET
  ) 	
};

void main(void)
{
	/* Initialize CSL library - This is REQUIRED !!! */
	CSL_init();
	
	/* Set IVPH/IVPD to start of interrupt vector table */
	IRQ_setVecs((Uint32)(&VECSTART)<<1);
	
	/* Config PLL */
	PLL_setFreq(1,		// PLL mode
	 		  0xF, 		// Multiply factor, Valid values are (multiply by 10)
	 		    0,		// Sysclk 0 Divide Down
	 		    1,		// Sysclk1 Divider 150MHz
	 		    3,		// Sysclk2 Divider 75MHz 20ns
	 		    3,		// Sysclk3 Divider
	 		    0);		// CLKOUT3(DSP core clock) divider 300MHz
	
	/* Config EMIF interface for UART register access */
	Emif_Config();
	 
    /* Clear receiver data structure */
    for(i=0; i<LENGTH; i++)
    {
    	ReceivData[i] = 0;
    }
    
    /* Open Timer 0, set registers to power on defaults */
	/* And return handle of Timer 0 */
	hGpt = GPT_open(GPT_DEV0, GPT_OPEN_RESET);
	
	/* Write configuration structure values to Timer control regs */ 
	GPT_config(hGpt, &MyGptConfig); 
	
    /* 打开外扩串口,并获得一个外扩串口的一个句柄 */
    MyUart = uart_open(UART_B);		//UART_B
    
    /* 配置已打开的外扩串口 */
    uart_setup( MyUart, 		
				UARTBAUD9600, 	/* 波特率为9600 bps */
				data_w8, 		/* 数据长度为8		*/
				data_s1, 		/* 数据停止位为1	*/	
				data_po, 		/* 设置奇较验		*/
				fifo_disable, 	/* 禁止fifo			*/
				UartLoop_NO);	/* 取消自闭环方式	*/ 
	
	/* 执行虚读接收保持寄存器和线状态寄存器,清空接收接收保持寄存器和线状态寄存器 */
	Temp = uart_read_reg(MyUart,rhr);
	Temp = uart_read_reg(MyUart,lsr);
	
	/* 设置外扩串口的中断 */		
	uart_interrupt_control( MyUart,	uartint_rhr); 	//设置接收中断
	
	/* 获取定时器所对应的事件ID */
	EventId0 = GPT_getEventId(hGpt);
	
	/* Temporarily disable all maskable interrupts */
	IRQ_globalDisable();   
	
	/* Clear extern user interrupt 1 interrupt enable bit */
	IRQ_disable(IRQ_EVT_INT1);
	IRQ_disable(EventId0);
	
	/* Clear any pending extern interrupt 1 */
	IRQ_clear(IRQ_EVT_INT1);
	IRQ_clear(EventId0);
	
	/* Place interrupt service routine address at */
	/* associated vector location */
	IRQ_plug(IRQ_EVT_INT1, &UartIsr);
	IRQ_plug(EventId0,&Timer0Isr);
	
	/* Enable External User Interrupt #1 */
	IRQ_enable(IRQ_EVT_INT1);  						          
	IRQ_enable(EventId0);
	
	/* Enable all maskable interrupts */
	IRQ_globalEnable();  
    
    /* wait for certain time */
    for(i=0; i<200; i++)
    {}
	 									
	// 将下列数据拷贝到PC机端串口调试助手的发送区内,当程序进入for循环后,选中自动发送
	// 1112131415161718191A1B1C1D1E1F2021222324
	DataCount=0;
	
	while(1)
	{
	 	// Enter system dead-loop and waitting for interrupt 
	 	if(PctoDsp == True)
	 	{
	 		Myuart_Send(MyUart, LENGTH, ReceivData);
	 		PctoDsp = False;
	 	}
	}	
}

/*----------------------外部中断1的中断程序---------------------------------------*/
interrupt void UartIsr(void)		
{   						
 	ReceivData[DataCount] = uart_receive_single(MyUart);
 	DataCount++;
 	if(DataCount>=LENGTH)
	{
		DataCount = 0;
		PctoDsp = True;
	}
}

/********************************************************************/
/*	函数名:		Timer0Isr() 										*/
/* 	功能:		当定时时间到,发送一个命令字符并且字符发送计数器加1	*/
/********************************************************************/
interrupt void Timer0Isr(void)
{
	uart_write_reg(UartChannel,thr,*SendDataPtr++);
	Counter++;
}
				
/****************************************************************************************************/
//	No	more
/****************************************************************************************************/

⌨️ 快捷键说明

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