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

📄 dsp_uart.c

📁 bf533平台图像采集程序
💻 C
字号:
#include <ccblkfn.h>
#include <cdefBF533.h>
#include <sys\exception.h>			//Interrupt Handling Header
#include "core_timer.h"
#include "delay.h"

#define RECEIVE_NUM (100)

char uart_recv_buffer[RECEIVE_NUM];
int uart_recved_cnt = 0;

volatile unsigned char* head;
volatile unsigned char* tail;

extern int D1;
///////// uart_wait4temt /////////////////////////////////////////////////////

/*****************************************************************************
 *
 *	This function polls the TEMT bit in the LSR register and waits until
 *  all data has been shifted out.
 *
 *  Input parameters: none
 *  Return values: none
 *
 ****************************************************************************/

void uart_wait4temt()
	
{
	unsigned short v;
	
 		
	v = *pUART_LSR;
	
 	while(!(v&0x0040))
	{
		v = *pUART_LSR;
	}		
	
}


EX_INTERRUPT_HANDLER(uart_isr);
EX_INTERRUPT_HANDLER(uart_isr)
{
	unsigned short int v;
	v = *pUART_LSR;

	
	if(v & DR)
	{
		uart_recv_buffer[(uart_recved_cnt++)%RECEIVE_NUM] = *pUART_RBR;
	}
	
	if(v & THRE)
	{
		if(head != tail)	
		{
			*pUART_THR = *head++;
		}
			
		else
		{
			v = *pUART_IIR;
		}
	}
	
}

EX_INTERRUPT_HANDLER(uart_error_isr);
EX_INTERRUPT_HANDLER(uart_error_isr)
{
	unsigned short int v;
	v = *pUART_LSR;

}

void uart_init(int divisor)
{
	unsigned short int v;
	
	
	head = tail = 0;
	
	// enable UART clock. 
	*pUART_GCTL = UCEN;
	
	// Read period value and apply formula:  divisor = period/16*8
	// Write result to the two 8-bit DL registers (DLH:DLL).
	*pUART_LCR = DLAB;
	*pUART_DLL = divisor;
	*pUART_DLH = divisor>>8;

	// Clear DLAB again and set UART frame to 8 bits, no parity, 1 stop bit. 

	*pUART_LCR = WLS(8);	
	
	
	register_handler(ik_ivg7, uart_error_isr);	
	register_handler(ik_ivg10, uart_isr);	
	
	*pSIC_IMASK	|= ( (1<<6) | (1<<14) | (1<<15) );
	
	v = *pUART_RBR;
	v = *pUART_LSR;
	v = *pUART_IIR;
	*pUART_IER = 5;	
}


//int count=0;
//volatile unsigned char *phead;
//volatile unsigned char *pend;
void uart_send(unsigned char* b, int len)
{
	int retry = 2;
	int fail = 0;
	int time;

	
	while(retry-- > 0)
	{		
		*pUART_IER = 0;	
		head = b+1;
		tail = b + len;
	    
	    *pUART_IER = 7;
	    
		*pUART_THR = *b;	
		uart_wait4temt();//i do not very sure this instucion is need?
		
		fail = 0;
		time =ctime;
		while(head != tail)
		{
			if(ctime - time > 10)
			{
				fail = 1;
				*pUART_IER = 5;	
				break;
			}
		}
		
		if(!fail) 
		{
			*pUART_IER = 5;	
			delay(1000);
			break;		
		}
	}
}


int  uart_recv_buffer_proc(unsigned char* uart_recv_buffer)
{
unsigned char* p;

p=0;
p=strstr(uart_recv_buffer,"B01D");//start capture a picture

if(p){
	memset(uart_recv_buffer, 0, 100);
	uart_recved_cnt = 0;
	return 0;	
}
p=0;
p=strstr(uart_recv_buffer,"B070D");// set image size D1

if(p){
	memset(uart_recv_buffer, 0, 100);
	uart_recved_cnt = 0;
	return 1;	
}

p=0;
p=strstr(uart_recv_buffer,"B071D");//set image size CIF

if(p){
	memset(uart_recv_buffer, 0, 100);
	uart_recved_cnt = 0;
	return 2;	
}

p=0;
p=strstr(uart_recv_buffer,"B081D");//set image quality 90

if(p){
	memset(uart_recv_buffer, 0, 100);
	uart_recved_cnt = 0;
	return 3;	
}

p=0;
p=strstr(uart_recv_buffer,"B082D");//set image quality 80

if(p){
	memset(uart_recv_buffer, 0, 100);
	uart_recved_cnt = 0;
	return 4;	
}

p=0;
p=strstr(uart_recv_buffer,"B083D");//set image quality 70

if(p){
	memset(uart_recv_buffer, 0, 100);
	uart_recved_cnt = 0;
	return 5;	
}

p=0;
if(!p)return 8;

}

⌨️ 快捷键说明

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