ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
1 июля
50522 Топик полностью
cvv (06.02.2006 12:33, просмотров: 1) ответил Max_QNX на спасибо за информацию - я исправлю в исходниках. :).
переделанный мною код DS2480B_ChangeBaud на всякий случай: 
int DS2480B_ChangeBaud watcher_port_t* port, unsigned char newbaud){                                                                 
   unsigned char readbuffer[5],sendpacket[5],sendpacket2[5];                                                                   
   unsigned char rt=FALSE,     sendlen=0,    sendlen2=0;                                                                       
   speed_t newspeed;                                                                                                           
                                                                                                                               
   switch(newbaud){                                                                                                            
        case PARMSET_9600  :newspeed=B9600  ;break;                                                                            
        case PARMSET_19200 :newspeed=B19200 ;break;                                                                            
        case PARMSET_57600 :newspeed=B57600 ;break;                                                                            
        case PARMSET_115200:newspeed=B115200;break;                                                                            
        default:   return UBaud;                                                                                               
    }                                                                                                                          
                                                                                                                               
   if (UBaud == newbaud) return UBaud;  // see if diffenent then current baud rate                                             
   else {                                                                                                                      
      // build the command packet                                                                                              
      check_correct_mode_command(&UMode, sendpacket, &sendlen);// check for correct mode                                       
      sendpacket[sendlen++] = CMD_CONFIG | PARMSEL_BAUDRATE | newbaud;      // build the command                               
                                                                                                                               
      //ответ не читаем ибо он приходит на новой скорости newspeed а uart мы ещё не переключили                                
      if (!FlushWriteCOM(port,sendlen,sendpacket))      // send the packet                                                     
         rt = FALSE;                                                                                                           
      else {                                                                                                                   
         proto_sleep((double)(5)/(double)1000.0);       // make sure buffer is flushed                                         
                                                                                                                               
         watcher_port_set_baud(port,newspeed);          // change our baud rate                                                
         UBaud = newbaud;                                                                                                      
                                                                                                                               
         proto_sleep((double)(5)/(double)1000.0);       // wait for things to settle                                           
                                                                                                                               
         // build a command packet to read back baud rate                                                                      
         sendpacket2[sendlen2++] = CMD_CONFIG | PARMSEL_PARMREAD | (PARMSEL_BAUDRATE >> 3);                                    
                                                                                                                               
         //проверяем корректность отработки предыдущей команды                                                                 
         // send the packet/read back the 1 byte response                                                                      
         if (FlushWriteReadCOM(port,   sendlen2,sendpacket2,   1,readbuffer) == 1)                                             
            {   if (((readbuffer[0] & 0x0E) == (sendpacket[sendlen-1] & 0x0E))) rt = TRUE;  } // verify correct baud           
      }                                                                                                                        
   }                                                                                                                           
                                                                                                                               
   if (rt != TRUE)      DS2480B_Detect(port);   // if lost communication with DS2480B then reset                               
                                                                                                                               
   return UBaud;                                                                                                               
}