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

📄 port.c

📁 ucos_ii在mini2440上的移植KEIL编译环境
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "port.h"
#include <stdio.h> 
#include <stdlib.h>
#include <string.h>

//*extern nand_control_t my_nand_control;
//*extern control_t my_control; //图片浏览使用

//全局数组
fifobuf_t send_fifobuf_t;
fifobuf_t recv_fifobuf_t;
fifobuf_t recv_file_fifobuf_t;
unsigned char send_fifobuf_data[fifo_send_size];
unsigned char recv_fifobuf_data[fifo_recv_size];
unsigned char recv_file_fifobuf_data[fifo_recv_file_size];

/**
int isfile;
int timer_id_getfile;
int timer_id_check_getfile;
char file_name[50];
*/

void read_work(void)
{

	//*done_show_pit();
	while((UFSTAT0 &0x7f))
	{
		//*if(isfile != 1)//串口命令
		//{
			fifobuf_datain(&recv_fifobuf_t,URXH0);
		//}
		//else//串口接受文件(BMP)
		//{
		//	fifobuf_datain(&recv_file_fifobuf_t,URXH0);			
		//}
	}
	/**
	if(isfile != 1)
	{
		event_start(event_port0_recv);
	}
	else
	{
		//event_start(event_port0_recv_file);	
	}
	*/	
	//LCD_DrawText(0,0,(char *)(recv_fifobuf_t.pdata),40,RGB(255,255,255),RGB(0,0,0));
	//UART_SendBuff(0,recv_fifobuf_t.pdata,recv_fifobuf_t.now_size);
}

void send_work(void)
{
	unsigned char tempdata;
	while(!(UFSTAT0 & (1 << 14)))
	{
		tempdata = fifobuf_dataout(&send_fifobuf_t);
		if(tempdata == 0)//数据取光了
		{
			IRQ_UnInstall(INT_TYPE_INT_TXD0);
			//UTXH0 = tempdata;
			return;
		}
		UTXH0 = tempdata;
	}
}

