I am using UART ttyS2 on DN355.
the defualt setup for ttyS2 is BaudRate 9600, like ttyS1.
but when I send data on those UARTs I see difference output, on the osciloscope.
While sending with ttyS1 it looks good, the baudrate is 9600,
but on ttyS2 the output looks like other baoudRate ~10600.
Please let me know how to config the port good.
I make some changes to enable those UARTs:
File: arch/arm/mach-davinci/serial.c
static inline unsigned int davinci_serial_in(struct plat_serial8250_port *up,
int offset)
{
offset <<= up->regshift;
return (unsigned int)__raw_readw(up->membase + offset);
}
static inline void davinci_serial_outp(struct plat_serial8250_port *p,
int offset, int value)
{
offset <<= p->regshift;
__raw_writew(value, p->membase + offset);
}
In file arch/arm/mach-davinci/board-dm355-evm.c -
Adding to function "board_init()" those line:
static void board_init(void)
{
volatile int *ptr_pgmgt,*ptr_ier; //Added for UART1 , UART2
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_VPSSMSTR, 1);
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_VPSSSLV, 1);
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_TPCC, 1);
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_TPTC0, 1);
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_TPTC1, 1);
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_GPIO, 1);
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_McBSP1, 1);
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_SPI, 1);
// Turn on WatchDog timer LPSC. Needed for RESET to work
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_TIMER2, 1);
// Added for UART1
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_UART1, 1);
davinci_serial_init(&serial_device);
davinci_writel(0x56837210, DAVINCI_VPSS_REGS_BASE + 0x810);
davinci_writel(0x7b3c0004, DAVINCI_VPSS_REGS_BASE + 0x814);
//Enable UART1
ptr_pgmgt = (volatile int *)IO_ADDRESS(DAVINCI_UART1_BASE+0x30) ;
ptr_ier = (volatile int *)IO_ADDRESS(DAVINCI_UART1_BASE+0x4);
*ptr_pgmgt = 0x0; //reset tx and rx
*ptr_ier = 0x0; //disable int
int del = 0;
for(del = 0; del < 100000 ; del++) // For delay
*ptr_pgmgt =0x6001;
// Initialize the clock configurations
davinci_clk_init();
//End UART1
// Added for UART2
board_setup_psc(DAVINCI_GPSC_ARMDOMAIN, DAVINCI_LPSC_UART2, 1);
davinci_serial_init(&serial_device);
davinci_writel(0x56837210, DAVINCI_VPSS_REGS_BASE + 0x810);
davinci_writel(0x7b3c0004, DAVINCI_VPSS_REGS_BASE + 0x814);
//Enable UART2
ptr_pgmgt = (volatile int *)IO_ADDRESS(DM355_UART2_BASE+0x30) ;
ptr_ier = (volatile int *)IO_ADDRESS(DM355_UART2_BASE+0x4);
*ptr_pgmgt = 0x0; //reset tx and rx
*ptr_ier = 0x0; //disable int
int del = 0;
for(del = 0; del < 100000 ; del++) // For delay
*ptr_pgmgt =0x6001;
// Initialize the clock configurations
davinci_clk_init();
//End UART2
}
to use the UARTs:
mknod /dev/ttyS0 c 4 64
mknod /dev/ttyS1 c 4 65
mknod /dev/ttyS2 c 4 66
echo 9999 > /dev/ttyS1 ......