Brauche dringend Eure Hilfe, denn ich versuche krampfhaft externe Hardware mit dem Adressbus anzusteuern. Der M16c62p scheint im Expanded Memory Mode zu laufen (Mit Logic Analycer aufgezeichnet), das Problem ist nur, dass die von mir beschriebene Hardwareadresse nicht angesteuert wird und die CS1-3 immer H-Pegel haben. Board Glyn EVBM.... RDY,Hold,CS1-3 Pull-up Initialisierung: ;--------------------------------------------------------------------- ; after reset,this program will start ;--------------------------------------------------------------------- ldc #istack_top, isp ;set istack pointer mov.b #03h,0ah ;write protect disable PRCR mov.b #05h,04h ;set processer mode PM0 mov.b #00h,05h ;set processer mode PM1 mov.b #ffh,08h ;CS enable CSR mov.b #55h,1bh ;2 wait state CSE mov.b #00h,0ah ldc #0080h, flg ldc #stack_top, sp ;set stack pointer ldc #data_SE_top, sb ;set sb register ldintb #VECTOR_ADR ;==================================================================== Main: /*Variabeln*/ #pragma ADDRESS Lcd_Dat 10000H volatile unsigned char far Lcd_Dat; #pragma ADDRESS Lcd_Com 10002H volatile unsigned char far Lcd_Com; char text; /*Init System*/ lowlevelinit(); /*Init uC*/ //InitLCD(); /*LCD initialisieren*/ InitUART(0,0X2580); /*Init SIO 0 9600*/ InitUART(1,0X2580); /*Init SIO 1 9600*/ while (1) { Lcd_Com=0x40; } } Ich kapiers nicht mehr. Müsste doch funktionieren
Ich habe mal alle Register nachgeprüft, es müsste eigentlich funktionieren. Hier mal ein Teil von meinem Code, mit dem ich eine Festplatte ansteuere: ncrt0.a30: bset 1,0ah mov.b #05h,04h ;set processer mode to expanded memory mode mov.b #08h,05h ;set reserved area expansion bit (192 to 384Kbytes Flash bclr 1,0ah bset 0,0ah c Programm: csr=1+2+4+16+32 ; //Enable CSs, Wait States: SRAM 0, HDD 1, LCD 1 #pragma ADDRESS IDE_Data 28000H volatile unsigned int far IDE_Data; #pragma ADDRESS IDE_Error 28002H volatile unsigned char far IDE_Error; #pragma ADDRESS IDE_Feature 28002H volatile unsigned char far IDE_Feature; #pragma ADDRESS IDE_Sectorcount 28004H volatile unsigned char far IDE_Sectorcount; #pragma ADDRESS IDE_Sector 28006H volatile unsigned char far IDE_Sector; #pragma ADDRESS IDE_CylinderLow 28008H volatile unsigned char far IDE_CylinderLow; #pragma ADDRESS IDE_CylinderHigh 2800AH volatile unsigned char far IDE_CylinderHigh; #pragma ADDRESS IDE_Device 2800CH volatile unsigned char far IDE_Device; #pragma ADDRESS IDE_Command 2800EH volatile unsigned char far IDE_Command; Allerdings musste ich den uC auf 9MHz runtertakten, da er ansonsten nur Müll gelesen hat, und das LCD nicht mehr initialisierte. Das Bustiming ist verdammt schnell... Das Programm ist für dieses Vektorgrafik Demo mit dem T6963 LCD, oder ? Das lief bei mir nur, wenn das LCD mit <10cm Kabel angeschlossen war. Bei >20cm Kabel ging garnichts.
Danke für deine Antwort Benedikt Den einzigen Unterschied,den ich gefunden habe, ist ,dass du im main das csr beschreibst. csr=1+2+4+16+32 <= in welchem Zahlenformat wird das interpretiert? ( nehme an in dez.). Auf welche Spannung hast du den Byte Pin gelegt? Gibt es noch andere Register, die ich beschreiben muss, damit die aktiviert werden (muss ich ja nicht vor jedem Zugriff selber setzen).
Byte liegt auf Masse, Hold, RDY und NMI hängen über einen 10k Pullup an +5V. Der M16C verzeiht keine Programmierfehler. Wenn im Datenblatt ein Bit mit "Set to 0" beschriftet ist, dann muss das auch so sein. Ich hatte eine Software für den 62p geschrieben, habe danach aber den 62 verwendet, bei dem es ein paar Bits in den Registern nicht gab, die daher auf 0 gesetzt werden sollten. Sowas übersieht man aber mal schnell. Jedenfalls lieferte der ADC nur Müll, wenn das PLL Bit gesetzt war, der interne RAM ging nicht wenn das Wait State Select Bit gesetzt war usw.
Habe ich gleich. CS0 wird nun angesteuert aber CS2 nicht. Die Adresse wird aber auch nie auf den Bus gelegt. Habe heute schon wieder 3 Stunden geübt.
CS2 wird nun wie gewünscht angesteuert. CNVSS war auf dem Glyn Board mit JP5 auf P50/WRL verbunden. Ich glaube, dass ich nun die Stecknadel im Heuhaufen gefunden habe. Seufz
Die Probleme finden kein Ende #pragma ADRESSE LED 30000H volatile unsigned char far LED; void main(void) {while (1) { LED=0xAA; } } Es wird die Adresse 10000h mit CS2 ausgegeben. Wieso? Muss die sect30.inc noch angepasst werden? (HORROR). Giebt es keine einfach Möglichkeit, einen Pointer auf die Adresse zu legen?
Natürlich kannst du Pointer verwenden: char far *LED; LED=(char *) 0x030000; *LED=0xAA; Ist das E hinter ADRESS ein Schreibfehler, oder hast du das auch im Programm so ? Wenn du die Adressen direkt eingibst, musst du an der sect30.inc und ncrt.a30 nichts ändern. Ich verwende 128kB SRAM, und musste den Compiler dazu bringen die Variablen in den entsprechenden Adressbereich zu legen. Da musste ich diese Dateien ändern.
Habe ich im Programm auch so, wobei das hatte keine Auswirkung. Kannst du mir eventuell erklären, wieso bei #pragma ADRESS LED 30000H volatile unsigned char far LED; void main(void) {while (1) { LED=0xAA; } } 10000h ausgegeben wird und bei #pragma register LED 30000H volatile unsigned char far LED; void main(void) {while (1) { LED=0xAA; } } 0F000h ????? bei der sect30.inc verstehe ich nur Bahnhof. Null Durchblick. Ich weis nur, dass das mit der Adress(Speicher)-Aufteilung zu tun hat. :)
Gute Frage, ich hätte noch vor einem halben Jahre gesagt, das ist unmöglich, aber der M16C überrascht mich jedes mal aufs neue... Hast du das mal mit dem Pointer versucht ? Die sect30.inc ist garnichtmal sooo kompliziert: Am Anfang sind die Adressbereiche definiert, wo die Variablen hingelegt werden. Weiter unten kommen dann die Interrupts Da muss für jeden Interrupt entweder ein dummy_int oder eine Name stehen, der dann auch irgendwo im Programm auftaucht.
Bruno! Was hast du mit CNVSS gemacht?? Mein M16c62p will auch nicht in den Memory Mapped Mode!
Bei der Programmierung auf VCC (CNVSS), danach (Run mode)auf GND. Bei der Programmierung auf GND (HOLD), danach (Run mode)auf VCC. /RDY=VCC BYTE=VCC /CS1-/CS3 Pull-up 10kE Gruss Bruno
Danke Bruno! Ich habe das Renesas SKP Board SKP16c62p und möchte dort am CS3 einen CS8900a Ethernbaustein ansprechen! Die RDY Leitung habe ich an der Ethernetcontroller angeschlossen! (Will immer sehen wann er fertig ist) CS3 liegt am AEN des CS8900a und mit 4,7k an VCC; WRL und WRH gehen auf ein 74HC08(AND) und dann an WR des Cs8900 RD geht direkt an den RD des CS8900; HOLD liegt mit 4,7k an VCC; BYTE und CNVss liegen von hause aus mit 10k an GND; BCLK ist frei; NMI ist mit 10k an Vcc Leider kommt nur Schrott aus den Registern des CS8900!!! Adressbereich 0x6000 hier meine Initialisierung : pd8_0 = 1; //RESET /* Enable write to CR and PM */ prc0 = 1; prc1 = 1; /* CPU full speed */ cm1 = V_FAST; cm0 = 0x08; /* Processor mode */ pm00 = 1; pm02 = 1; pm13 = 1; /* Chip select for CS8900 */ cs3 = 1; /* Lock that regs again */ prcr = 0; /* Finally hardware reset the CS8900 */ p8_0 = 1; CS89_Delay(100); p8_0 = 0;
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.