int UART_Init(int nPort, int nBaudRate, int nDatabits, int nStopbits, int nParity)
{
	int temp_bit = 0;
	if(nPort < 0 || nPort > 2 || nStopbits < 0 || nStopbits > 2|| nDatabits < 5 || nDatabits > 8)
	{
		return -1;
	}	
	GPHCON = 0xAAA0;//设置针脚
	GPHUP = 0xf0;
	if(nPort == 0)//对0号串口进行初始
	{		  
	  //UCON0 = 0x3c5;//有开启异常中断
	  UCON0 = (0<<12)|(2<<10)|(1<<9)|(1<<8)|(1<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0);//无开启异常中断
	  temp_bit = (int)(PCLK/(nBaudRate*16))-1;
	  UBRDIV0 = temp_bit;//设置波特率
	  if(nStopbits == 1 && nDatabits == 5)
	  {
	  	ULCON0 = 0x0;//设置帧格式(字长5位 停止1位 无奇偶)
	  }
	  else if(nStopbits == 1 && nDatabits == 6)
	  {
	  	ULCON0 = 0x1;//设置帧格式(字长6位 停止1位 无奇偶)
	  }
	  else if(nStopbits == 1 && nDatabits == 7)
	  {
	  	ULCON0 = 0x2;//设置帧格式(字长7位 停止1位 无奇偶)
	  }
	  else if(nStopbits == 1 && nDatabits == 8)
	  {
	  	ULCON0 = 0x3;//设置帧格式(字长8位 停止1位 无奇偶)
	  }
	  else if(nStopbits == 2 && nDatabits == 8 )
	  {
	  	ULCON0 = 0x7;//设置帧格式(字长8位 停止2位 无奇偶)
	  }
	  else if(nStopbits == 2 && nDatabits == 7)
	  {
	  	ULCON0 = 0x6;//设置帧格式(字长7位 停止2位 无奇偶)
	  }
	  else if(nStopbits == 2 && nDatabits == 6)
	  {
	  	ULCON0 = 0x5;//设置帧格式(字长6位 停止2位 无奇偶)
	  }
	  else if(nStopbits == 2 && nDatabits == 5)
	  {
	  	ULCON0 = 0x4;//设置帧格式(字长5位 停止2位 无奇偶)
	  }
	  UMCON0 = 0;//不设置流控
	  UFCON0 = (2<<6)|(3<<4)|(0<<3)|(0<<2)|(0<<1)|(1<<0);//设置FIFO	   触发深度都为 32K
	  
	  fifobuf_init(&send_fifobuf_t,send_fifobuf_data,fifo_send_size);	//创建发送缓冲区
	  fifobuf_init(&recv_fifobuf_t,recv_fifobuf_data,fifo_recv_size);	//创建接收缓冲区
	  fifobuf_init(&recv_file_fifobuf_t,recv_file_fifobuf_data,fifo_recv_file_size);	//创建接收缓冲区

	  select_data_buf_init();											//待解析数组初始化	
	}					   
	else if(nPort == 1)
	{
	  //UCON1 = 0x3c5;//有开启异常中断
	  UCON1 = (0<<12)|(2<<10)|(0<<9)|(0<<8)|(1<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0);//无开启异常中断
	  temp_bit = (int)(PCLK/(nBaudRate*16))-1;
	  UBRDIV1 = temp_bit;//设置波特率
	  if(nStopbits == 1 && nDatabits == 5)
	  {
	  	ULCON1 = 0x0;//设置帧格式(字长5位 停止1位 无奇偶)
	  }
	  else if(nStopbits == 1 && nDatabits == 6)
	  {
	  	ULCON1 = 0x1;//设置帧格式(字长6位 停止1位 无奇偶)
	  }
	  else if(nStopbits == 1 && nDatabits == 7)
	  {
	  	ULCON1 = 0x2;//设置帧格式(字长7位 停止1位 无奇偶)
	  }
	  else if(nStopbits == 1 && nDatabits == 8)
	  {
	  	ULCON1 = 0x3;//设置帧格式(字长8位 停止1位 无奇偶)
	  }
	  else if(nStopbits == 2 && nDatabits == 8 )
	  {
	  	ULCON1 = 0x7;//设置帧格式(字长8位 停止2位 无奇偶)
	  }
	  else if(nStopbits == 2 && nDatabits == 7)
	  {
	  	ULCON1 = 0x6;//设置帧格式(字长7位 停止2位 无奇偶)
	  }
	  else if(nStopbits == 2 && nDatabits == 6)
	  {
	  	ULCON1 = 0x5;//设置帧格式(字长6位 停止2位 无奇偶)
	  }
	  else if(nStopbits == 2 && nDatabits == 5)
	  {
	  	ULCON1 = 0x4;//设置帧格式(字长5位 停止2位 无奇偶)
	  }
	  UMCON1 = 0;//不设置流控
	  UFCON1 = (2<<6)|(3<<4)|(0<<3)|(0<<2)|(0<<1)|(1<<0);//设置FIFO	触发深度都为 32K
	}
	else if(nPort == 2)
	{
	  //UCON2 = 0x3c5;//有开启异常中断
	  UCON2 = (0<<12)|(2<<10)|(0<<9)|(0<<8)|(1<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0);//无开启异常中断
	  temp_bit = (int)(PCLK/(nBaudRate*16))-1;
	  UBRDIV2 = temp_bit;//设置波特率
	  if(nStopbits == 1 && nDatabits == 5)
	  {
	  	ULCON2 = 0x0;//设置帧格式(字长5位 停止1位 无奇偶)
	  }
	  else if(nStopbits == 1 && nDatabits == 6)
	  {
	  	ULCON2 = 0x1;//设置帧格式(字长6位 停止1位 无奇偶)
	  }
	  else if(nStopbits == 1 && nDatabits == 7)
	  {
	  	ULCON2 = 0x2;//设置帧格式(字长7位 停止1位 无奇偶)
	  }
	  else if(nStopbits == 1 && nDatabits == 8)
	  {
	  	ULCON2 = 0x3;//设置帧格式(字长8位 停止1位 无奇偶)
	  }
	  else if(nStopbits == 2 && nDatabits == 8 )
	  {
	  	ULCON2 = 0x7;//设置帧格式(字长8位 停止2位 无奇偶)
	  }
	  else if(nStopbits == 2 && nDatabits == 7)
	  {
	  	ULCON2 = 0x6;//设置帧格式(字长7位 停止2位 无奇偶)
	  }
	  else if(nStopbits == 2 && nDatabits == 6)
	  {
	  	ULCON2 = 0x5;//设置帧格式(字长6位 停止2位 无奇偶)
	  }
	  else if(nStopbits == 2 && nDatabits == 5)
	  {
	  	ULCON2 = 0x4;//设置帧格式(字长5位 停止2位 无奇偶)
	  }
	  UMCON2 = 0;//不设置流控
	  UFCON2 = (2<<6)|(3<<4)|(0<<3)|(0<<2)|(0<<1)|(1<<0);//设置FIFO	触发深度都为 32K	
	}

	return 1;
}

