nrkhara:
Board is working fine except for UART1. So the power pins are properly isolated and not shorted anywhere. Checked continuity on the controller pins itself between the Tx and Rx. Nothing else connected in the path of UART1. Can i try anything on the software end also to exploit more on this issue?
Both the controllers are powered together.
DrAzzy:
When idle what is the voltage on the serial1 pins? It should be ~Vcc.
Check with DVM in continuity mode - check that none of the pins are shorted to Vcc, Gnd, eachother, or any other adjacent pin (it can be helpful to clip the leads of the DVM to pins (the kind you use in sewing) or unbent safetypins, so they come to a sharp point. )
Are both Arduino's powered during your tests? They must be - it can actually damage the unpowered arduino if they're not, since you'd be "backpowering" it through the protection diodes on it's RX pin.
It's not clear if you've tried the other things I mentioned. Check the idle voltage levels on Serial1 (you can upload a sketch that does nothing except do Serial1.begin(19200) to both boards for this) - make sure they're both at Vcc in this case.
Also, did you test that there is no continuity between the two data lines (ie, that they're not shorted to eachother)? Or between TX/RX and Vcc, Gnd, or any other adjacent pin? It's particularly important if you're assembling it yourself (either via drag soldering or reflowing at home); at that pitch, bridged pins can happen easily and are hard to spot. This sort of testing, while it seems silly, solves a large portion of the problems that I have to get out the DVM for.
Also, try setting up those two sketches, and poking the transmitting mega2560's TX pin with the tip of a pin/safety pin, pressing it down. Do the same on the receiving mega2560's RX pin. This is a check for cold solder joints.
Are both boards running at the speed you think they are? If there's an LED that you can control from the code, modify blink to use that pin; make sure it blinks at the expected speed.
Do you have a scope? If so, look at the line that should be carrying data - is it?
There is no reason to suspect a software issue here; the code is dead simple. I cannot think of any debugging at a software level that would be useful here; all evidence points to an as-yet unidentified hardware issue.