Skip to content

Commit d83d84d

Browse files
author
Jenny Plunkett
authored
Merge pull request ARMmbed#20 from yennster/uart-new
Fixing serial_putc, register offsets
2 parents d507d60 + 35f6b17 commit d83d84d

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

targets/TARGET_TI/TARGET_CC32XX/TARGET_CC3220SF/device/CC3220SF.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ typedef struct
158158
__I uint32_t RSR; /*!< Receive Status, Address offset : 0x04 */
159159
__O uint32_t ECR; /*!< Error Clear, Address offset : 0x04 */
160160
} STATUS;
161+
uint32_t RESERVED0[4];
161162
__IO uint32_t FR; /*!< Flags, Address offset : 0x18 */
162163
__IO uint32_t ILPR; /*!< IrDA Low-power Counter, Address offset : 0x20 */
163164
__IO uint32_t IBRD; /*!< Integer Baud Rate, Address offset : 0x24 */
@@ -170,7 +171,7 @@ typedef struct
170171
__IO uint32_t MIS; /*!< Masked Interrupt Status , Address offset : 0x40 */
171172
__O uint32_t ICR; /*!< Interrupt Clear, Address offset : 0x44 */
172173
__IO uint32_t DMACTL; /*!< DMA Control, Address offset : 0x48 */
173-
uint32_t RESERVED0[6];
174+
uint32_t RESERVED1[6];
174175
//__IO uint32_t LCTL; /*!< Address offset : 0x90 */
175176
//__IO uint32_t LSS; /*!< Address offset : 0x94 */
176177
//__IO uint32_t LTIM; /*!< Address offset : 0x98 */

targets/TARGET_TI/TARGET_CC32XX/TARGET_CC3220SF/serial_api.c

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -242,26 +242,41 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) {
242242
}
243243

244244
static void serial_flow_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) {
245-
serial_irq_set_internal(obj, irq, enable);
245+
uart_data[obj->index].rx_irq_set_flow = enable;
246+
serial_irq_set_internal(obj, RxIrq, enable);
246247
}
247248

248249
/******************************************************************************
249250
* READ/WRITE
250251
******************************************************************************/
251252
int serial_getc(serial_t *obj) {
252-
return ((int) UARTCharGet(obj->baseAddr));
253+
//return ((int) UARTCharGet(obj->baseAddr));
254+
while (!serial_readable(obj));
255+
int data = obj->uart->DR;
256+
return data;
253257
}
254258

255259
void serial_putc(serial_t *obj, int c) {
256-
UARTCharPut(obj->baseAddr, (unsigned char) c); // @suppress("Field cannot be resolved")
260+
//UARTCharPut(obj->baseAddr, (unsigned char) c); // @suppress("Field cannot be resolved")
261+
while (!serial_writable(obj));
262+
//obj->uart->DR = (unsigned char) c;
263+
HWREG(obj->baseAddr + UART_O_DR) = (unsigned char) c;
264+
uart_data[obj->index].count++;
257265
}
258266

259267
int serial_readable(serial_t *obj) {
260268
return ((int) (HWREG(obj->baseAddr + UART_O_FR) & UART_FR_RXFE));
261269
}
262270

263271
int serial_writable(serial_t *obj) {
264-
return ((int) (HWREG(obj->baseAddr + UART_O_FR) & UART_FR_TXFF));
272+
//return ((int) (HWREG(obj->baseAddr + UART_O_FR) & UART_FR_TXFF));
273+
int isWritable = 1;
274+
if (HWREG(obj->baseAddr + UART_O_FR) & UART_FR_TXFF) { //(obj->uart->LSR & 0x20)
275+
uart_data[obj->index].count = 0;
276+
} else if (uart_data[obj->index].count >= 16) {
277+
isWritable = 0;
278+
}
279+
return isWritable;
265280
}
266281

267282
void serial_clear(serial_t *obj) {

0 commit comments

Comments
 (0)