int UART_Open(int nPort)//装载回调 开中断
{
	if(nPort < 0 || nPort > 2)
	{
		return -1;
	}
	if(nPort == 0)
	{
		IRQ_SetMask(28,0);//开启串口0一级中断
		IRQ_Install(INT_TYPE_INT_RXD0,read_work);//注册串口0数据接收
		//*event_add(event_port0_recv,select_portdata);//注册事件
		//*event_add(event_switch_data,switch_data);//注册事件
		//*event_add(event_port0_recv_file,get_file);//注册事件

		//*timer_id_check_getfile = TIMER_TS_Create(5000,0,timer_check_isget_file);
		//*timer_id_getfile = TIMER_TS_Create(22000,0,timer_get_pit);
	}
	else if(nPort == 1)
	{
	
	}
	else if(nPort == 2)
	{
	
	}	
	return 1;
}

int UART_Close(int nPort)//回调卸载 关中断
{
	if(nPort < 0 || nPort > 2)
	{
		return -1;
	}
	if(nPort == 0)
	{
		IRQ_SetMask(28,1);
		IRQ_UnInstall(INT_TYPE_INT_RXD0);
	}
	else if(nPort == 1)
	{
	
	}
	else if(nPort == 2)
	{
	
	}
	return 1;
}

int UART_SendBuff(int nPort, unsigned char *pcBuff, int nLength)
{
	int i,index;
	index=0;
	if(nPort < 0 || nPort > 2 || pcBuff == NULL)
	{
		return -1;
	}
	if(nPort == 0 )
	{	
		index=0;
		for(i = 0;i < nLength ; i++)
		{
			if(fifobuf_datain(&send_fifobuf_t,*(pcBuff+index))==0)
			{
				IRQ_Install(INT_TYPE_INT_TXD0,send_work);	
				return -1;
			}
			index++;
		}
		IRQ_Install(INT_TYPE_INT_TXD0,send_work);	 	
	}
	else if(nPort == 1 )
	{
	
	}
	else if(nPort == 2 )
	{
	
	}
	
	return 1;
}

int UART_RecvBuff(int nPort, unsigned char *pcBuff, int nSize)
{
	int i,index;
	unsigned char tempdata;
	index=0;
	if(nPort < 0 || nPort > 2 || pcBuff == NULL|| nSize == 0)
	{
		return -1;
	}
	if(nPort == 0)
	{
		for(i = 0 ; i< nSize; i++)
		{
			tempdata = fifobuf_dataout(&recv_fifobuf_t);
			if(tempdata == 0)
			{
			   return -1;
			}
			*(pcBuff + index) = tempdata;
			index ++ ;
		}
	}
	else if(nPort == 1)
	{
	
	}
	else if(nPort == 2)
	{
	
	}
	
	return 1;
}

/**
int select_portdata()
{
	int flag=0;
	int is_start=0;
	int passdata_len=0;
	int i=0;
	unsigned char temp_buffer[1024]={0};
	unsigned char passdata[fifo_recv_size]={0};

	if(is_show_system != 1 && is_show_file_list != 1)
	{
		show_system_box();		
	}
	LCD_DrawText(215,1,"串口通信",8,RGB(131,223,231),RGB(0,0,0));
	
	delay(300);
	flag=UART_RecvBuff(0,passdata,recv_fifobuf_t.now_size);

⌨️ 快捷键说明

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