> and the ADC10DTC0 Register Description says:
> 
> ADC10B1 - ADC10 block one.
> This bit indicates for two-block mode which block is filled
> with ADC10 conversion results. ADC10B1 is valid only after ADC10IFG has
> been set the first time during DTC operation. ADC10TB must also be set
> 0 Block 1 is filled
> 1 Block 2 is filled
> 
> my software test showed up that the Two-Block Transfer Mode section is 
> correct and the ADC10DTC0 Register Description seems to be wrong.
> 
> In my understanding these two descriptions are conflicting.
> What do you think ?

Well, in the copy of slau049f I just downloaded, the description
got changed.  It now says

ADC10B1 Bit 1 ADC10 block one. This bit indicates for two-block mode which 
block is filled
              with ADC10 conversion results. ADC10B1 is valid only after 
ADC10IFG has
              been set the first time during DTC operation. ADC10TB must also 
be set
              0     Block 2 is filled
              1     Block 1 is filled

But the state machine makes it obvious that 0 means "Block 1 is BEING
filled", while 1 means "Block 2 is BEING filled".  That bit is which
block (which I'd rather call 0 and 1) the hardware is working on.
Software gets to look at the other block (which HAS BEEN filled).

I prefer that definition because it also makes overflow behavior clear; if
you take too long to read the output block, the bit will be toggled again.

It also doesn't require that confusing bit about "valid only after
ADC10IFG has been set the first time".  Yes, until the first interrupt,
*neither* has been filled, but the bit *is* valid.  It's not like
you don't have to initialize it properly.

But, more importantly, after staring at the state machine for a bit,
I can see the designer's intentions, so the foibles of the documentation
are less important.

I'd document it as

ADC10B1 Bit 1 ADC10 block one.  This bit indicates, for two-block mode,
              which block is being filled with ADC10 conversion results.
              When the block is complete, it is toggled by hardware at
              the same time as ADC10IFG is set, after which it can
              be used to infer which block has been filled.

              0     Block 1 is being filled (block 2 has been filled)
              1     Block 2 is being filled (block 1 has been filled)


Ooh!  I just spotted the source of confusion!  18.2.7 shows ADC10SA
being written before ADC10DTC1.  I bet a lot of people copied that...

Reply via email to