Hi,
1.5MBaud is rather high and no usual standard. What is the receiver and what interface, cables, cable length do you use?
...But I assume the baud rate is not the key problem.
"Volatile long int" is a 32 but variable? Please confirm.
If so, it is a multi byte transfer.
If it is sent as raw binary, then 4 bytes have to be transmitted, means 40 bits (with 8N1).
With low data rate (1kHz) there usually is a relatively large gap of idle on the bus, thus it is very likely that the frame = 4 bytes is automatically synced with the use of the gap.
But with faster data rate, the gap becomes smaller and maybe the receiver loses frame sync. Then the reciver does not know which 4 bytes are a frame and thus maybe uses 2 bytes from the previous frame and 2 bytes from the new frame. Giving nonsense output dara at the receiver.
Another possible problem is, that the serialWrite() routine is slow. Arduino isn't the most processing time effective compiler.
A scope picture could give more informations.
Or adding debug lines in your code, like:
* SET an output pin before the serialWrite()
* and CLEAR the output pin after the serialWrite()
With a scope you may detect if the rate is the expected 2kHz, you will see the jitter, and you will see how long the serialWrite() needs.
Klaus