@@ -242,26 +242,41 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) {
242
242
}
243
243
244
244
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 );
246
247
}
247
248
248
249
/******************************************************************************
249
250
* READ/WRITE
250
251
******************************************************************************/
251
252
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 ;
253
257
}
254
258
255
259
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 ++ ;
257
265
}
258
266
259
267
int serial_readable (serial_t * obj ) {
260
268
return ((int ) (HWREG (obj -> baseAddr + UART_O_FR ) & UART_FR_RXFE ));
261
269
}
262
270
263
271
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 ;
265
280
}
266
281
267
282
void serial_clear (serial_t * obj ) {
0 commit comments