Hallo an alle,
Ich beginne gerade die ersten Schritte mit den Arm Cortex M3, genauer
gesagt mir dem LM3S6950 von Luminary. Als Debugger verwende ich den
J-Link von Segger in Kombination mit der Keil MDK 3.7
Entwicklungsumgebung (µVision 4 Beta 3). Debugausgaben im Programm gebe
ich mittels ITM und SWD direkt im Keil aus.
So nun zu meinem Problem. Ich möchte einen Inkrementaldrehgeber
auswerten. Dazu verwendet ich das Hardware-Interface des
Mikrocontrollers. Für die Konfiguration verwendete ich die Driverlib von
Luminary.
Hier folgendes Programm:
1 | void setInput(unsigned long port, unsigned long pins)
|
2 | {
|
3 | GPIOPinTypeGPIOInput(port, pins); //input
|
4 | GPIOPadConfigSet(port, pins, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU); //pullup
|
5 | }
|
6 |
|
7 | void init_io(void)
|
8 | {
|
9 | SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
|
10 | setInput(GPIO_PORTD_BASE, ENC_PHA);
|
11 |
|
12 | SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
|
13 | setInput(GPIO_PORTD_BASE, ENC_PHB);
|
14 |
|
15 | DEBUG("IO Init Complete\n");
|
16 |
|
17 | SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI);
|
18 | SysCtlPeripheralReset(SYSCTL_PERIPH_QEI);
|
19 | QEIConfigure(QEI_BASE, QEI_CONFIG_CAPTURE_A | QEI_CONFIG_NO_RESET | QEI_CONFIG_QUADRATURE | QEI_CONFIG_SWAP, 0xFFFFFFFF);
|
20 | GPIOPinTypeQEI(GPIO_PORTD_BASE, GPIO_PIN_1); //PHA
|
21 | GPIOPinTypeQEI(GPIO_PORTF_BASE, GPIO_PIN_0); //PHB --> Hier kommt es zur unerwarteten FaultISR
|
22 | QEIPositionSet(QEI_BASE, 0);
|
23 | QEIEnable(QEI_BASE);
|
24 | }
|
25 |
|
26 | int main(void)
|
27 | {
|
28 | DEBUG("Starte Init\n");
|
29 | init_io();
|
30 |
|
31 | while(1)
|
32 | {
|
33 | DEBUG("Test\n");
|
34 | }
|
35 | }
|
Ich habe absolut keine Ahnung warum es während der Konfiguration zu
einem solchen Interrupt kommt. Die Interrupts werden ja generell
nirgends eingeschaltet.
Ein weiteres Phänomen ist, dass es im Simulator einwandfrei läuft. Nur
auf der Hardware kommt es zu diesem Fehler.
Ich hoffe es kann mir wer helfen.
Danke im Voraus
lg Robert