赞助论坛
  • 33174阅读
  • 0回复

sunplus 8202 urat通信口设置方法 [复制链接]

楼层直达
axuey  
发帖
50
精华
0
金币
209
威望
5
贡献
6
好评
12
注册
2008-03-13
楼主    axuey 发表于: 2008-12-27 09:59:14 
[post] note:

1.以下为code中需要整合的地方,这些都是8202与MCU通讯的接口函数。

set.h :       line12
polling.c :     line1423 ,line1631
polling.h :   line34
reset.c :     line69 , line1223    

2.上电reset后,看reser_all()中发送上来的数据是否正常。如果正确就OK!



1.reset.c

#if defined(DVDRELEASE) && !defined(SPHE1000)
  #if defined(QSI_SHOW_ERR_RATE)
    UART0_set_baudrate(BAUDCC(BAUDRATE_DEFAULT, 121500000));
    psprintf(linebuf,"------------Release UART------------\n");
    UART0_puts(linebuf);
  #elif defined(UART_WITHOUT_DEBUG_MODE)//axel 2004/10/19 for the communication with external MCU
    UART0_set_baudrate(BAUDCC(9600, 121500000));
    //psprintf(linebuf,"------------Release UART------------\n");
    //UART0_puts(linebuf);
  #elif defined (MICRO_DVD_UART)
         //UART0_set_baudrate(BAUDCC(9600, 108000000));
         UART0_set_baudrate(BAUDCC(9600, 121500000));
        EPP_PUTC_EXACT(0x2a);
        EPP_PUTC_EXACT(0xd5);
           EPP_PUTC_EXACT(0x14);
           EPP_PUTC_EXACT(0x01);
           EPP_PUTC_EXACT(0x14 ^ 0x01);
           /*
           EPP_PUTC_EXACT(0x2a);
        EPP_PUTC_EXACT(0xd5);
           EPP_PUTC_EXACT(0x12);
           EPP_PUTC_EXACT(0x01);
           EPP_PUTC_EXACT(0x12 ^ 0x01);
           */
  #else
  extern void sft_hvsync();//4-4-6 0:43
  sft_hvsync();     //freyman 2004-2-27 12:01
  #endif
#endif


2.set.h :
#ifdef DVDRELEASE
#define MICRO_DVD_UART
#endif

3.polling.c :                                         06/01/16

#ifdef MICRO_DVD_UART
#include "io_uart0.h"

extern const BYTE ir_mapcode[256];

void polling_MICRO_DVD_UART(void)
{
  static char key_data;
   static BYTE str[5]={0};
   char c;          
   static int nIndex = 0;
#if 1

   if (!IsEPPRxEmpty())
   {
       c = EPP_GETC();
       //EPP_PUTC_EXACT(c);
       //psprintf(RegionValStr[REGION2], "%02x",nIndex);
         //PrintOsdMsg(STR_OS_SPACE, REGION2, 0, 1);
       str[nIndex] = c;
       //psprintf(RegionValStr[REGION2], "%02x",str[3]);
         //PrintOsdMsg(STR_OS_SPACE, REGION2, 0, 1);
       nIndex++;
   }
    if(str[0] != 0x2a)
    {
         nIndex=0;
         return;
    }
   
    if(nIndex > 3 )
    {
        if(
           (str[0]==0x2a)&&(str[1]==0xD5)&&(str[2]==0x4b)//&&(str[4]==(str[3] ^ 0x4b))
          )    
        {
                 key_data = str[3];
        #ifdef NEW_POWER_ON_SWITCH_MEDIA//added by wangwei, 2005-11-10 11:28
        if((key_data == 0x0e) || (key_data == 0x0f))// CARD & USB cmd
        {
          biMcuCmdTempBuf = key_data;
          nIndex=0;
        }
        else
        {
          call_ir_func(ir_mapcode[(BYTE) key_data]);
          nIndex=0;
        }
        #else//NEW_POWER_ON_SWITCH_MEDIA
       
        call_ir_func(ir_mapcode[(BYTE) key_data]);
        nIndex=0;
        #endif//NEW_POWER_ON_SWITCH_MEDIA
           }
           else
           {
               nIndex=0;
           }
       }


#else
//===========================
   switch(nIndex)
   {
       case 0:
           if (!IsEPPRxEmpty())
           {
               c = EPP_GETC();
               EPP_PUTC_EXACT(c);
               str[nIndex] = c;
           }
           if(str[0]==0x2a)
           {
               psprintf(RegionValStr[REGION2], "%02x",nIndex);
                 PrintOsdMsg(STR_OS_SPACE, REGION2, 0, 1);
               nIndex=1;
           }
           else
           {
               nIndex=0;
           }    
           break;
       case 1:
           if (!IsEPPRxEmpty())
           {
               c = EPP_GETC();
               EPP_PUTC_EXACT(c);
               str[1] = c;
           }
           if(str[1]==0xd5)
           {
               psprintf(RegionValStr[REGION2], "%02x",nIndex);
                 PrintOsdMsg(STR_OS_SPACE, REGION2, 0, 1);
               nIndex=2;
           }
           else
           {
               nIndex=0;
           }    
           break;
       case 2:
           if (!IsEPPRxEmpty())
           {
               c = EPP_GETC();
               EPP_PUTC_EXACT(c);
               str[2] = c;
           }
           if(str[2]==0x4b)
           {
               psprintf(RegionValStr[REGION2], "%02x",nIndex);
                 PrintOsdMsg(STR_OS_SPACE, REGION2, 0, 1);
               nIndex=3;
           }
           else
           {
               nIndex=0;
           }    
           break;
       case 3:
           if (!IsEPPRxEmpty())
           {
               c = EPP_GETC();
               EPP_PUTC_EXACT(c);
               str[3] = c;
               key_data = str[3];
               psprintf(RegionValStr[REGION2], "%02x",nIndex);
                 PrintOsdMsg(STR_OS_SPACE, REGION2, 0, 1);
               nIndex=4;
           }
           break;
       case 4:
           if (!IsEPPRxEmpty())
           {
               c = EPP_GETC();
               EPP_PUTC_EXACT(c);
               str[4] = c;
           }
           if(str[4]==(0x4b^str[3]))
           {
               psprintf(RegionValStr[REGION2], "%02x",nIndex);
                 PrintOsdMsg(STR_OS_SPACE, REGION2, 0, 1);
               nIndex=5;
           }
           else
           {
               nIndex=0;
           }    
           break;
       case 5:
                 psprintf(RegionValStr[REGION2], "%02x",nIndex);
                 PrintOsdMsg(STR_OS_SPACE, REGION2, 0, 1);
                 call_ir_func(ir_mapcode[(BYTE) key_data]);
                 nIndex=0;
               break;
       
       default:
           nIndex=0;
           break;
   }
//===========================
#endif                                      
         
4.polling.h :        
#ifdef MICRO_DVD_UART
void polling_MICRO_DVD_UART(void);
#endif[/post]
本帖最近评分记录: 1 条评分