Keil MCBSTM32, Clocks, PCLK2 einbinden

Gast #2370518
Lesenswert?

Servus an alle.
Ich hoffe mir kann jemand helfen.
Für ein wichtiges Projekt bin ich an das ARM CORTEX M3, Keil MCBSTM32 
Board gebunden. Sprich keine Abntworten wie, wenn du das noch nicht mal 
kannst,dann mach erstmal AVR zum üben... muss der Micro sein!
Und zwar muss ich externe ADCs ansteuern, wie ist generell kein Problem, 
Sprache C.
Ein anderer Programmteil mittels

void SysTick_Handler (void) {
...
}
funktioniert auch schon (sysTick mit 9 MHz, also alle 50 microsekunden.)

Das ist viel zu langsam für einen anderen Programmteil. Ich muss in den 
nanosekundenbereich <20ns.

Ich habe daher an PCLK2 gedacht, da der standertmäßig ja als HCLK und 
somit 72MHz bei dem Board definiert ist.

Wie muss ich das ganze jetzt umsetzen??

wenn ich jetzt z.B. einfach void PCLK2_Handler (void) {..
schreibe passiert logischerweise noch nichts...
Ich denke die Clock ist nicht enabled...
Wie gesagt, habe nicht die große Ahnung, da gibts doch nen Befehl RCC 
....
wie genau starte ich diese Clock bzw. kann man was definieren, dass ich 
ein signal einfach nur 1 oder 0 im größenordnungsbereich <20ns als 
output liefern kann um z.B. alle 15ns für 15ns ne 1 dann wieder 15ns ne 
null, dann wieder 1 usw. zu liefern..

Hoffe auf schnelle antworten, weil zeitkritisch...

Ich danke schon jetzt allen die mir antworten für Ihre Hilfe
Persönliche Seite #2370571
Lesenswert?

Mario schrieb:
> Das ist viel zu langsam für einen anderen Programmteil. Ich muss in den
> nanosekundenbereich <20ns.
>

Moin Mario,

Räum mal bei dir auf, was willst du genau machen?

Wenn ich mich in den Nachkommastellen nicht vertan habe, dann braucht 
der
Prozi schon 14ns für einen Takt. Was willst du denn alle 20ns so alles 
machen, brauchst du das überhaupt?

So wie sich das anhört gehst du das Problem völlig falsch an oder aber 
der STM32F1 ist zu langsam für dich und du musst auf F2 ggf. bald auf F4 
ausweichen.

MfG

Tec
#2370582
Lesenswert?

Mario schrieb:
> void SysTick_Handler (void) {
> ...
> }
> funktioniert auch schon (sysTick mit 9 MHz, also alle 50 microsekunden.)
>
> Das ist viel zu langsam für einen anderen Programmteil. Ich muss in den
> nanosekundenbereich <20ns.

20ns für den Systick! Das wird schon von der Theorie her nichts bei 
72MHz. Ich denke, Du solltest doch nochmal über das Back zum AVR 
nachdenken...
Persönliche Seite #2370627
Lesenswert?

Wenn ich mich nicht verrechnet hab, wären das schon mal 66MHz nur für 
einen ADC? Und das mal 4 ADCs? Aus 72MHz CClk? Nais!

Sieht übrigens nach so was wie SPI aus. Der STM32F1xx kann 25MHz SPI. 
Wenn das SPI ist, wird der ADC Daten-Takt vom Master (=STM32) aus 
gesteuert.

Ggf. kannst du mit NSS vom SSP peripheral den DAC komplett steuern, so 
dass du deine Daten ggf. sogar per DMA schaufeln kannst.

Auf jeden Fall das zeug auf ein Peripheral auslagern. Takt zum Einlesen 
der Bits per Hand erzeugen ist böhse... Ausserdem ist deine CPU hier 
dann zu 99,999999% mit dem INT ausgelastet ^^
Gast #2370638
Lesenswert?

ein kompletter durchgang von ADC dauert max 25 microsekunden (t1). Da 
ich 40 kilosamples für jeden der 4 ADC realisieren muss, hab ich 
25microsekunden /16 bits=1,5625microsekunden. mit den anderen zu 
beachtenden mindestzeiten schätze ich 1 microsekunde. d.h. bei 4 ADCs 
würden 250ns vermutich auch reichen, wobei das ganze dann in der tat 
sehr knapp wird, da die übertragenen bitdaten(von 
beschleunigungsaufnehmern) auf einer SD karte gespeichert werden. Zur 
Not aber nur dann würden evtl. 20 kilosamples auch reichen... das ganze 
sind vibrationsmessungen...
Persönliche Seite #2370691
Lesenswert?

Moin,

wie bereits gesagt das ist SPI, also ein Bus das kann der STM in 
Hardware mit 25MHz max. die Daten die darüber rein kommen kannst du mit 
dem DMA in den RAM fahren. Du willst diese dann in einer SD Karte 
speichern? Wie lange willst du Messen?

16Bit bei 25MHz a 4 Kanäle komme ich auf knapp 400kSPS pro Kanal die du 
über den SPI raus bekommen müsstest.

Du hast 16Bit 40kSPS a 4 Kanäle als0 2,56kBit/s die du verarbeiten 
musst.

Mit einem Puffer von 1024 Werten kommst du auf einen Rambedarf von 16k 
für den Puffer. 512 Werte tuns aber auch. die Werte musst du dann Binary 
in eine bereits geöffnete Datei auf die SD karte schieben. das Über 
nimmt einweiterer DMA channel. alles kein Hexenwerk solange du nicht 
noch viel mit den Werten rechnen willst.

Das macht dann auch n Middensity Device mit 20k Ram

MfG

tec
Gast #2370694
Lesenswert?

Also mit Timer ist da nichts. Warum machst du das nicht mit der SPI. Der 
ADC ist dafuer gebaut.
Ein Example fuer SPI mit DMA Transfer findest du zusammen mit der 
aktuellen Firmware Library von ST 
(STM32F10x_StdPeriph_Lib_Vx.x.x\Project\STM32F10x_StdPeriph_Examples\SPI 
\DMA)
Gast #2370706
Lesenswert?

verechnet werden soll weiter nichts. Die Daten werden später auf einem 
desktop pc ausgewertet. Schaue mir mal die Beispiele zu SPI an, DAnke 
schon mal für die vielen und schnellen Antworten, werde mich dann 
nochmal melden...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren