Little endian on IO output

Good Morning:

I have a project using a 32bits little endian processor but with only

16 bits data bus. How will it behave when it puts data on the data bus. also in little endian mode? And if the data type has length longer than the IO Data bus, how will it normally behave? Does endianness only relate to memory?

Example. short int a = 0x2211, will it puts data with the same order on data[15:00], i.e. D[7:0] = 0x11 and D[15:8]= 0x22, or with exchanged order?

How about a long int a =0x44332211, what will it put on the data bus? ( it seems to me it is compiler dependent)

Thanks in advance

Steven

Reply to
Steven P
Loading thread data ...

Like the datasheet says it does. Given you didn't bother telling anyeone what that 32bit processor actually is, that's the only possible answer.

--
Hans-Bernhard Broeker (broeker@physik.rwth-aachen.de)
Even if all the snow were burnt, ashes would remain.
Reply to
Hans-Bernhard Broeker

It is a ethernet chip from SMSC, LAN91C111. I have thought it can be answered generally in broad sense just like endianess in memory.

Steven

Hans-Bernhard Broeker wrote:

Reply to
Steven P

It is not the memory that has an endian. Try swapping the datalines on memory, try swapping the adresslines on (static-) memory. It is solely the processor that has an endian-ness. I/O tends to be little endian, low byte on low adress. Beside that most IO is 8bit anyway.

Rene

--
Ing.Buero R.Tschaggelar - http://www.ibrtses.com
& commercial newsgroups - http://www.talkto.net
Reply to
Rene Tschaggelar

Thanks for your opinion. I found the answer in another application notes of smsc. It requires byte swap when connecting to a big endian cpu.

Steven

Reply to
Steven P

Nor can the memory endianess be resolved in a word. How many ways can you arrange the 4 octets of a 32 bit word (assuming 8 bit bytes). In actuallity only 2 of those possibilities are most likely, but more do occur. Read your data sheets.

--
 Some informative links:
Reply to
CBFalconer

No. Endianness also relates to byte order in serial transmission.

Most processors number the bit lines from 0 being the lsb, through the largest for the msb. Assuming that is true of your processor, your proposed mapping is correct. Endianness is not an issue for a single word.

Since it only has a 16-bit I/O bus, the bits placed on the bus are the

16 bits written to the I/O port. If you write the 16 least significant bits, that's what will appear on the bus. If you write 32 bits as two 16-bit transfers, it depends on what order you write the 16-bit groups. If you use DMA with ascending address, then the 16-bit groups would be written in memory-address order.
--
Thad
Reply to
Thad Smith

You should really read the data sheet carefully.

Some chips might only support byte access, so you would have to do multiple byte read/writes to read a 16 bit register.

Other devices may require that 16 bit read/writes (using 16 bit short int reference in most cases) to be used, 8 or 32 bit access is not possible. The access must go to an even address regardless if the actual register is 8 or 16 bits wide or if the 8 bit register of interest is in the even or odd address. The CPU endiannes dictates how the 8 bit bytes will end up in your 16/32 bit CPU register.

Note that with peripherals requiring 16 bit access, when there are two unrelated 8 bit registers in an aligned 16 bit word, you must prepare correct values for _both_ peripheral registers (within your CPU register), before performing the 16 bit write to these two 8 bit peripheral registers, even if you actually plan to modify only the other.

Paul

Reply to
Paul Keinanen

Steven P wrote:

The 91C111 is not a processor, as seen from the bus. It runs as a bus slave, not master.

The chip runs perfectly well in 16 bit mode. Actually, the internal registers on the chip are 16 bits in size.

The byte/halfword/fullword accesses are governed by the low address bits (A1 to A3) and the byte enable controls (BE0- to BE3-). For details, please read the data sheet.

The 16 bit data bus is connected so that the least significant bit goes to D0 and the most significant bit goes to D15.

--
In my experience, initializing the MII properly is the most
difficult part in getting this chip work.

HTH
Reply to
Tauno Voipio

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.