Hmmm - känner igen det där - fast från anda sidan. Jag designade ett "universellt" styrkort med tanke på vad vi har av erfarenhet från tidigare projekt osv.
Jag valde en Renesas RX210 (klarar 5V, 32 bit, 50MHz, massor med perifergrejer) och tänkte att det var det rätta.
Och jo, den klarar jobbet ganska bra! Men vilket he...... jag hade med att få gång i det hela! Det har tagit mig väldigt med timmar, en hel del huvudbry och än fler svordomar innan jag kom hit vi är i dag.
Det finns säkerhetsregister som ska skrivas till med specifika värden i specifik orden innan man kan skriva till andra register, sedan ska man "stänga" efter sig osv.
Att initiera en seriell port tar 69 rader C-kod (ingen "tomma" rader!), då är hårdvaran slagit på (strömsparaläget upphävd för den serieport), portpinnarnas alternativa funktion är ställd till att vara seriell port är ställd i rätt läge - efter att ha öppnat säkerhetsregister för detta - rätt prescaler för baudrate är vald, baudrate register är ställd, interrupts är aktiverat, buffer-variabler är initierat, pinnarna är växlad till deras alternativa funktion och interrupt-nivån ställd.
Numera har jag ett antal filer som jag inkluderar i projekt efter behov, då har jag full tillgång till de funktioner jag behöver. Inkluderar jag hårdvara-filen kallar jag Start_Hardware(), då ställs alla portar i rätt läge, den interna oscillator slår på i den valda frekvens (ska definieras innan vid att "projekt-definiera" USE_HOCOxxMHZ"), en kod kopieras till ett minnesarea (för att kunde skriva till egen FLASH/EEPROM).
Jag kan numera slå på funktioner vid att t.ex. "projekt-definiera" USE_RS232_A, då aktiveras interrupt-service-rutinerna (ISR) i vektortabellen osv.
Jag har färdiga rutiner för att räkna på RTC-data, läsa och skriva från/till EEPROM & RTC på I²C-bussen osv. Jag har en färdig rutin för att läsa 1-Wire via interrupt-styrning osv.
Men det har varit ett helvetets slit! Först få funktionen till att fungera, det kan i sig vara intressant (not in a good way), sitta med 1600+ sidors datablad och lusläsa och Renesas är inte speciellt bra på att skriva logiska datablad, de är dock bättre än Atmel men Microchip är ju stjärnan.
Det har varit ett drygt år med detta - men numera skapar jag projekt snabbt och enkelt.
Jag har just monterat ett display som ska kommunicera med en solpanel-inverter och skryta till omvärlden med hur mycket som är hämtat.
Detta innebär styrning av LED-moduler, inställning av parameter i EEPROM, automatisk ljusintensitetsreglering samt kommunikation med RS485 till invertern. Självklart måste jag kunde snacka med båda RS232 serieportar för kommandon och debug, A/D-omvandlaren ska startas för att styra intensiteten osv.
Projektet innehåller 22 st källkodsfiler - men bara 5 st i själva projekt-biblioteket, resten är mina "standard-filer". Jag har räknat med vissa .H-filer som är essentiella, resten har jag bortsett ifrån i dessa tal.
Att skapa projektet tog kanske 2 minuter inkl. definitionerna som aktiverade de rätta funktioner. Sedan var det en fråga om att skriva programmet och initieringsdelarna var ju nästan klara: serieportar, systemtimer, PWM (Intensitet) på rätt pinne, starta A/D-omvandlare osv.
NU är det enkelt - men jag har nog lagt det mesta av 1,5 år på att komma hit!
Alla exempel till deras starter-kit jag hoppades på att nasa på innebär ett RTOS - så det kunde jag ju glömma. Jag har suttit en hel del med den processor-register-definitions-fil jag har ("RX200.h") och gått igenom den för att se hur F.. de har tänkt sig att man ska skriva till den DJÄ... port.
Det visade sig att det inte var enkelt men till slut insåg jag att det var typ "SYSTEM.Pxx.BIT.yy" eller "SYSTEM.PRCR.WORD", "MSTP(MTU)", "MTU0.TCR.BYTE" osv.
Självklart var det även ett register som inte var definierat i den filen men som fanns i verkligheten, alltså fick jag skriva in detta register. Och då definitionsfilen har två delar (Little Endian & Big Endian) fick jag göra detta två gångar i samma fil.
Men nu - där jag har avklarat det mesta av dessa svårigheter - är det ju enkelt
Så jag förstår ditt tänk! Men hur man än gör är starten svår! Har man funktionerna klara och i grunden bara behöver knyta ihop dom med hårdvaran är det inte så illa men ska man skapa allt från grunden blir det tungt.