ARM CM3 çipleri JTAG yada SWD üzerinden debug ederken ....

Başlatan z, 13 Kasım 2012, 19:33:24

camby

Alıntı yapılan: XX_CİHAN_XX - 14 Kasım 2012, 11:17:41
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/PROGRAMMING_MANUAL/CD00228163.pdf
Sayfa 149

Cihan hocam bunu en yukarıda yazdım zaten, manuellerde yazan ile pratikte olan farklı.


Alıntı YapHocam timer için birkaç yerde " All timer counters can be frozen in debug mode. " yazıyor. Reference Manuel'de değil de çipin dökümanından ( STM32F407xx )aldım bunu. Buradan frozen olma durumu seçeneği varmış gibi anlıyorum ama bu şekilde bir ayar da hatırlamıyorum.

PM0056'da ise benzeri systick için yazıyor : "When the processor is halted for debugging the counter does not decrement"

mesaj birleştirme:: 14 Kasım 2012, 21:24:40
Ek :

Bir fonksiyonun işleme süresini görmek için TIM7'yi set edip çıkan sonucu ms cinsinden ekrana yazdırıyordum. Az önce bunu debug modunda denedim , her seferinde farklı ve saçma değerler alıyorum. Bu durumda TIM7 SWD debug modunda ve temel ayarlarlarda iken saymaya ettiği gözüküyor. Chip 32F100RB M3

mesaj birleştirme:: 14 Kasım 2012, 11:37:17

Benim tecrübem dün TIM7 ile oldu.

Systick denemedim henüz.

XX_CİHAN_XX

Hmm hocam hiç denemediğim için dökümanlara göre konuşmuştum demek ki uygulamada durum böyle olmuyormuş  :o
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

pisayisi

St nin cortex m3 lerinde debug sırasında işlemci halt modunda kalırsa, DBG_TIMx_STOP konfigurasyon bit değerine  göre iligli timer, normal olarak çalışabilir yada durabilir. Örneğin işlemci halt moduna girerse DBG_TIMx_STOP biti 1 yapıldığında, ilgili timer durur ve çıkışlar lojik sıfır olur, bir tür acil stop gibi bir durum. Debug modunda diğer birimlerin çalışmasını düzenleyen yazmaçlar sayfa 1069 dan görülebilir. ADC timer çıkışlarından beslenmediğine göre adc nin çevrim işlemini durdurduğuna dair bir bilgiye rastlayamadım...

Bits 30:25 DBG_TIMx_STOP: TIMx counter stopped when core is halted (x=9..14)
0: The clock of the involved timer counter is fed even if the core is halted, and the outputs
behave normally.
1: The clock of the involved timer counter is stopped when the core is halted, and the outputs
are disabled (as if there were an emergency stop in response to a break event).


http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf

Murat

z

Bu durumda aradığım bilgileri çipin kendi dokumanlarından bulmam gerekecek. Bunu en başta düşünmeliydim. Sorduğum sorular ARM mimarisiyle değil firmaların çipe gömdüğü çevre birimleri ile ilgili. Adamlar bu bilgileri de dokümanın her bir yanına serpiştirilmiştir.

Garip bir sorunla karşılaşınca bu soruyu gündeme getirdim.

ADC ölçümlerinde bir tutarsızlık farkedip işin içinden çıkamayınca sorunu bulmak için bir port pinini ADC girişine bağladım.

Her timer int üretilince ADC yi başlayacak şekilde sistemi yapılandırdım. Timer int rutininde ise 0,1,2,3 şeklinde artan yazılımsal sayaç kurdum. Sayaç 0 olduğunda port pinini 1, diğer durumlarda 0 yapıyor.

Bu durumda 3 ölçüm, ardışıl olarak 0 sonucu üretirken dördüncüsünün 3FF gibi yüksekçe değer alması ve 3FF değerinin, sayacın hep aynı değerine denk gelmesi gerekiyordu.

Ancak kodladığım bu kurgunun debug ederken şaştığını farkettim. Kodları normal koştururken sorun çıkmazken debug ederken tutarsız şekilde ADC sonuçlarının biriktiği FIFO'da fazladan birikim olduğu ortaya çıktı.

Debug modunda ortaya çıkan bu durumun CPU nun normal koşturumunda da ortaya çıkma ihtimalinden dolayı ilave yazılımsal önlemler almam gerektirdi.

Aksi takdirde örneğinin CH1 kanalının ADC sonucu aslında CH1'in değil CH2 kanalına ait olması gibi gibi saçma bir durum oluyordu.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com