Hallo,
verschicke und empfange per RS232 Daten an/von einen AT91SAM7SE. Nun hab
ich folgendes Probllem:
Es tritt völiig stochastisch (mal beim 1., mal beim 50. datensatz) ein
Fehler beim Senden von Daten zum µC auf, d.h. er geht danach in den
pabort_handler und das Porgramm muss neu gestartet werden. Ich habe die
Vermutung, dass sich Interrupts gegenseitig beeinflussen. Ich arbeite
mit einem Timer, einem USART Interrupt und einem externen, die sind
folgendermaßen im code definiert:
1 | void main_ILD ()
|
2 | {
|
3 |
|
4 | [...]
|
5 |
|
6 | USART_Config(19200);
|
7 |
|
8 | ctl_start_timer(ctl_increment_tick_from_isr);
|
9 | ctl_global_interrupts_enable();
|
10 |
|
11 | Event_Handler_Init();
|
12 |
|
13 | [..]
|
14 |
|
15 | while(1)
|
16 | {
|
17 | curTime = ctl_get_current_time();
|
18 | Interpreter ();
|
19 |
|
20 | if (curTime - DPRAM_Old_Time > 50)
|
21 | {DPRAM_Old_Time = curTime;
|
22 | DPRAM_Active();
|
23 | }
|
24 | }
|
25 | }
|
26 |
|
27 |
|
28 |
|
29 | void Event_Handler_Init()
|
30 | {
|
31 | ctl_set_isr(29, 1, CTL_ISR_TRIGGER_NEGATIVE_EDGE, Event_Handler, 0);
|
32 | ctl_unmask_isr(29);
|
33 |
|
34 | [...]
|
35 | }
|
36 |
|
37 |
|
38 |
|
39 | void USART_Config(DWORD BaudRate_Calc)
|
40 | {
|
41 | [...]
|
42 |
|
43 | ctl_set_isr(6, 2, CTL_ISR_TRIGGER_FIXED, US0_Int, 0);
|
44 | ctl_unmask_isr(6);
|
45 |
|
46 | SETBIT(US0_IER, 0);
|
47 | }
|
Hate jemand eine Idee an was es liegen könnte? Hab schon verschiedene
Prioritäten etc. ausprobiert, ohne erfolg.
Gruß, S