From: Joao F. <jm...@es...> - 2001-11-23 09:56:35
|
Hello all, I´m using an P89C51RD+ microcontroler. It's an 8051 based uc with serial programming ISP. I have attached it's data-sheet. The micro has built in 64K Flash Eprom and 1K RAM (Lower 128B + Upper 128B + 768B of Expanded Internal RAM - ERAM). From page 29 of the data-sheet one can see that this ERAM area can be accessed with MOVX instructions and special bit EXTRAM cleared. Let's assume the general case of an application in which one wishes to use both the internal 1K and also some amount of external ram, for example another 1K. Is there any kind of support in SDCC for this feature? If my application needs more than 1K of RAM is sdcc capable of using both externall and internal in any way ? Or would I have to use some tricks..... maybe it is as simple as permanentlly clearing the EXTRAM bit...??? Is this right ??? Do I have to tell sdcc where the external ram begins with the command line options ??? ....or would it work just the same... I'm not an expert in 8051 so this might be a simple answer.... but right now I'm quite confused... Can anyone give me some hints on this subject....?? Thank you. João Ferreira. |
From: Karl B. <ka...@tu...> - 2001-11-23 18:25:25
|
Hi Joao, I plan on using this device myself in the near future, looks like a neat chip(flash, extra ram). I have not studied the data sheet, but here is my guess as to how you=20 use it. If you have added RAM, then you are probably adding something a lot more than the built in 768 bytes(8K,32K,64K). So the easy solution is to just not use the 768 bytes, turn it off and ignore it. Otherwise, I would guess that you would need to decode your add on ram at some location which is not where the 768 bytes are. You could use the --ram-loc(or whatever the option is) to setup your main body of ram. Then perhaps use the small 768 bytes using explicit xdata pointers like: xdata char *my_768buf at 0x0000; cheers, Karl. Joao Ferreira wrote: >Hello all, > >I=B4m using an P89C51RD+ microcontroler. It's an 8051 based uc with seri= al >programming ISP. I have attached it's data-sheet. > >The micro has built in 64K Flash Eprom and 1K RAM (Lower 128B + Upper 12= 8B + >768B of Expanded Internal RAM - ERAM). > >>From page 29 of the data-sheet one can see that this ERAM area can be a= ccessed >with MOVX instructions and special bit EXTRAM cleared. Let's assume the >general case of an application in which one wishes to use both the inter= nal 1K >and also some amount of external ram, for example another 1K. Is there a= ny >kind of support in SDCC for this feature? If my application needs more t= han 1K >of RAM is sdcc capable of using both externall and internal in any way ?= Or >would I have to use some tricks..... maybe it is as simple as permanentl= ly >clearing the EXTRAM bit...??? Is this right ??? Do I have to tell sdcc w= here >the external ram begins with the command line options ??? ....or would i= t work >just the same... > >I'm not an expert in 8051 so this might be a simple answer.... but right= now >I'm quite confused... > >Can anyone give me some hints on this subject....?? > >Thank you. >Jo=E3o Ferreira. > > > >_______________________________________________ >Sdcc-user mailing list >Sdc...@li... >https://lists.sourceforge.net/lists/listinfo/sdcc-user > > |
From: Alex K. <Alex@Karahalios.org> - 2001-11-23 18:45:22
|
Hello Jo=E3o, On Friday, November 23, 2001, at 02:49 AM, Joao Ferreira wrote: > I=B4m using an P89C51RD+ microcontroler. It's an 8051 based uc with = serial > programming ISP. I have attached it's data-sheet. > I'm using the P89C51RD+ also with SDCC. Although I don't have memory = past=20 the 768 bytes of XDATA, I do have a memory mapped device at about 0xE000=20= in XDATA space. > The micro has built in 64K Flash Eprom and 1K RAM (Lower 128B + Upper=20= > 128B + > 768B of Expanded Internal RAM - ERAM). > >> =46rom page 29 of the data-sheet one can see that this ERAM area can = be=20 >> accessed > with MOVX instructions and special bit EXTRAM cleared. Let's assume = the > general case of an application in which one wishes to use both the=20 > internal 1K > and also some amount of external ram, for example another 1K. Is there = any > kind of support in SDCC for this feature? If my application needs more=20= > than 1K > of RAM is sdcc capable of using both externall and internal in any way = ?=20 > Or > would I have to use some tricks..... maybe it is as simple as = permanentlly > clearing the EXTRAM bit...??? Is this right ??? Do I have to tell sdcc=20= > where > the external ram begins with the command line options ??? ....or would = it=20 > work > just the same... > OK, what you want to do should work with very little effort. The = P89C51RD+ will automatically access the internal RAM unless you are accessing = XDATA=20 above 7936(0x1f00), in which case it will perform the proper external=20 operations. This is with the EXTRAM bit cleared. Also, the EXTRAM bit is=20= clear when the processor powers up, so you won't need to clear it in = your=20 program. If you want to access XDATA past the 7936 spot you would have to tell = the=20 compiler where the data is with a statement such as: xdata at 7936 int myData; To allow the compiler to allocate space automatically for the chip's=20 internal XDATA, you can use a statement which does not specify a = starting=20 point such as: xdata int myInternalData; There is also a compiler option --xram-loc which let's you specify where=20= the XDATA starts. This is useful, but it only specifies one place where=20= the XDATA is located and thus if you want to use both the internal XDATA=20= and the offchip XDATA you will still have to resort to manually = specifying=20 where the data is. Although I have not tried this, you could also allocate some space to = fill=20 the area of the space past the 768 bytes and the 7936 bytes (since your=20= part has no RAM there). For example, xdata at 768 char filler[7936-768]; Maybe the compiler would allocate variables before and after this area? = It' s easy to try out. Just look at the generated .map file to see how the=20= memory is allocated. Hope this helps, Alex Karahalios |
From: <MSoegtrop@Michael-Soegtrop.de> - 2001-11-26 08:56:46
|
Hello there, i would prefer a link to a datasheet rather than an attachment. Some of the subscribers of this news-group might have an ISDN connection or slower, and for them it will take about a minute or longer to receive a 300kB attachment (blown up by MIME encoding). A link is equally effective for those who want to have a look at the attachment, but avoids taking time from thos who won't. Best regards, Michael |
From: Martijn v. B. <pi...@do...> - 2001-11-29 09:22:00
|
Alex Karahalios wrote: > > The micro has built in 64K Flash Eprom and 1K RAM (Lower 128B + Upper > > 128B + > > 768B of Expanded Internal RAM - ERAM). > OK, what you want to do should work with very little effort. The P89C51RD+ > will automatically access the internal RAM unless you are accessing XDATA > above 7936(0x1f00), I think this is an error. The Rx+ (Or RD2, for that matter) will address "Internal XRAM" when the address is below 256 (for the RC+) or 768 (for the RD+). Accesses beyond that go to external XRAM. This whole situation changes when the EXTRAM bit is set. I wonder if it's worthwhile to use the range from 0 to 768 'twice' (once in internal XRAM, once in external XRAM). The main idea about this 'internal XRAM' is that P0 and P2 are still available when it is used. The 256 bytes of IRAM is a little scarce for quite a few applications, while 1K would've sufficed. -- Martijn van Buul - Pi...@do... - http://www.stack.nl/~martijnb/ Geek code: G-- - Visit OuterSpace: mud.stack.nl 3333 Kees J. Bot: The sum of CPU power and user brain power is a constant. |
From: Joao F. <jm...@es...> - 2001-11-23 11:06:06
Attachments:
P89C51RC_P89C51RD_7.pdf
|
In my latest message about p89c51rd+ i forgot to attach the data-sheet. I'm sorry. Here goes. João Ferreira |