Uart sendet String nicht komplett

OP #1616252
Lesenswert?
• ▲
▼
Hallo zusammen,

ich arbeite derzeit mit einem LPC2148 auf dem MCB2140 Evalutaionboard 
von Keil, mein Compiler ist der ARM-elf-gcc. Mein Debugger ist HiTOP 
Version 05.32.0030.
Mein Problem ist, dass ich zwar über das UART Zeichen senden kann,
wenn ich jedoch einen String mit "transmit()" übertragen will, werden 
höchsten 16 Zeichen gesendet.
Wenn ich jedoch in di Funktion transmit() hinein springe und jeden 
Befehl einzeln ausführe, wird der String korrekt übertragen.
Hat jemand schonmal ein ähnliches Problem gehabt?

Gruß

Hier der Code:
1
#define UART1 7
2
#define TXEN 7
3
#define DLAB 7
4
#define UART_WORD_LENGTH0 0
5
#define UART_WORD_LENGTH1 1
6
#define BREAK_CONTROL 6
7

8
#define ENABLE_VIC_SLOT 5
9
#define TXD_UART1 16
10
#define RXD_UART1 18
11
#define TRANREGEMPTY 5        //Transmit Holding Register Empty
12

13
#define VICT_CNTL_NUM 0
14

15
#define REC_INT_EN 0
16
#define TRAN_INT_EN 1
17

18
#define TX_FIFO_RESET 2
19
#define RX_FIFO_RESET 1 
20
#define FIFO_ENABLE   0
21
#define RX_TRIG_LEVL 6
22

23
#define INT_REC_REST_DAT 6
24
#define INT_UART_ERR 3
25
#define INT_REC_DAT_AVAIL 2
26
#define INT_TRANREGEMPTY 1
27

28
#define RDR 0
29
#define OE 1
30
#define PE 2
31
#define FE 3
32
#define BI 4
33
#define THRE 5
34
#define TEMT 6
35
#define RXFE 7
36

37
char * Message = "Hallo UART, sag mal Piep! \r \n " ;
38

39
void baud_regset(int baudrate)
40
{
41
  U1LCR |= (1 << DLAB);   //DLAB = 1;
42

43
  int x = PCLK/(16*baudrate);
44
  U1DLM = x / 256;       
45
  U1DLL = x % 256;
46

47
  U1LCR |= (0 << DLAB);
48
}
49

50
void uart1_init(void)
51
{
52
  U1FCR = (1 << TX_FIFO_RESET) | (1 << RX_FIFO_RESET) | (1 << FIFO_ENABLE) | (0 << RX_TRIG_LEVL);  //Nach jedem Zeichen FIFO-RX-Interrup    // Enable and clear FIFO's
53
  U1LCR |= (1<<DLAB)| (1 << UART_WORD_LENGTH1) | (1 << UART_WORD_LENGTH0) | ( 1 << BREAK_CONTROL );       // 8N1 Datenformat, enable Divisor latch bit
54
  
55
  baud_regset(9600);
56
  install_irq( UART1 , (void*)UART1_handler );
57

58
  U1LCR =  (0<<DLAB) | (1 << UART_WORD_LENGTH1) | (1 << UART_WORD_LENGTH0);   // Disable Divisor latch bit
59
  U1IER = (1 << REC_INT_EN); //| (1 << TRAN_INT_EN);         //Enable Receive und !Transmit-Interrupt
60

61
  U1TER = (1 << TXEN);
62
  PCONP |= (1 << PCUART1 );   //PCONP Power Control for Peripherals Register
63

64
  PINSEL0 |= (1 << TXD_UART1) | (1 << RXD_UART1); 
65
}
66

67
void uart1_transmit_string(char* text)
68
{
69
  while( *text != 0 )
70
  {  
71
    while( !( U1LSR & THRE) );
72
    U1THR = *(text++);
73
    
74
  }
75
}

void main(void)
{
 uart1_transmit_string( Message ) ;
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.