Projekt

Allgemein

Profil

Feature #817

CAN: Add an more complete calculation for timing again

Von Maximilian Seesslen vor 1 Tag hinzugefügt. Vor 1 Tag aktualisiert.

Status:
Neu
Priorität:
Normal
Zugewiesen an:
-
Zielversion:
-
Beginn:
07.07.2026
Abgabedatum:
% erledigt:

0%

Geschätzter Aufwand:
CS Zielversion:

Beschreibung

Just for testing:

bool calculateRateValues2( int eBitRate, uint32_t &prescaler, uint32_t &seg1, uint32_t &seg2 )
{
   prescaler=1;
   unsigned int clock=HAL_RCC_GetPCLK1Freq();
   unsigned int bitRate=eBitRate;

   seg1=1;
   seg2=1;
   int clocks=(clock / bitRate );

   assert( clocks % 16 == 0 );
   prescaler=clocks/16;

   /*
   while( ( clocks % prescaler ) || ( ( clocks / prescaler ) > 16 ) )
   {
      prescaler++;
      if( prescaler > 32 )
      {
         abort();
      }
   }
   */
   unsigned int quanta=clocks/prescaler;
   printf("Quanta: %d\n", quanta);
   // Round it correctly to seg1 = ( quanta * 85,7% ) - 1

   // Example: 14 * 0,875 = 12,25
   //          14 * 875 =   12250
   //          12250 % 1000 = 250
   int i1=(quanta*875);
   seg1=(i1/1000)-1;
   if( i1 % 1000 >= 500 )
   {
      seg1++;
   }
   static_assert( (int)(16*0.8) == 12 ); // 12.8
   seg2 = quanta - 1 - seg1;

   return(true);
}

Historie

#1

Von Maximilian Seesslen vor 1 Tag aktualisiert

  • Beschreibung aktualisiert (diff)

Auch abrufbar als: Atom PDF