Hallo zusammen,
ich hab folgendes Problem mit meiner UART. Also der Aufbau ist eig. ganz
simpel. Kommuniziert wird zwischen einem MSP430 und einem Cortex
M3(STM32-SK Boars). Beide sind über einen IrDA Transceiver mit einander
verbunden.
Das Senden der Daten klappt auch soweit ganz gut. Schwierigkeiten macht
eher das empfangen der Daten. Manchmal wird nie ein Empfangsinterrupt
ausgelöst und wenn das einmal der Fall ist stimmt das Empfangsregister
in keinster Weise mit meinem Testzeichen(0x53 -> 01010011) überein. Ich
glaube nicht das es an der initialisierung der UART´s liegt, da es ja
gelegentlich so halbwegs funktionoert.
Sende/Empfangsroutine des MSP:
1 | while (1)
|
2 | {
|
3 | for (i = 1000; i; i--); // Small delay
|
4 | while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready?
|
5 | UCA0TXBUF = TxByte; // TX character
|
6 | P1OUT ^= 0x01;
|
7 |
|
8 | __disable_interrupt();
|
9 | IE2 |= UCA0RXIE; // Enable RX int
|
10 | __bis_SR_register(GIE); // Enter LPM0 w/ interrupts
|
11 | }
|
12 | }
|
13 | #pragma vector = USCIAB0RX_VECTOR
|
14 | __interrupt void USCIAB0RX_ISR(void)
|
15 | {
|
16 | RxByte = UCA0RXBUF; // Get RXed character
|
17 | IE2 &= ~UCA0RXIE; // Disable RX int
|
18 | TxByte = RxByte;
|
19 | if (TxByte != RxByte) // RX OK?
|
20 | {
|
21 | P1DIR |= 0x01;
|
22 | P1OUT |= 0x01; // LED P1.0 on
|
23 | }
|
24 | //__bic_SR_register_on_exit(CPUOFF); // Exit LPM0
|
25 | }
|
und hier die Sende/Empfangsroutine des Cortex M3:
1 | void USART1_IRQHandler(void)
|
2 | {
|
3 | char i, c=0x53;
|
4 |
|
5 | if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
|
6 | {
|
7 | i = USART_ReceiveData(USART1);
|
8 | /* Clear the USART1 Receive interrupt */
|
9 | USART_ClearITPendingBit(USART1, USART_IT_RXNE);
|
10 | }
|
11 |
|
12 | if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
|
13 | {
|
14 | USART_SendData(USART1, c);
|
15 | /* Clear the USART1 transmit interrupt */
|
16 | USART_ClearITPendingBit(USART1, USART_IT_TXE);
|
17 | }
|
18 | }
|
Kann es vllt daran liegen, dass die Übertragung ein nur Halbduplex ist,
die beiden Transceiver aber nonstop Senden/Empfangen ?
Wenn ich mit dem Oszi am jeweiligen Transmit-Pin des Transceivers messe
bekomm ich mein Zeichen ja angezeigt(x-mal wiederholt)
Woran kann das liegen?
MfG