MCU数据处理中的一些心得

来源:互联网 发布:python 创建字典 编辑:程序博客网 时间:2024/05/01 02:13

本文介绍有关数据处理及传输的方法,这些方法在Cypress CY7C29466上应用过,非常稳定.
1/: 接受数据
          中断接受:

#define MAX_BUFFER_SIZE 250
unsigned char data_come_from_xrouter[MAX_BUFFER_SIZE],receive_from_xrouter_len;
#pragma interrupt_handler XRouter_data_input
 void XRouter_data_input()
 {
data_come_from_xrouter[receive_from_xrouter_len] = UART_XTR_bReadRxData(); ;                   
if (++receive_from_xrouter_len == MAX_BUFFER_SIZE)
        receive_from_xrouter_len = 0;     
}
/* Receive data interrupt should be short, recieve data buffer is loop, So it can handle much amount data*/

            


2/: 接受数据的透明模式传送:
     假设MCU中两个UART,一个input, 一个output.透明传输..

unsigned char receive_from_xrouter_pointer;
void psoc_transparent_transceiver(void)
{
           if (receive_from_xrouter_len!= receive_from_xrouter_pointer){
                   UART_BT_PutChar(data_come_from_xrouter[receive_from_xrouter_pointer]);     //send out data 
                   if (++receive_from_xrouter_pointer == MAX_BUFFER_SIZE)
                            receive_from_xrouter_pointer = 0;
           }
 }

/* received data poiner is receive_from_xrouter_len  and send data pointer is receive_from_xrouter_pointer.*/


3/: 接受数据的处理:
             例如:检查在3秒内接受到的数据中是否出现" CHINA"
void psoc_handle_data(void)
{
          unsigned char ch flag,f1=0,f2=0,f3=0,f4=0;    
          receive_from_xrouter_len = 0;
          receive_from_xrouter_pointer = 0;
          timeout = 3000;// timeout is decreased in timer interrupt
          while (timeout){      
                 if (receive_from_xrouter_len!= receive_from_xrouter_pointer){
                           ch = data_come_from_xrouter[receive_from_xrouter_pointer] ;
                           if (ch == 'C')
                                  f1 = 1;
                           else if ((ch =='H') && (f1))
                                  f2 =1;
                           else if ((ch =='I') && (f2))
                                  f3 =1;
                          else if ((ch =='N') && (f3))
                                 f4 =1;
                         else if ((ch =='A') && (f4))
                                flag =1;// found "CHINA"
                        else{
                                f1=0;
                                f2=0;
                               f3=0;
                               f4=0;
                       }
                  if (++receive_from_xrouter_pointer == MAX_BUFFER_SIZE)
                       receive_from_xrouter_pointer = 0;
             }
       }
 }

 

 

 

 

 

 

原创粉丝点击