diff options
Diffstat (limited to 'firmware/target/arm/tms320dm320/uart-dm320.c')
-rw-r--r-- | firmware/target/arm/tms320dm320/uart-dm320.c | 55 |
1 files changed, 35 insertions, 20 deletions
diff --git a/firmware/target/arm/tms320dm320/uart-dm320.c b/firmware/target/arm/tms320dm320/uart-dm320.c index 5671e47a9f..151ad2921c 100644 --- a/firmware/target/arm/tms320dm320/uart-dm320.c +++ b/firmware/target/arm/tms320dm320/uart-dm320.c | |||
@@ -62,39 +62,53 @@ void uart1_putc(char ch) | |||
62 | IO_UART1_DTRR=ch; | 62 | IO_UART1_DTRR=ch; |
63 | } | 63 | } |
64 | 64 | ||
65 | void uart1_puts(const char *str) | 65 | void uart1_puts(const char *str, int size) |
66 | { | 66 | { |
67 | char ch; | 67 | int count=0; |
68 | while ((ch = *str++) != '\0') { | 68 | while (count<size) |
69 | uart1_putc(ch); | 69 | { |
70 | uart1_putc(str[count]); | ||
71 | count++; | ||
70 | } | 72 | } |
71 | } | 73 | } |
72 | 74 | ||
73 | /* This function returns the number of bytes left in the queue after a read is done (negative if fail)*/ | 75 | /* This function returns the number of bytes left in the queue after a read is done (negative if fail)*/ |
74 | int uart1_gets_queue(char *str, unsigned int size) | 76 | int uart1_gets_queue(char *str, unsigned int size) |
75 | { | 77 | { |
78 | IO_INTC_EINT0 &= ~(1<<IRQ_UART1); | ||
79 | int retval; | ||
80 | |||
76 | if(uart1_recieve_count<size) | 81 | if(uart1_recieve_count<size) |
77 | return -uart1_recieve_count; | ||
78 | |||
79 | if(uart1_recieve_read+size<RECIEVE_RING_SIZE) | ||
80 | { | 82 | { |
81 | memcpy(str,uart1_recieve_buffer_ring+uart1_recieve_read,size); | 83 | retval= -1; |
82 | } | 84 | } |
83 | else | 85 | else |
84 | { | 86 | { |
85 | int tempcount=(RECIEVE_RING_SIZE-uart1_recieve_read); | 87 | if(uart1_recieve_read+size<RECIEVE_RING_SIZE) |
86 | memcpy(str,uart1_recieve_buffer_ring+uart1_recieve_read,tempcount); | 88 | { |
87 | memcpy(str+tempcount,uart1_recieve_buffer_ring,size-tempcount); | 89 | memcpy(str,uart1_recieve_buffer_ring+uart1_recieve_read,size); |
90 | } | ||
91 | else | ||
92 | { | ||
93 | int tempcount=(RECIEVE_RING_SIZE-uart1_recieve_read); | ||
94 | memcpy(str,uart1_recieve_buffer_ring+uart1_recieve_read,tempcount); | ||
95 | memcpy(str+tempcount,uart1_recieve_buffer_ring,size-tempcount); | ||
96 | } | ||
97 | |||
98 | uart1_recieve_count-=size; | ||
99 | |||
100 | if(uart1_recieve_read+size<RECIEVE_RING_SIZE) | ||
101 | uart1_recieve_read+=size; | ||
102 | else | ||
103 | uart1_recieve_read=size-(RECIEVE_RING_SIZE-uart1_recieve_read); | ||
104 | |||
105 | retval=uart1_recieve_count; | ||
88 | } | 106 | } |
89 | 107 | ||
90 | uart1_recieve_count-=size; | 108 | /* Enable the interrupt */ |
91 | 109 | IO_INTC_EINT0 |= (1<<IRQ_UART1); | |
92 | if(uart1_recieve_read+size<RECIEVE_RING_SIZE) | ||
93 | uart1_recieve_read+=size; | ||
94 | else | ||
95 | uart1_recieve_read=size-(RECIEVE_RING_SIZE-uart1_recieve_read); | ||
96 | 110 | ||
97 | return uart1_recieve_count; | 111 | return retval; |
98 | } | 112 | } |
99 | 113 | ||
100 | /* UART1 receive interupt handler */ | 114 | /* UART1 receive interupt handler */ |
@@ -109,7 +123,8 @@ void UART1(void) | |||
109 | if(uart1_recieve_write==RECIEVE_RING_SIZE) | 123 | if(uart1_recieve_write==RECIEVE_RING_SIZE) |
110 | uart1_recieve_write=0; | 124 | uart1_recieve_write=0; |
111 | 125 | ||
112 | uart1_recieve_buffer_ring[uart1_recieve_write++] = IO_UART1_DTRR & 0xff; | 126 | uart1_recieve_buffer_ring[uart1_recieve_write] = IO_UART1_DTRR & 0xff; |
127 | uart1_recieve_write++; | ||
113 | uart1_recieve_count++; | 128 | uart1_recieve_count++; |
114 | } | 129 | } |
115 | } | 130 | } |