Hi Everybody, I'm still experimenting with Infineon's XC161 Starter Kit using the Keil C166 compiler, v4.27 (linker version 4.28). Almost everything I need works OK now, except the external bus controller. Below I'll describe my situation: Hardware ======== I've connected the RAM to the processor by setting switch S101.8. This is the configuration for the multiplexed mode, so I also switched S103.1 and S103.2 off for 16 bits multiplexed mode. The CS-lines are enabled by off-switching S102.6 and S102.7. I use 4-bit address lines by setting S102.4 and S102.5. S102.8 is switched on to use /WR and /BHE as /WRL and /WRH. Software ======== In the startup file (START_V2.A66) I configured the EBC as follows:
$SET (CONFIG_EBC = 1) _SAPEN EQU 4 _CSPEN EQU 5 _ARBEN EQU 0 _SLAVE EQU 0 _EBCDIS EQU 0 _WRCFG EQU 1 _BYTDIS EQU 0 _ALEDIS EQU 0 _RDYDIS EQU 0 _RDYPOL EQU 0 _APDIS EQU 0 _DHPDIS EQU 0
$SET (CONFIG_CS1 = 1) _ADDR1 EQU 0x400000 _SIZE1 EQU 256*KB _ENCS1 EQU 1 _RDYEN1 EQU 0 _RDYMOD1 EQU 0 _BTYP1 EQU 3 _PHA1 EQU 3 _PHB1 EQU 1 _PHC1 EQU 3 _PHD1 EQU 1 _PHE1 EQU 25 _RDPHF1 EQU 3 _WRPHF1 EQU 3
VALUE PUBLIC SYMBOL NAME REP TGR CLASS SECTION ======================================================================= -- cut -- 3F8000H ?C_NDATABASE CONST --- --- --- -- cut --
Hi again, Replying to my own message to get it on top of the thread list. ;) Yesterday I succeeded in controlling the RAM by using CS0 (in 16 bit demux mode). Off course this works, because CS0 is the default Chip Select and will always be used by the controller when I write to/read from an undefined memory area. Don't know if the other CS's work. On /CS2 I connected an LCD. Didn't get it working already, but that could be a software problem. (I can see a toggling signal on /CS2, as well as on /WR and /RD). Doesn't really anybody know what the weird NDATA-value stands for, I mentioned in my previous post? (see bottom). Kind Regards, Dennis Ebben
Hi Dennis, yes you can only connect CS0 and CS1 at the starter kit board. And CS1 may be, depending on your board version. This because the older versions were shiped out with FLASH and SRAM as external memory. Newer versions come only with SRAM and are connected by default to CS0. All other setting are irrelevant, without hardware modifying (since the CS lines are wired in parallele way . On the other side there is a nice SPI-EEPROM at the solder side, which not many peoples have recogniced. I wrote little bit code for it to read from and write to it. SRAM is working in 16-bit demuxed mode allways (FLASH versions to) and you have set the external RAM (Options for Target) 0x10000 Size=0x20000. I wrote a short code too, to test the SRAM. I have documentation for the board, if you not found on your starter CD-ROM. Concerning the NDATA question I can not answer without have a look at your C-code and the MAP-file. It is in linker/locators responsibility, where the code would be located. It depends from your memory modell. May be the DPP's are changed or the segment pointer is modified. The most simple way I think is to force the locator to lay it in a memory area, which really is in use. For more information I need some details more. Stefan
Hi Stefan, Thanks for your response. On the board I can see the following text: "XC16Board REV 200". This board is shipped without flash. There is an ability to place the flash components anyway. A few days ago, I also set my memory settings to [start: 0x10000] and [size: 0x40000]. After that, the board started correctly and everything seems to work OK. This morning I write some vars to the RAM and the returning value also seems to be OK. So I think it works. But it's still weird, I only succeeded doing this on /CS0 and not on /CS1. Why did you mention the SPI-EEPROM? Any special reason? Talking about EEPROM's: I'm using FRAM's from Ramtron (FM24C256). Used them before and very satisfied with them. If you don't know them: They are pin-compatible with 24xxx-EEPROM's, controlled by an I2C-bus, and can be written/read as much as you like. :) Does the RAM only work in 16 bits demux?? I thought the board could work in all 4 modes. When I look to the wiring in the schematics of the board, I would say this shouldn't be a problem. My board was shipped with a CD-ROM and I do have the schematics and also a Hardware Manual. I don't know what it is with the weird NDATA-values, but they appear everytime I configure external RAM. If I don't configure external RAM, the values is 004000H. I think that's also an undefined area, cause it isn't in internal processor RAM. Here's a dump of the weird value when I DO configure external RAM:
C00000H ?C_NCONSTBASE CONST --- --- --- 0000C0H ?C_NCONSTBASESEG CONST --- --- --- 008000H ?C_NDATABASE CONST --- --- --- 000000H ?C_NDATABASESEG CONST --- --- ---
Hi Dennis, there was no special reason for the SPI_EEPROM, but I have metioned it, because, with only RAM and one LED on the board you have not so many options to "start up". Now I use external hardware too. The boards as shipped out are working with 16 bit demultiplexed bus. CS0 is wired to the SRAM and CS1 to the (optional)FLASH.
C00000H ?C_NCONSTBASE CONST --- --- 0000C0H ?C_NCONSTBASESEG CONST --- --- 008000H ?C_NDATABASE CONST --- --- 000000H ?C_NDATABASESEG CONST --- ---
Hi Dennis, me again. I found out what the ?C_NDATABASE means. Have a look at system manual on memory organization and find in segment 0 that the area from 0x0000 to 0x8000 is external memory area. 0x8000 is a base adresse for calculating addresses of internal RAM and SFR for linker MAP file. Stefan
Hi Stefan, Yes, you're right about the starter kit. The kits that have been made in the past (by Phytec) all had more I/O on board, like I2C-components, more LED's, etc. I'm missing these things on this board. It's indeed not easy starting up, this way. I had looked in the system manual already and saw the area you mentioned. But that still doesn't explain the 3F'8000 value for ?C_NDATBASESEG in some cases, because there's nothing on that address. No memory, no I/O. Don't know why Keil creates this value. Because my software works OK, in spite of these values, I've decided to ignore them. Stefan, thanks again (second time now) for all your help and time. Things are clear to me again. :) Kind regards, Dennis
Hi Dennis, thanks for this, but no matter. OK I found out what is the meaning of ?C_NDATABASE and ?C_NDATABASESEG. I configured my program as yours regarding the hardware. For the following it can be usefull to have a look to system user manual section 4.5. Data adressing. As you know the code is accessed by segments ( a 64kBytes each ) and data memory with pages ( a 16k each ). So you have for pages per segment. First you should ensur that your ?C_PAGEDPPx are the following values:
000000H ?C_PAGEDPP0 000301H ?C_PAGEDPP1 000100H ?C_PAGEDPP2
3F'8000h is 0011 1111 1000 0000 0000 0000 where 00 0000 0000 0000 is Page offset (14-bit) 10 selects DPP2 in DPP2 you find value 100 (10-bit) 01 0000 0000 now we will assemble the real address (it results in 10-bit DDP2 value and 14-bit page offset) 0100 0000 0000 0000 0000 0000 ( 24 - bit ) in HEX it is 40'0000h your NDATA area in RAM ! Thats where the DPP2 points by default after startup. Let's do for DPP1 (301h) 11 0000 0000 ( 10-bit ) 01 00 0000 0000 0000 01 is DPP1 00 0000 0000 0000 is Page offset. for Segment : Offset 8-bit : 16-bit 1100 0000 : 0100 0000 0000 0000 C 0 4 0 0 0 C0'4000 the DPP1 points to you MAIN routine, you find in map file as C04000h ...... ?NC?MAIN.
Hi Stefan, I never really understood the DPP's. I think that it's really clear now (also to other readers of this thread). Thanks again. :) What version of the datasheets do you use?? You mentioned chapter 4.5 (which is correct in version v1.1, feb 2002). Since the release of that manual there have been released 2 new versions: * v2.0, 3-2003 * v2.1, 6-2003 The last one is the one I use now. In this version it's chapter 4.7 that handles about data addressing. There are still some things that cannot be found in the new manuals, like the ADC-bug that's also known from the XC164 (ADBSY is set after x clock cycles, not immediately after starting an ADC-conversion). Kind Regards, Dennis
Hi Dennis, cool that you understand now the DPP's. It is really not complicated. I need at my start two times and than I calculated three examples and now I have it. ( If questions concerning to this, do not hesitate to ask me ) I used the XC167 manual for this, since the register mappings are similar. So if you write a program for a module, which is available on the other XC16x too, you can be sure in 98% of cases it will run there. So at XC161 the CAPCOM6 will not work and at XC164 the I2C module. Bugs, problems and workaround (if any) you can find in the errata sheets. Please have additional a look of the step code of your device. But you are right with the manuals specially for XC161. There in the new version is the complete description of SCU missing. I reported to Infineon and it will be updated with next release. Stefan
Hi Stefan, I know that the other XC16x devices are almost the same, but it's weird that there isn't any link on the site on the XC161 page to errata sheets of the other (similar) devices. Also the starter kit isn't described on the Infineon site. The info about this controller and applications are really poor. But perhaps this will change in the future, for it's a new controller. Does Infineon also have a forum, like Keil? If so, maybe we can discuss this there. :) Kind Regards, Dennis
Hi Dennis, Infineon unfortunately has no discussion forum, so we have to discuss here, or we can do it by mail. The kit indeed is only described at the CD-ROM you find at the kit. But I wonder, that the eratas are not on the web, since I got them from there. I can mail you the last I have, if you are interested. Stefan
Hi Stefan, I've only found XC164 and XC167 errata sheets. No XC161. Searched for them again a few minutes ago, but still couldn't find them. :S Kind Regards, Dennis
Hi Dennis, I send you my Erratas concerning Xc161CJ step AA,AB and AC. Please check your account. Stefan
Hi Stefan, I received your mail with errata sheets. I really can NOT find them on Infineon's site. Even when I log in to My Infineon I still can't find them. Seems like you have more permissions to view/download files than I have. :) Thanks a lot for de documents. I'll read them tomorrow morning. Kind Regards, Dennis
Hi Dennis, it is not your mistake. At the moment there are really no erratas available for XC161CJ. I got them some time before and save them all for such times. ;-} Stefan