Hallo da ich gerade versuche oneWire am LPC11C24 zu aktivieren, wollte
ich mal fragen ob mal einer schauen kann ob zumindest der Timer mal
richtig initialisiert wird.
Habe mal ein paar versuche gemacht, aber keine hat funktioniert, und ich
tue mir nun schwer ob der Presacle korrekt eingestellt ist.
Er sollte jede µs einmal zählen
das war der original Code
1 | //#define PRESCALE ((SystemCoreClock/LPC_SYSCTL->SYSAHBCLKDIV)/(1000000ul * 2)){/code]
|
2 |
|
3 | ich hätte es dann noch mit
|
4 | [code]
|
5 | #define PRESCALE (SystemCoreClock / 1000000ul)
|
6 | // und
|
7 | #define PRESCALE (SystemCoreClock / (1000000ul * 4))
|
8 | // und
|
9 | #define PRESCALE (12)
|
10 | // und
|
11 | #define PRESCALE (48)
|
getestet
Es ist ein 12 MHz Quarz angeschlossen.
LPC_SYSCTL->SYSAHBCLKDIV ist 1
LPC_SYSCTL->MAINCLKSEL ist 3
Der SystemCoreClock ist 48000000 .. warum auch immer der den 4-fachen
Wert vom Quartz hat?
ich müsste nun mal sicherstellen das der Timer wirklich korrekt
funktioniert, damit ich die restlichen Fehler dann noch schauen kann ...
der Timer Init ist dann noch
1 | void ow_init() {
|
2 | /* Enable AHB clock to the GPIO domain. */
|
3 | LPC_SYSCTL->SYSAHBCLKCTRL |= (1 << 6);
|
4 |
|
5 | /* Enable AHB clock to Timer16B0. */
|
6 | LPC_SYSCTL->SYSAHBCLKCTRL |= TIMER_EN;
|
7 |
|
8 | LPC_TMR->PR = PRESCALE;
|
9 | LPC_TMR->TCR = 0x02; // timer stopped and reset
|
10 |
|
11 | /* Enable the TIMER0 Interrupt */
|
12 | NVIC_EnableIRQ(TIMER_IRQn);
|
13 |
|
14 | }
|