________________________________________________________________________
Applicable Environment
________________________________________________________________________
- Topic: Debugging serial driver
- SDP: 6.4.1
- Target: Any supported target
________________________________________________________________________
Solution / Recommendation________________________________________________________________________
If no data over a serial line it is useful to check if the UART generates interrupts. This can be done by adding an incrementing counter into the ISR of the serial driver and printing the value on demand. "stty </dev/serx sane" calls the ser_stty() function in tto.c and is a good place to print the counter to the console or slogger.
Of course you can run the devc driver in the debugger as well.
tto.c
extern unsigned irq_count;
...
void
ser_stty(DEV_8250 *dev) {
unsigned lcr = 0;
const uintptr_t *port = dev->port;
unsigned value;
slogf( _SLOG_SETCODE(_SLOGC_TEST, 2), _SLOG_DEBUG1, "8250: irq count %d", irq_count);
printf( "irq count = %d\n", irq_count );
// Set Baud rate
value = (dev->tty.baud == 0) ? 0 : (dev->clk/(dev->tty.baud * dev->div));
intr.c
unsigned irq_count=0;
...
/*
* Serial interrupt handler
*/
const struct sigevent *
ser_intr(void *area, int id) {
struct dev_list *list = area;
int status = 0;
int something_happened;
unsigned char msr, lsr;
DEV_8250 *dev;
struct sigevent *event = NULL;
unsigned c;
irq_count++;
On the console type "stty /dev/ser1 sane" to print the count on the console and to slogger.
________________________________________________________________________
NOTE:
This entry has been validated against the SDP version listed above. Use
caution when considering this advice for any other SDP version. For
supported releases, please reach out to QNX Technical Support if you have any questions/concerns. ________________________________________________________________________