This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Trouble accessing memory mapped devices

Hi,

I was wondering if anyone could provide help with the following:

Basically I am trying to acces a memory mapped device at location 0x8000H. (I have other devices at other locations also such as 0x8100H and so forth). When A15 is high, this enables my 74LV138 Address decoder which then gives me an active low output depending on my combination of the address inputs (a8, a9, a10). So for this instance when they are all low, my latch is enabled.

The target I'm using is the Analog Devices 831 MicroCOnverter. I've tried accessing the device using the recommended app. note C51: USING MEMORY-MAPPED DEVICES but none of the methods have seemed to work for me. However I feel i have not correctly understood it. WOuld the following be accurate:

volatile unsigned char xdata *p = (char xdata *) 0x8000; (Location of my latch)

...............
.....
p[0] = 0xAA;

With the above statements should i not see the value 10101010 being output on Port 0???? So that my data inputs to the latch are this value????

I am not using any external memory, so I have tied EA pin high, therefore code executes from internal memory on the chip, but i still need my port 0 to generate my data bus for my memory mapped devices.

I would greatly appreciate any help on the topic

Thanking you in advance
David

Parents
  • Using the following:

    volatile unsigned char xdata *p = (char xdata *) 0x8000;
    .
    .
    .
    p[0] = 0xAA;
    

    In slow-motion, what should happen is that 80h is output on P2 and 00h is output on P0. ALE toggles which latches the output from P0 into the LSB of your address buffer. Now, you have the address. The upper byte is on P2 and the lower byte is on the address latch.

    Now, the AAh is output to P0. The /WR line toggles and this writes the AAh into address 8000h.

    Jon

Reply
  • Using the following:

    volatile unsigned char xdata *p = (char xdata *) 0x8000;
    .
    .
    .
    p[0] = 0xAA;
    

    In slow-motion, what should happen is that 80h is output on P2 and 00h is output on P0. ALE toggles which latches the output from P0 into the LSB of your address buffer. Now, you have the address. The upper byte is on P2 and the lower byte is on the address latch.

    Now, the AAh is output to P0. The /WR line toggles and this writes the AAh into address 8000h.

    Jon

Children
No data