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

📄 main.c

📁 本源码是关于中断式的串口通讯测试
💻 C
字号:
#include "config.h"

typedef struct UartMode
{
	uint8 datab;
	uint8 stopb;
	uint8 parity;
}UARTMODE;

uint8 rcv_buf[8];
volatile uint8 rcv_new;

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

void UART0_SendByte(uint8 dat)
{
	U0THR=dat;
}

void UART0_SendBuf(void)
{
	uint8 i;
	for(i=0;i<8;i++)
		UART0_SendByte(rcv_buf[i]);
	while ((U0LSR&0x20)==0);
}

int8 UART0_Init(uint32 baud,UARTMODE set)
{
	uint32 bak;
	
	if((baud==0)||(baud>115200))	return(0);
	if((set.datab<5)||(set.datab>8)) return(0);
	if((set.stopb==0)||(set.stopb>2)) return(0);
	if(set.parity>4) return(0);
	
	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;
	return(1);
}
	
	
int main (void)
{ 
   
    UARTMODE set;
    
    set.datab=8;
    set.stopb=1;
    set.parity=0;
    
    rcv_new=0;
    
    PINSEL0=0x00000005;
    
    UART0_Init(9600,set);
    U0FCR=0x81;
    U0IER=0x01;
    
    IRQEnable();
    VICIntSelect=0x00000000;
    VICVectCntl0=0x20|0x06;
    VICVectAddr0=(uint32)IRQ_UART0;
    VICIntEnable=1<<0x06;
    
    while(1)
    {
    	if(rcv_new==1)
    	{
    		rcv_new=0;
    		UART0_SendBuf();
    	}
    }
      
    return 0;
}















⌨️ 快捷键说明

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