Jason Armistead

Mixing 8-bit and 16-bit devices on an 8-bit mini-FlexBus (MCF51CN128)

Discussion created by Jason Armistead on Aug 9, 2010
Latest reply on Aug 9, 2010 by Stan Chernikov

Hi everyone


I need to mix both 8 and 16 bit devices on a MCF51CN128 device's Flexbus.  The particular package I have only has a single chip select, so I think I'm forced to use the Flexbus in 16 bit mulitplexed mode, since I still have some 16-bit wide devices I need to talk to.


Now if I want to add an 8 bit peripheral chip, and its registers are sequentially arranged on both even and odd address boundaries, what's the best way to deal with that ? Remember, I only have one chip select, not two, so I don't have the luxury of having one Flexbus chip select for 8 bit and the other for 16 bit.  Nice to dream, but .... no dice !


Section 11.4.3 of the MCF51CN128 Reference Manual (Rev 6, which I think is the latest) shows a 32-bit longword transfer in multiplexed mode.


But what if I'm using a MOVE.B instruction to move a byte of data. Will bytes that are at odd addresses always be output on FB_AD[7:0] and bytes that are at even addresses be output on FB_AD[15:8] ?  The Reference Manual doesn't show a concrete example of what happens, or what happens if I try to access a 16 bit word that is misaligned ?


That looks like it's going to make life tricky for my 8-bit peripherals if I have to add extra logic to steer the data bits back and forth to my peripheral chips D[7:0]


Any thoughts ?


On a related topic, what happens to FB_AD[0] when the Flexbus is in 16 bit mode ?  Is it still driven when an odd memory access is attempted ?  In Section of the Referenec Manual, it says to connect a 16-bit address/16-bit data device to FB_AD[16:1], which makes sense due to it having a 16 bit bus.  But it doesn't explain what FB_AD0 does during the address output period prior to FB_ALE being asserted.