We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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 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
Hi Dennis, I did a mistake. The board works with 16-bit muxed bus. Not demuxed. Sorry for this, Stefan
Hello Stefan, I've red the thread very carefully, but at the moment I'm a little bit confused about the right configurations for accessing the external RAM. I've an XC164 Starterkit, Rev. 200 without FLASH and I got the RAM not working yet. Do you have an working configuration and because everything depends from everything, I need the DIP Switch configuration, the right settings in Start_A2.a66, the Target configuration and if I have something to code in main(),like special PORT configuration, it was also interesting, to get it. Thank you very much in advance Steffen
Hi Steffen, Board Settings ------------------------ | JUMPERSETTINGS | ------------------------ Jumper 401 ( 1-2 ) ON Jumper 402 ( 1-2 ) ON Jumper 501 ( 1-2 ) ON ------------------------ | DIPSWITCH - SETTING's | ------------------------ DIP102: ======= 1-3 Clock-Configuration: ON OFF ON Fin = 8 - 12 MHz 4-5 SALSEL: OFF OFF 2 Bit Segmentadresslines A17 ... A16 6-7 CSEL: ON OFF 2 CS - Lines 8 WRC: OFF /WR and /BHE work as /WR and /BHE ============================================= SUM: ON OFF ON OFF OFF ON OFF OFF 10100100 ============================================= DIP103: ======= 1-2 Bus-Konfiguration: OFF OFF 16 Bit databus - multiplexed 3-6 Startup Mode: OFF OFF OFF OFF Standart Start 7 Adaptermode: OFF Standartoperation 8 ROC: OFF /RSTOUT remains LOW until deactivation by USER-software ============================================= SUM: OFF OFF OFF OFF OFF OFF OFF OFF 00000000 ============================================= DIP101: ======= 1-8 external memory configuration OFF OFF OFF OFF OFF ON ON OFF /CS0 = ext. RAM /CS1 = ext. FLASH (not usefull)============================================= SUM: OFF OFF OFF OFF OFF ON ON OFF 00000110 ============================================= DIP104/105: =========== These settings depend from the selected segment address lines. For two bit lines SALSEL = OFF OFF ( 2 Bit A17 ... A16 ) set DIP-switches as follows: ============================================= DIP104: ON ON OFF OFF OFF OFF OFF OFF 11000000 DIP105: OFF OFF ON ON ON ON ON ON 00111111 ( allways mirrored ) ============================================= DIP106: ======= 1-4 OFF OFF OFF OFF 0000 Normal program execution ON OFF OFF OFF 1000 bootstraploader mode for programming the micro e.g. with memtool DIP104: ======= 1 2 3 4 Enable/Disable Peripherie | | | | nc nc CAN1 CAN2 for XC164 enable = ON disable = OFF J1850 for XC161 Set as you need Startup file I generated with DAvE. You should enable the EBC and set the phases for CS0 (RAM)timing to: phase a: 0 phase b: 1 phase c: 1 phase d: 0 phase e: 1 phase f: 1 read phase f: 0 write Than no special port settings are required. ( I setup the data/ address port with DAvE too, so it stands in startup file) Hope this helps, otherwise leave a message here and I will answer asap. (But tomorrow ;-} ) Stefan
Hi Stefan, thank you for all the information, it works fine. Based on this, I'll try to get the board working with demultiplexed memory access. Do you think, there are some speed differences between multiplexed and demultiplexed memory access? Best regards Steffen
Hi Steffen, no matter about this. I do not know, whether the layout gives the possibility to work in demultiplexed mode. But if you got it, it would be nice to have a short info about it. Speed differences: Yes there are some, since you have not to need latching the addresses. But since the memory need some cycles per phase, it may be possible that you have to delay the phases in demuxed access mode. So I can not exactly determine, if this would be a really improvement of the time. Stefan
Hi Stefan, I haven't been here for 2 weeks, because of my holidays. That's the reason I haven't replied since [7/24/03 8:07:42]. Now I'm back, so here is my reply: :) I'm using the board in 16-bit demux. This works fine (didn't try 16-bit mux). I just switched the dip switches to the right configuration and changed the CS0-settings in the startup file. Kind Regards, Dennis Ebben
Hi Dennis, thanks for feedback, that will be interested to Steffen too. I never tried the demuxed mode. So I do a test ! I am really thought, that only mux-mode was possible. :-{ If both modes works, this would be great. Stefan. Hi Steffen do you have any results with this ?
Hi Stefan, My board has been shipped with 2 external RAM's. One is routed in mux-mode and one in demux-mode. Depending on the dip-switches one of the two is selected. Works fine here. :) Kind regards, Dennis
Hi Dennis, thanks again man. For the future I should give more attention to the schematics ;-} Stefan It is clear now !!
Hello Stefan and Dennis, I've got the demuxed memory working, but I feel, there are some timing problems. In my configuration the XC164 is running with 40MHz and I use the memory allocation functions. Sometimes malloc returns a NULL pointer and the memory pool is definitivly not empty, because it is the first call after RESET and init_mempool. With multiplexed memory, I hav'nt seen this problem. I use the fast settings from Stefan: phase a: 0 phase b: 1 phase c: 1 phase d: 0 phase e: 1 phase f: 1 read phase f: 0 write and I also tried some slower values, with same result. Another effect is, that UV2 is crashing down and the ULINK interface shows RUN. But maybe it is a temperature problem, it is too hot in Germany at the moment ;-). ... the last 10 times it works, but it's not colder ??? Another problem, I have, is the second serial port from XC164. Everywhere you can read, it is an option for this device, but nowhere I've found a derivative with this option. Has anybody information about this. Stefan, you have mentioned the serial EEPROM on the board and your code. Is it possible, to reuse it? Thanks and bye Steffen
Hi Steffen, no idea about what goes wrong with the timings, if Dennis not could help you with his experiences I would e-mail my project files for muxed mode ( and so my timings ). Please leave your mail-account here. I send my SPI-Routines to you, which works with a terminal program via ASC0 Second ASC interface You can freely use the second ASC interface. The ASC1 is implemented now with all newer derivatives, since Infineon recognized that a second micro line is more daerer than test the second interface on each chip. The best way is to develop the ASC routines with DAvE for XC161 and than copy the related routines to your project, since the DAvE DIP does not included the second ASC at this time. Otherwise you can copy the ASC0 files to ASC1 files, but you have to dadapted the MAIN.H with the addresses of ASC1 interface. Take care to enable the ASC1 device in startup-file. This is one thing that DAvE does wrong !! Stefan
Hi Stefan, I've got the ASC1 not running on my XC164 SK. I've tried your proposals and the software works fine in simulator with settings for XC161. I've also measured some signals on MAX232 with oszi. I've seen the transmit datas (T1 IN and T1 OUT in schematics) for configuration ASC0 , but nothing, if I'll use ASC1 (T2 IN, T2 OUT). So I have to assume, that ASC1 is not available on my XC164 or on my derivative, may be it's production step dependend. My eMail account is Steffen.Niekler@gmx.de Bye Steffen
Hi Steffen, please check your account. I e-mailed the files. Stefan
Hi Stefan, thank you for the code, at the moment I could'nt read it, because our mail server is down. But I got the second serial interface running. The problem were the right port and alternate settings of ASC1. I used the code for XC161, and there are some differences to XC164, because of lower pin count. The solution is:
P3 |= 0x0020; /* SET PORT 3.5 OUTPUT LATCH (TXD1) */ DP3 |= 0x0020; /* SET PORT 3.5 DIRECTION CONTROL (TXD1 OUTPUT) */ DP3 &= 0xFFFD; /* RESET PORT 3.1 DIRECTION CONTROL (RXD1 INPUT) */ ASC1_TIC = 0x80; /* SET TRANSMIT INTERRUPT FLAG */ ASC1_RIC = 0x00; /* DELETE RECEIVE INTERRUPT FLAG */ ASC1_BG = 0x20; /* SET BAUDRATE TO 38400 BAUD @ 40MHz */ ASC1_CON = 0x8011; /* SET SERIAL MODE */ ALTSEL0P3 |= 0x0022; /* Configure port pins for serial interface 1 */
Hi Steffen, well done job! ;-} As I mentioned I got it too some times before. But now you can sure to use your code allways with the new devices. If some questions about my code samples, feel free to contact me. Stefan