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

📄 rsdocument.c

📁 一些很有用的VDHL程序设计例子
💻 C
字号:
//=============================================================
//  文件名称: RSDocument.c
//  实现功能: 串行通讯、各中断服务程序
//  完成日期:  2004,7,19
//==============================================================
#include "SPCE061V004.h"

#define	M_RX_FLAG			0x80
#define M_TX_FLAG			0x40


unsigned int uiRS_Buff;				//串行口接收数据缓存
unsigned int uiRS_ReciveFlag;		//串行口接收数据标识
unsigned int uiTX_Index;			//串行口发送数据缓冲区,发送数据的索引号
unsigned int uiTX_Data_Number;		//本次发送数据的个数	
unsigned int uiTX_Buff[5];			//发送数据缓冲区   暂时设定为10个8bit的数据区域		
//============================================================= 
// 函数名称:    IRQ7()
// 功能描述:	串行中断入口程序
// 语法格式:    void IRQ7(void)
// 入口参数:    无
// 出口参数:    无
// 注意事项:    仅为用户模型
//=============================================================
void InitUART(void)
{
	unsigned int iTest;		//设置的中间量
	__asm("INT OFF");   
	//IOB2 口为外部中断的输入,设置为带下拉的输入口。
	//在IOB口中IOB7为RX   IOB10为TX
	iTest = *P_IOB_Dir;
	iTest |= 0x0400;
	iTest &= 0xff7f;
	*P_IOB_Dir = iTest;
	iTest = *P_IOB_Attrib;
	iTest |= 0x0480;
	*P_IOB_Attrib = iTest;
//	iTest = 0x0004;
//	*P_IOB_Data = iTest;
	
	*P_SystemClock=0x0088;				//系统时钟设置为49.152MHz,并使晶振处于强振状态之下

	//设置串行口    9600   SystemClock:24.576MHz
	*P_UART_BaudScalarLow = 0x00;
	*P_UART_BaudScalarHigh = 0x05;
	*P_UART_Command1 = 0x80;			//使能接收中断,而不打开发送中断
	*P_UART_Command2 = 0xc0;			//使能接收发送管脚
	
	__asm("FIQ OFF");					//
	__asm("IRQ ON");
}	

//============================================================= 
// 函数名称:    IRQ7()
// 功能描述:	串行中断入口程序
// 语法格式:    void IRQ7(void)
// 入口参数:    无
// 出口参数:    无
// 注意事项:    仅为用户模型
//=============================================================
void IRQ7(void)__attribute__((ISR));
void IRQ7(void)
{
	unsigned int Temp;
	Temp = *P_UART_Command2;
	if(Temp & M_RX_FLAG)
	{								//接收中断
		uiRS_Buff=*P_UART_Data;
		if(uiRS_Buff)				//接到到数据非零,则置位表示有数据
			uiRS_ReciveFlag=1;		//没有别的用意,仅仅为本程序设计	
		else						//用户模仿没有意义
			uiRS_ReciveFlag=0;
	}
	else
	{								//发送中断
		uiTX_Index++;
		if(uiTX_Index<uiTX_Data_Number)
		{
			if(uiTX_Index&0x0001) *P_UART_Data = uiTX_Buff[uiTX_Index>>1];
			else *P_UART_Data = (uiTX_Buff[uiTX_Index>>1])>>8;
		}
		else
		{							//缓冲区内数据发送完  关掉发送中断
			*P_UART_Command1 = 0x80; 
		}
	}
}

//============================================================= 
// 函数名称:    UART_SendChar(unsigned int uiNumber)
// 功能描述:	串行数据发送启动程序  
// 语法格式:    void UART_SendChar(unsigned itn uiNumber)
// 入口参数:    uiNumber   要发送的8位数据个数
// 出口参数:    无
// 注意事项:    仅为用户模型
//=============================================================

void UART_SendChar(unsigned int uiNumber)
{
	uiTX_Data_Number = uiNumber;
	*P_UART_Data = uiTX_Buff[0]>>8; 
	uiTX_Index = 0;
	*P_UART_Command1 = 0xc0; 		//开发送中断
}

⌨️ 快捷键说明

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