Fórum témák
» Több friss téma |
Igaz, jogos. Amit én használok az az STM32F207ZGT6
Adott változó adott helyre:
Nem egyszerűbb lenne pointerrel csinálni?
Igaz, a tokozásról nem volt szó. Akkor mindenképp be kell újítanom egy I tokozást és akkor fullos a cucc. Egy Ilyenre gondoltam, bár ezen meg nincs SWD. Most akkor JTAGot is vennem kell?
Esetleg a discovery-n lévő STlink-el tudom ezt is programozni?
Később már pointer-ként van használva, a DMA-ban memory-memory copy alkalmával már fizikai memória van beírva. A pointer deklarálásához használtam a
sort. Persze lehetett volna még sokat finomítani rajta, meg 2D tömb, hogy a sorok, oszlopok könnyebben kezelhetőek legyenek, de első körben csak az volt a lényeg hogy egy 800x480 képet a lehető leggyorsabban tolja ki, a fölötte lévő API meg majd később. Most az egészet portol-om LPC1788-ra, ebben már van TFT vezérlő, 32Mx32bit SDRAM, szóval sokkal könnyebb lesz a dolgom, DMA pl nem is fog kelleni. Most a NAND Flash-el bajlódok, mert nem minden tiszta még.
Szerintem egyszerűbb lett volna a
megvalósítás... Idézet: „Most az egészet portol-om LPC1788-ra, ebben már van TFT vezérlő” Van már neki utódja, az LPC4088 személyében.
Az STlinkhez nem értek, de rémlik, hogy valami ilyesmi volt írva a doksijába, hogy lehet függetlenül használni a JTAG illesztőjét másik CPU-val is, meg lehet a rajta levő CPU-t is használni másik JTAG illesztővel.
A konkurens cégek ezt odáig fejlesztették, hogy akár ketté is lehet fűrészelni a panel két felét: Bővebben: Link ![]()
De akkor a 407ZTG6-os ARM-al már menni fog az SRAM , meg NOR vagy NAND flash mindenféle varázlsat nélkül, meg címvonal nélkül?
Mert akkor megrendelem. Tehát akkor NOR: CE->NCE2, WE->NWE, RE->NOE jó lesz? cpt.zoltan.simon: értem, tehát akkor a DMA verziónál már nam a kijelzőt babrálom ha mondjuk egy vonalat akarok rajzolni, hanem a ram területen kiszámolom, hogy hová esik az adott pixelhez tartozó terület és oda írom be az adatot? A hozzászólás módosítva: Jún 3, 2013
Valószínű menni fog. Legfeljebb nem bírja stabilan a max. adatátviteli sebességet és lejebb kell venni, ha ilyen összedugós megoldásban próbálod összehozni. Ugyanazokra a buszvezetékekre több "fogyasztót" rá lehet kötni, de nagyobb sebességnél (>=30-40-50MHz) lehetnek gondok, ha nem tudod a reflexiókat kiküszöbölni, és azt nehéz az ilyen összedugós cuccoknál. Persze lehet hozzá egy rendes panelt is tervezni.
Lesz rendes panel, de mivel még kezdő vagyok ARM téren,, szeretném kipróbálgatni a dolgokat, és amikor elég biztos vagyok, hogy jó lesz, akkor végleges panel lesz.
Ezzel az összedugós cuccal, csak a taknyolást akarom elkerülni, ne keljen már mondjuk a NORt a levegőben megforrasztani ![]()
Teljesen jó az úgy tesztelésre, legfeljebb alacsonyabb frekin járatod.
Címvonal is kell. SSD1963-nak az A0, az SRAM-nak nálam A0...A19-ig.
Az SSD, a NAND meg az SRAM egy és ugyanazon az FSMC buszon van. Az egyetlen totál külön vezeték az az NCEx. A működést jól látod. A buszterhelés csökkentésére még be akartam játszani hogy ne menjen a DMA folyamatosan hanem egy Timer INT olyan sebességgel csinálja a frissítési folyamatot hogy a teljes frissítés (mely képenként 6 részből áll) 25x jöjjön létre másodpercenként, 40-45 helyett. A litván srác a 417el 240MHz-es túlhajtással (168 helyett), ugyan azzal a 10ns SRAM-al mint én 65fps-t ért el, igaz CMSIS libeket használva ami ugye lassít.
Hát én is CMSIS-t használok, van így is mit megtanulnom.
És nem kell megvárni a képfrissítés kezdetét (sync) hogy ne jelenjenek meg villódzó részek? Vagy Framebuffer két ram terület, az egyik a kijelzőre van állítva, a másikat módosítod és ha kész vagy megcseréled a pointert.
Nem fog villogni. Akkor villog ha 20Hz körül van a frissítés.
Másfelől, az SSD az frissíti a képet saját maga, én itt csak arról írtam hogy az MCU milyen sebességgel tolja a képet. Azaz tudja úgy tolni, hogy se az SSD, se az ARM miatt nem fog villogni. ![]() CMSIS nélkül egyszerűbb. Komolyan. FSMC beállítása 3 regiszter, + a portlábak. DMA is 5 sor ha a setupjáról van szó. Interrupt szintén. Nem kell hasranesni rajta. Ez is csak egy proci mint a többi. Vannak regiszterek, azok meg le vannak írva hogy mi micsoda. ![]()
Valami mégsem jó:
A 7. sornál végtelen ciklus. Bkötés: D0-D7 -> FSMC D0-D7 ALE -> PD12 CLE -> PD11 NOE ->PD4 (RE) NWE ->PD5 (WE) NCE2 -> PD7(CE) NWAIT ->PD6 (R/B) Cím képzés:
FSMC:
Nem értem miért hal meg, de olyan szinten, hogy SWD vel is csak reset után tudom megszólítani a discovery-t. A hozzászólás módosítva: Jún 3, 2013
Szerintem az ALE és a CLE definícióját felcserélted.
ALE -> PD12 -> A17 ->
kéne legyen.
Ez kapcsolás függő lehet. Mi a NAND típusa, hová mi van bekötve? Mert pl nézd meg a mellékelt schematic-ot amit én használok, aztán látható hogy nálam miért:
4Mega pdf-et nem lehet feltölteni?
Az LCD-m CS lába és a NAND CE lába egyaránt a PD7-re esik. Ez nem lehet gond?
Csak akkor hal meg, ha megszólítom a NAND-ot, ha csak initelem, akkor a kijelző is megy.
Ez baj. Épp ez a láb aminek külön kellene lennie. A CS, CE lábakat külön külön kell kötni az egyes NCEx lábakra, melyek végül az ARM memóriájában mint címtartományok képeződnek le.
Azt hittem az Ax lábakkal választok címet. Most keresek egy másik helyet valamelyik engedélyező lábnak, de nem biztos, hogy lesz.
Félre értettük egymást.
![]() NCEx az a chip-et választja, tehát hogy a DATAx, és Ax meg a többi melyik chip-re vonatkozik. Tanács: ird le egymás alá hogy NCEx lábak hol lehetnek mert van olyan hogy ugyan azon a port lábon lehet NCE2, és 4 is. Több NCEx lábat használva kavarj egy olyat ahol nincs konfrontáció. Pl nekem: NE2 = SRAM NE4 = SSD1963 Init-je a melléklet szerint.
Örök hála, mostmár értem!
Frankó. A DMA-s részt annó töröltem, mert átírom Timer-Driven-re, de az init után DMA nélkül is működik az alábbi formában:
Nem lesz. Rosszul olvastam, és nem 1 bank NOR/SRAM/TFT ÉS 1 bank NAND, hanem VAGY... Ugyanazon az egy szem fizikai lábon jönne ki a NAND chip select és a NOR/SRAM/TFT chip select is.
Ha kikapcsolható az adott FSMC bank működése, akkor lehet olyat csinálni, hogy kivezetsz két tovább GPIO lábat, az egyik chip selectet úgy állítod elő, hogy az NE1/NCE2 lábat és az egyik GPIO lábat egy OR-kapuba vezeted, a másik chip selectet meg a másik GPIO lábbal, és így a GPIO lábakkal tudod eldönteni, hogy melyik periféria legyen aktív. Persze amíg az egyik üzemel, addig a másikat le kell tiltani. A DMA sem tud menni ezalatt... Na jó, egy GPIO láb is elég, ha magas, akkor az egyiket választottad, ha alacsony, akkor a másikat. A hozzászólás módosítva: Jún 3, 2013
Ja én is ezt néztem, csak külön külön működik.
A melléklet magáért beszél, azt hiszem ezt hívják szívásnak ![]()
Az SSD paraméterezése kicsit bonyolult-ra sikerült, de igy lehetett olvasmányosra megcsinálni, ráadásul kiszámolósra is.
Tehát ami eddig a táblázatban 81 elem van, azokat így és ebben a sorrendben kell hagyni, mert később az adott TFT típusra számoló a tömb egy adott elemére mutat. Majd egy külön programrész feltölti az adatokat az SSD-be. Tapasztalatom szerint ennyi adat, paraméter elég ahhoz hogy a TFT rendesen legyen config-olva, de alatta tetszés szeint bővíthető, ha a tömb méretét mutató 0. elemet ami most éppen 81 szépen átírjuk.
Én is kerestem anno az X,Y, Z portokat.
![]() Kipróbáltad a kódot amit küldtem? A system_stm32f.c file-ba ne felejtsd el engedélyezni az EMC-t mert én csak a gyári-n felüli lábakat konfiguráltam, az alapértelmezetteket Keil-re bíztam.
Kösz a kódot, de még nem próbáltam, míg nem tudok SRAMot tenni az ARM-ra addíg nem tudom kipróbálni.
Nekem van egy STM32F207ZGT6, rajta az 512k SRAM (16bites), (800x480hoz 384k kell), gyári panel, csak a NAND flash-t kell rápakolni. Ebay.ről vettem, csak az SRAM volt külön beszerzés, csak az volt 8eFt, mert 10ns-os, gyors típus.
STM32F207ZGT6 Erre csak az SSD-t kell rápakolni, meg tegyél rá egy uSD kártyát, tudja vezérelni SDIO-ba. A NAND-ot leszedtem róla mert nem kellett, igaz később jó lett volna. ![]() Ha érdekel, akkor PM. ![]()
Egy kis interrupt problémába ütköztem, SysTick-el. (STM32)
Van egy bootloaderem 0x08000000 címen és egy főprogramom 0x08008000 címen. A saját bootloader olvassa az SD-t és ha talál rajta titkosított firmware.bin állományt, felfrissíti 8000 tól kezdve a főprogramot. Ha talált, ha nem a végén ugrik 8000-re. Főprogramot csak egy pár kb-os LED ki/bekapcsoló programmá butítottam már. 1. Megnyomom a HW resetet, elindul a bootloader, teszi amit tenni kell. 2. Főprogram indulása előtt MSP (0x08008000), VTOR (0x08008000) és PC (0x08008004) állítva van. 3. Elindul a főprogram és teszi a dolgát rendesen. A főprogram amit futtat egy startup-ban 0x08008000-ra tolt kód. Ha ezt debuggeren keresztül indítotom (programozom és run) akkor a főprogram SysTick interruptja nem esik be. Úgy gondoltam, hogy pendig bitek miatt akkor hívódna meg mielőtt a VTOR átállításra kerül. Így néz ki ezért a főprogram eleje:
Ha debugolás közben HW resetet hívok, azonnal visszaáll minden a helyére és minden működik. De debuggerből indítva nem! ICF:
MAP:
Debug macro:
Gondolatok: - Csak akkor működik, ha a főprogram meghívása előtt a VTOR már 8000-en van, és Systick flag-ek törölve vannak - Ha debugból indul akkor valamiért induláskor 0x08000000-on van a VTOR (és ekkor már van aktív pending bit) - Valamiért figyelmen kívül hagyja a debug macrómat. Az a gyanúm, hogy a főprogram legelső sorának végrehajtása előtt már van aktív pendig bit, és a VTOR is rossz helyre mutat, ezért beragad az IRQ a bootloader területbe, hiába állítom át később a vektor tábla elejét. Tippek, miért nem hívódik meg debug esetén a Systick? A hozzászólás módosítva: Jún 4, 2013
Úgylátom debuggerből hívva ICSR regiszterében már alapból Hard Fault az aktív.
VECTACTIVE = 0x003 (HardFault) RETTOBASE = 0 VECTPENDING = 0x000 ISRPENDING = 0 ISRPREEMPT = 0 PENDSTCLR = 0 PENDSTSET = 1 PENDSVCLR = 0 PENDSVSET = 0 |
Bejelentkezés
Hirdetés |