Fórum témák

» Több friss téma
Fórum » ARM - Miértek hogyanok
 
Témaindító: gtk, idő: Jún 26, 2007
Lapozás: OK   71 / 177
(#) csatti2 válasza cimopata hozzászólására (») Jún 26, 2016 /
 
Az FT a five volt tolerant-ra utal (vannak olyan bemenetei ezeknek a mikróknak, amikre lehet 5V-os jeleket kötni, viszont nem mind az, ezért ellenőrizni kell az adatlapon). Az adatlap szerint a max feszültség VDD+4V ezeken a lábakon (azért nem szerencsés 5,5V-nál nagyobbat rákötni). A belső diódát használni feszkorlátozásra amúgy sem szerencsés (az védelmi célból van ott), simán tönkreteheted ilyen kísérletekkel a mikrokontrollert.
(#) cimopata válasza csatti2 hozzászólására (») Jún 27, 2016 /
 
Üdv.

Nem ismerem miként van kialakítva a FT része jelenleg megfogta 8,6V-nál a bemenetet működik nem ment tönkre. Érthető is ha Vdd 3v3+4v + a dióda. Gondolom Ft valami féle zéner korlátozott belső sín amire a diódák elvezetik a túlfeszt a zénert pedig rákötötték a +3v3-ra.

Természetesen nem szeretnék nagy áramokat elvezetni a belső diódákkal ezért tettem jókora előtétet (10k) max 5mA kellene elvezetnie. Tehetnék + elvezető diódát mondjuk a 3,3V táp felé csak az mindegyik bemenetnél + 1 alkatrész amit ha nem muszáj nem használnék.
(#) killbill válasza cimopata hozzászólására (») Jún 28, 2016 / 1
 
Nem kell nagy aram ahhoz, hogy egy FET-et tonkretegyel. Azok a diodak nem erre valok. Ha az adatlap azt irja, hogy max. X volt, akkor annal tobbet semmilyen trukkel ne akarj ravezetni, mert el fog romlani. Ha nem most, akkor kesobb. Es az nem valasz, hogy eddig nem romlott el. Nem veletlenul adjak meg az adalapon az Absolute Maximum Ratings resznel ezeket. De ez itt off, ugyanis ez nem ARM kerdes, hanem altalanos HW tervezesi alapszabalyok, 1. resz.
A hozzászólás módosítva: Jún 28, 2016
(#) kapu48 hozzászólása Júl 1, 2016 /
 
Szerintetek ez a kettős értékadás így működhet?:
  1. volatile u32 exti_pr;
  2.  volatile u32 exti_pr0;
  3.  
  4. //#define READ_EXTI_PR0                 exti_pr  = EXTI_PR; exti_pr0 = (exti_pr & 0xFFFFFFFE)
  5. // Gondolom így gyorsabb lenne???
  6. #define READ_EXTI_PR0      exti_pr0 = (exti_pr  = EXTI_PR) & 0xFFFFFFFE  
  7. #define CLEAR_EXTI_PR0                  EXTI_PR  =  0x00000001


A Keil elfogadja! Csak mivel megszakításban lesz! Még nem tudom debugolni.
(#) kapu48 válasza kapu48 hozzászólására (») Júl 1, 2016 /
 
El szúrtam a maszkolást!
Így lenne jó:
  1. //#define READ_EXTI_PR0   exti_pr  = EXTI_PR; exti_pr0 = (exti_pr & 0x00000001)
  2. // Gondolom így gyorsabb lenne???
  3. #define READ_EXTI_PR0      exti_pr0 = (exti_pr  = EXTI_PR) & 0x00000001
  4. #define CLEAR_EXTI_PR0      EXTI_PR  =  0x00000001
(#) Balázs válasza kapu48 hozzászólására (») Júl 1, 2016 /
 
Persze, ez teljesen valid C kód. Az már más kérdés, hogy biztonságkritikus rendszerekben tiltják az ilyesmit (pl. a MISRA C és a CERT C szerint is tilos), de ha nem robotpilótát vagy atomerőművet írsz, akkor teljesen oké.
(#) kapu48 válasza kapu48 hozzászólására (») Júl 1, 2016 /
 
Közben meg néztem, mi lesz a lefordított kód?
  1. #define READ_EXTI_PR                            exti_pr  = EXTI_PR  
  2. #define READ_EXTI_PR0                           exti_pr  = EXTI_PR; exti_pr0 = (exti_pr & 0x1)
  3. #define READ_EXTI_PR_0                  exti_pr0 = (exti_pr  = EXTI_PR) & 0x1
  4. #define CLEAR_EXTI_PR0                  EXTI_PR  = (exti_pr | 0x00000001)
  5.  
  6.  
  7. /*----------------------------------------------------------------------------
  8.  * EXTI0_IRQHandler:
  9.  *----------------------------------------------------------------------------*/
  10. void EXTI0_IRQHandler(void) {
  11.         //exti0Ticks++;
  12.         READ_EXTI_PR0;          // 0   
  13.         if(++exti0Ticks & 0xFFFE) {                                             //      LED Toogle
  14.                 GPIOB_BSRR = GPIO_BSRR_BS13;                    //  PB13 set
  15.         }else{
  16.                 GPIOB_BSRR = GPIO_BSRR_BR13;                    //  PB13 reset
  17.         }      
  18.         READ_EXTI_PR_0;         //      1
  19.         CLEAR_EXTI_PR0;
  20. }
  21.  
  22.  
  23.  
  24.     99: void EXTI0_IRQHandler(void) {
  25.    100:         //exti0Ticks++;
  26. 0x0800022C 4770      BX       lr
  27.    101:         READ_EXTI_PR0;    // 0      
  28. 0x0800022E 48AE      LDR      r0,[pc,#696]  ; @0x080004E8
  29. 0x08000230 6800      LDR      r0,[r0,#0x00]
  30. 0x08000232 49AE      LDR      r1,[pc,#696]  ; @0x080004EC
  31. 0x08000234 6008      STR      r0,[r1,#0x00]
  32. 0x08000236 4608      MOV      r0,r1
  33. 0x08000238 6800      LDR      r0,[r0,#0x00]
  34. 0x0800023A F0200001  BIC      r0,r0,#0x01
  35. 0x0800023E 49AC      LDR      r1,[pc,#688]  ; @0x080004F0
  36. 0x08000240 6008      STR      r0,[r1,#0x00]
  37.    102:         if(++exti0Ticks & 0xFFFE) {                              //   LED Toogle
  38. 0x08000242 48AC      LDR      r0,[pc,#688]  ; @0x080004F4
  39. 0x08000244 6800      LDR      r0,[r0,#0x00]
  40. 0x08000246 1C40      ADDS     r0,r0,#1
  41. 0x08000248 49AA      LDR      r1,[pc,#680]  ; @0x080004F4
  42. 0x0800024A 6008      STR      r0,[r1,#0x00]
  43. 0x0800024C F64F71FE  MOVW     r1,#0xFFFE
  44. 0x08000250 4008      ANDS     r0,r0,r1
  45. 0x08000252 B120      CBZ      r0,0x0800025E
  46.    103:                 GPIOB_BSRR = GPIO_BSRR_BS13;          //  PB13 set
  47.    104:         }else{
  48. 0x08000254 F44F5000  MOV      r0,#0x2000
  49. 0x08000258 49A0      LDR      r1,[pc,#640]  ; @0x080004DC
  50. 0x0800025A 6008      STR      r0,[r1,#0x00]
  51. 0x0800025C E003      B        0x08000266
  52.    105:                 GPIOB_BSRR = GPIO_BSRR_BR13;          //  PB13 reset
  53.    106:         }        
  54. 0x0800025E F04F5000  MOV      r0,#0x20000000
  55. 0x08000262 499E      LDR      r1,[pc,#632]  ; @0x080004DC
  56. 0x08000264 6008      STR      r0,[r1,#0x00]
  57.    107:         READ_EXTI_PR_0;  //       1
  58. 0x08000266 48A0      LDR      r0,[pc,#640]  ; @0x080004E8
  59. 0x08000268 6800      LDR      r0,[r0,#0x00]
  60. 0x0800026A 49A0      LDR      r1,[pc,#640]  ; @0x080004EC
  61. 0x0800026C 6008      STR      r0,[r1,#0x00]
  62. 0x0800026E F0200001  BIC      r0,r0,#0x01
  63. 0x08000272 499F      LDR      r1,[pc,#636]  ; @0x080004F0
  64. 0x08000274 6008      STR      r0,[r1,#0x00]
  65.    108:         CLEAR_EXTI_PR0;  
  66. 0x08000276 489D      LDR      r0,[pc,#628]  ; @0x080004EC
  67. 0x08000278 6800      LDR      r0,[r0,#0x00]
  68. 0x0800027A F0400001  ORR      r0,r0,#0x01
  69. 0x0800027E 499A      LDR      r1,[pc,#616]  ; @0x080004E8
  70. 0x08000280 6008      STR      r0,[r1,#0x00]
  71.    109: }


Szóval tévedtem! Az első változat hosszabb 3 utasítással!
A hozzászólás módosítva: Júl 1, 2016
(#) kapu48 válasza kapu48 hozzászólására (») Júl 1, 2016 /
 
Vagyis akkor inkább, nyertem 3 utasítást?
(#) kapu48 válasza Balázs hozzászólására (») Júl 1, 2016 /
 
Köszi a választ!

Közben rá jöttem, hogy a törlés is inkább így helyes:
  1. #define CLEAR_EXTI_PR0      EXTI_PR  =  0x00000001


Bits 19:0 PRx: Pending bit
0: No trigger request occurred
1: selected trigger request occurred
This bit is set when the selected edge event arrives on the external interrupt line. This bit is
cleared by writing a 1 into the bit or by changing the sensitivity of the edge detector.
A hozzászólás módosítva: Júl 1, 2016
(#) holex hozzászólása Júl 9, 2016 /
 
Sziasztok. Elég régóta foglalkozok 8 bites AVR mikrovezérlőkkel. Szeretnék átállni ARM-re. Melyik gyártó termékeivel érdemes elindulni? Van-e hozzá valamilyen (lehetőleg ingyenes) fejlesztőkörnyezet? Néztem az Atmelt (ha már eddig AVR-rel foglalkoztam), de nincsenek normális dokumentációik. Az AVR-nél megszoktam, hogy az adatlapban le van írva az összes regiszter, melyik bit mit csinál, példaprogramok, stb, itt ilyesmire ne is számítsak?
(#) cpt.zoltan.simon válasza holex hozzászólására (») Júl 10, 2016 /
 
Az én szubjektív tapasztalatom, hogy az STM Cortex-M0, M3, M4 cuccai futnak itt a legjobban.
Jó magam foglalkoztam NXP LPC-vel amíg az ST fel nem zárkózott és végre hajlandó volt SDRAM-, és TFT vezérlőt pakolni az STM32F42x sorozatba.
Aztán Előfordult még olyan hogy TI, meg NuC. Kb ennyi.
A hozzászólás módosítva: Júl 10, 2016
(#) ZsoltyFM hozzászólása Júl 11, 2016 /
 
Szasztok!
Egy ARDUINO DUE modult használok és éppen a megszakításokkal bajlódok.
DMA vezérelten használom az egyik dac kimenetét magas prioritású megszakításban, és szeretnék ebből a magszakítási rutinból egy bizonyos esetben egy alacsonyabb prioritású megszakítást aktiválni hogy amint ez a magszakítás lefut, az legyen az elsődleges feladat hogy azt is elvégezze és majd csak aztán térjen vissza a főprogramhoz. De miközben az alacsonyabb prioritású rutin van feldolgozás alatt időnként esélyes hogy azt is meg kell szakítani és a magasabb prioritású gyorsabban lefutó megszakításba is vissza kell térni. Ezért mindenképpen előnyös lenne hogy programból tudjam aktiválni az alacsonyabb prioritású megszakítást.
A kérdés az lenne hogy van e rá mód a periférikus megszakítások babrálása nélkül egy szoftveres megszakítás generálni?
(#) icserny válasza ZsoltyFM hozzászólására (») Júl 11, 2016 /
 
Nem világos számomra, hogy mit szeretnél csinálni, de az MCU adatlapjából a 10.20.8 Software Trigger Interrupt Register című szekciót ajánlom a figyelmedbe. Csak vissza ne kérdezz, mert én nem használok ilyen mikrovezérlőt...
(#) ZsoltyFM válasza icserny hozzászólására (») Júl 11, 2016 /
 
Köszönöm a reakciódat. Az az igazság hogy én is éppen ebben láttam a problémámra a megoldást, és arra várok hogy majd valaki ebben segít. Sajnos fogalmam sincs hogyan is használjam ezt.
(#) cpt.zoltan.simon hozzászólása Júl 22, 2016 /
 
Hi!

Van valakinek tapasztalata abban hogy hogy kell órajelet változtatni?
STM32F429DISCOVERY

8MHz kvarc, /8 aztán x240 és végül /2 így lenne 120MHz a CoreClock
Mellette egyik busz 30 a másik 60Mhz-en.

Tehát beállítom az osztókat.
Bekapcsolom a HSE oszcillátort. Megvárom hogy kész legyen (HSEReady)
Bekapcsolom a MainPLL-t és várok (PLLReady)
Majd a System Clock Switch-ben 0-ról (HSI) átállnék 2-re (PLL) na itt megfagy. A Clock-hoz tartozó interrupt biteken nem találok semmit.
(#) cpt.zoltan.simon válasza cpt.zoltan.simon hozzászólására (») Júl 22, 2016 /
 
Nah.
Meg van a megoldás, leírom, lehet egyszer valaki rákeres és jól jön neki.
Mielőtt bárki bármit tekerget (és olyan "jó" hogy ez a mindenféle CMSIS, CubeMX és hasonló csodákban rejtve van), a FLASH->ACR regiszterben az STM32 belső Flash-hez tartozó LATENCY-t át kell állítani. Indulások, 16MHz HSI clock, és 3.3V táp mellett ez 0.
Esetemben 3-ra kell feltornázni 120MHz kívánt órajelhez. Célszerű csinálni kis "táblázatot" hogy az órajel tekeréskor ezt is megcsinálja az adott rutin.
Leírás: en.DM00031020.pdf 81. oldala.
A hozzászólás módosítva: Júl 22, 2016
(#) wbt válasza cpt.zoltan.simon hozzászólására (») Júl 22, 2016 /
 
Jaja, pont tegnap futottunk bele, 24MHz-enként 1WS kell. Agyaltunk is, hogy a flash olvasás miért lehet ilyen lassú... bár van olyan típus, ahol 128-bit széles szervezésű a flash, így nem kell WS. Van pre-fetch, amit be lehet kapcsolni (ez most persze az új F071 sorozatban van),
a 429-ben nem tudom, van-e, az sokat gyorsít, persze ha ugrás van, akkor nem számít.
Nagyon nem mélyedtem bele, csak olcsó ARM-et vadászott egy kolega...van beépített MODBUS meg HDMI CEC, megmindez 500Ft körül, ezért beszélgettünk róla. Nem tudom, a 429-nél be lehet-e lapozni a RAM-ot mint prgram memória, érdekes módon a beépített SRAM 0WS-es.
(#) cpt.zoltan.simon válasza wbt hozzászólására (») Júl 22, 2016 /
 
Ennyire nem mélyedtem bele, de majd most. Az eddigi tapasztalatom az hogy az ember az elejét nagyvonalúan átugorva lepődik meg. Most már azt csinálom, hogy minden órajel tekerésnél, az AD mérjen egy tápfeszt, meg hogy aksiról megy -e stb.
És akkor a perifériák újra konfigolásáról még nem is beszéltünk. Érdekes lesz!
(#) rolandgw válasza cpt.zoltan.simon hozzászólására (») Júl 22, 2016 / 1
 
Idézet:
„ez a mindenféle CMSIS, CubeMX és hasonló csodákban rejtve van”

Nincs rejtve,csak át kell írni.( Atollic, stdlib)

stm.PNG
    
(#) cpt.zoltan.simon válasza rolandgw hozzászólására (») Júl 22, 2016 /
 
Ez melyik file?
(#) rolandgw válasza cpt.zoltan.simon hozzászólására (») Júl 22, 2016 /
 
system_stm32f4xx.c
(#) cpt.zoltan.simon válasza rolandgw hozzászólására (») Júl 22, 2016 /
 
Abban nekem ilyen nincs.
(#) rolandgw válasza cpt.zoltan.simon hozzászólására (») Júl 22, 2016 /
 
Nem ismerem a Keil-t, az Atollic-ban ez van indulásnál:

stm2.PNG
    
(#) cpt.zoltan.simon válasza rolandgw hozzászólására (») Júl 22, 2016 /
 
Jah... Ok! Atollic-ot nem használom.
Jól hallottam, hogy már free? Vagy a CooCox-al keverem?
(#) rolandgw válasza cpt.zoltan.simon hozzászólására (») Júl 22, 2016 /
 
Nincs code limit, viszont csökkentett tudású a Pro-hoz képest.
Bővebben: Link
(#) icserny válasza cpt.zoltan.simon hozzászólására (») Júl 23, 2016 / 1
 
Idézet:
„Mielőtt bárki bármit tekerget ... a FLASH->ACR regiszterben az STM32 belső Flash-hez tartozó LATENCY-t át kell állítani.”
Tulajdonképpen elegendő csak közvetlen azelőtt átállítani a LATENCY-t, mielőtt a PLL kimenetét rendszerórajellé teszed.

  1. /* Configure Flash prefetch, Instruction cache, Data cache and wait state */
  2. FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;
  3.  
  4. /* Select the main PLL as system clock source */
  5. RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
  6. RCC->CFGR |= RCC_CFGR_SW_PLL;


(system_stm32f4xx.c állomány részlete a The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors, 3rd Edition.pdf c. könyv egyik mintapéldájából)
A hozzászólás módosítva: Júl 23, 2016
(#) cpt.zoltan.simon válasza icserny hozzászólására (») Júl 23, 2016 /
 
Ez tiszta. KEIL-ről beszélek. Direkt rákerestem összehasonlító jelleggel a FLASH->ACR kifejezésre.
Először STM32F207-el kezdtem a system_stm32f2xx.c file-ban ez a rész benne van.
Ugyan ez a 4xx-ben már nincs.

Ezért mondtam, hogy a 4xx-es system file egyfelől eléggé ki van herélve másfelől számomra "nem egészen üzembiztos", vagy inkább "nem egészen bolondbiztos".
(#) ZsoltyFM hozzászólása Aug 11, 2016 /
 
Sziasztok! Arduino után kicsit elkezdtem nézelődni milyen alternatívák vannak, és megakadt a szemem ezen: Nucleo F446RE.
Annyira megtetszett hogy rögtön rendeltem is belőle kettőt.
Abban szeretnék tanácsokat kérni hogy mégis hogyan kezdjek bele ezeknek a programozásába.
Nem vagyok egy tapasztalt programozó. Villanyszerelő vagyok.
Azért már egy jó ideje ismerkedek a programozással, szóval nem nulláról kezdem.
Jelenleg úgy gondoltam hogy megpróbálom az STM32CubeMX-el előkonfigurálni és aztán az IAR-ban továbbfejleszteni a kódom.
Nem túl sok az ismeretem ezekről a mikrovezérlőkről, és megköszönném ha segítenétek benne hogy mégis milyen dokumentációkat kellene átolvasnom ahhoz hogy valamiféle sejtésem legyen.
(#) kapu48 válasza ZsoltyFM hozzászólására (») Aug 11, 2016 /
 
Ha az arduino már ismerös.

Érdemes ide is benézned:
NUCLEO-F446RE
(#) ZsoltyFM válasza kapu48 hozzászólására (») Aug 12, 2016 /
 
Kár hogy nem visz előrébb.
Mellékesen megjegyzem pont ezt a linket tartalmazza az eszköz által csatolt meghajtó is.
Én önnáló fejlesztőkörnyezetet szeretnék használni nem ilyen webes vackot.
Következő: »»   71 / 177
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem