Feature #817
Von Maximilian Seesslen vor 1 Tag aktualisiert
Just for testing:
<pre><code class="cpp">
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);
}
</code></pre>
<pre><code class="cpp">
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);
}
</code></pre>