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

📄 irquart0.c

📁 一个基于ARM单片机的红外解码的程序,红外时序通过串口发出,是红外解码的一个辅助助手,非常好用.
💻 C
字号:
#include "config.h"
#include "IRQUART0.h"


uint8 rcv_buf[50];
volatile uint8 i=0;
uint8 j=0;

volatile uint8 rcv_new;

void IRQ_UART0(void) __irq
{
//	uint8 m;
	if((U0IIR & 0x0F) == 0x04)
	{
		//while(1);
		rcv_new = 1;
		//for(m=0;m<8;m++)
		{		
			rcv_buf[i] = U0RBR;
			i++;
		}
	}
	
	VICVectAddr = 0x00;
}

void UART0_SendByte(uint8 dat)
{
	U0THR = dat;
	while((U0LSR & 0x20) == 0);
}

void UART0_SendBuf(void)
{
	if(rcv_new == 1)
	{
		rcv_new = 0;	
	while((i>j) && (j<50))
	{
		UART0_SendByte(rcv_buf[j]);
		j++;
	}
	while((U0LSR & 0x20) == 0); 
	if((i==j) || (j>=50))
	{
		i=j=0;
	}
	}
}

int8 UART0_Init(uint32 baud,UARTMODE set)
{
	uint32 bak;

	
	U0LCR = 0x80;
	bak   = (Fpclk>>4)/baud;
	U0DLM = bak>>8;
	U0DLL = bak & 0xff;

	bak = set.datab - 5;
	if(set.stopb == 2)	bak |= 0x04;

	if(set.parity != 0)
	{
		set.parity = set.parity-1;
		bak |= 0x08;
	}
	bak |= set.parity<<4;

	U0LCR = bak;
	i=0;j=0;
	return(1);
}


/*----------------------------------------------------------
void main()
{
	UARTMODE set;

	set.datab = 8;
	set.stopb = 1;
	set.parity = 0;

	rcv_new = 0;

	PINSEL0 |= 0x05;					  //设置IO连接到UART0


	UART0_Init(115200,set);
	//U0FCR = 0x81;	//接收器触发点为8个字符
	U0FCR = 0x01;	//接收器触发点为1个字符

	U0IER = 0x01;	//接收中断开,发送中断关

	//串口0中断设置
	VICVectCntl0 = 0x20|0x06;
	VICVectAddr0 = (uint32)IRQ_UART0;
	VICIntEnable = 1<<0x06;

	VICIntSelect = 0x00;			    //设置所有通道为IRQ中断
}
-----------------------------------------------------------*/

⌨️ 快捷键说明

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