Dr Jefyll wrote:
BigDumbDinosaur wrote:
The invalid reads that occur can also adversely affect a device whose internal clock runs asynchronously to the MPU bus cycle. [...]
The 2692 ACIA [...] requires a quiescent period after writing certain registers [...]
To me, this sounds as if the problem is specific to 2692's. In general we wouldn't expect to see a problem simply because a device's internal clock runs asynchronously to the MPU bus cycle. It's just a 2692 thing, right? -- or am I missing something?
Probably not, but you may be reading more into what I said than warranted. Note how I said "can also adversely affect..."
The designer needs to carefully peruse the data sheet for any device that uses a separate clock source to determine if there are constraints on consecutive register writes. The 2692 DUART has this characteristic, as does the SCC2698B octart, which is logically four 2692s on a single die. Both of these parts use a fixed 3.6864 MHz clock to time the baud rate, as well as regulate internal chip operations.
Here's the caveat from the 2692's data sheet:
CRA[7:4] – Miscellaneous Commands
Sequential writes to CR(7:4) should be separated by three edges of the X1 clock.
X1 refers to the 3.6864 MHz clock, which may be generated by a crystal or a can oscillator (I used the latter in the POC design).
CRA (command register A, also CRB for the second UART) is used to set up basic operating parameters. In some cases, it takes three X1 clocks for the setup to complete. If a new value is written into CR prior to the completion of the previous operation, device behavior is undefined, and as I learned with my design, results in improper or no operation. To satisfy that requirement, I insert a 10 millisecond delay between consecutive writes to CR, giving the 2692 more than ample time to complete the internal setup operation.
However, I initially didn't consider the effects of invalid memory bus conditions brought about by the '816 during intermediate operations. A query to NXP confirmed my suspicion that the mere act of placing the register's address on the address bus at the wrong time is sufficient to cause a malfunction. Use of the VDA/VPA logic outputs of the '816 resolved this issue by guaranteeing that no I/O device would be selected unless the address and data buses were truly valid.