📄 dsp_uart.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 + -