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 ) ;
}