Forums

Serial send, hangs on DX load.

Started by john...@yahoo.com March 15, 2010
I am writing a simple program to test the serial port. (testing this for three days now, headache!) On the TMS320VC33.

The code sets the I/O to output mode and turns them on. Then it shuts off all interrupts. After this it sets up the serial port for a transmit. I want the DSP to generate the FSX, and CLKX. I have tried many iterations of this code and settings of these registers but every time I send the write command to load the DR register. The program hangs and the I/Os stay high. If I comment out the Load DX line it passes fine and goes to an infinite loop toggling the I/Os which I can see is the end of my program.

Now I have my scope on the CLKX pin and I cannot see any clocking on that pin. Does anyone have any ideas for what maybe wrong because I am out of ideas. My interrupt routines are just empty functions. I have XTINT and XINT enabled but they shouldn't do anything (ive tried off too)? Is there some bit I have to toggle to start a send my data word out of DX/XSR?

Thanks in advance.

Daniel Johnson

(CODE BELOW)
___________________________________________________________

asm(" ldi 22h, IOF ");
asm(" ldi 66h, IOF ");

ST = 0x0000; /* GIE_bit = 0 */
IE = 0x00; /* EXINT0_bit,ERINT0_bit = 0 */

sp0->s_rxt_control = 0x000; //Clears timer control
sp0->gcontrol = 0x03FC0046; //Halts serial port
sp0->s_x_control = 0x333; //sets up transmit control
sp0->s_r_control = 0x111; //sets up recieve control
sp0->s_rxt_period = 0x000A; //sets up a slower clock
sp0->s_rxt_control = 0x1CF; //sets up timer control
sp0->x_data = 0x00000000; //clears the DR register
sp0->gcontrol = 0x0FFC0046; //Starts the serial port

sp0->x_data = 0x84ffffff; //supposed to send my data

asm("loop: ldi 26h, IOF ");
asm(" ldi 26h, IOF ");
asm(" ldi 26h, IOF ");
asm(" ldi 26h, IOF ");
asm(" ldi 26h, IOF ");
asm(" ldi 26h, IOF ");
asm(" ldi 26h, IOF ");
asm(" ldi 26h, IOF ");
asm(" ldi 26h, IOF ");
asm(" ldi 26h, IOF ");
asm(" ldi 26h, IOF ");
asm(" ldi 26h, IOF ");
asm(" ldi 62h, IOF ");
asm(" ldi 62h, IOF ");
asm(" ldi 62h, IOF ");
asm(" ldi 62h, IOF ");
asm(" ldi 62h, IOF ");
asm(" ldi 62h, IOF ");
asm(" ldi 62h, IOF ");
asm(" ldi 62h, IOF ");
asm(" ldi 62h, IOF ");
asm(" ldi 62h, IOF ");
asm(" ldi 62h, IOF ");
asm(" ldi 62h, IOF ");
asm(" br loop ");
____________________________________________

_____________________________________
Same Problem, My problem is even if the XSR is empty and the DXR is ready for data, once I load the data to DXR there is no transfer to XSR. So no data comes out. I get the Clock out now. Any ideas? or Source code any of you might have would be helpful. Maybe I am doing something fundamentally wrong?

Thanks in advance,
Daniel

>I am writing a simple program to test the serial port. (testing this for >three days now, headache!) On the TMS320VC33.
>
>The code sets the I/O to output mode and turns them on. Then it shuts off all interrupts. After this it sets up the serial port for a transmit. I want the DSP to generate the FSX, and CLKX. I have tried many iterations of this code and settings of these registers but every time I send the write command to load the DR register. The program hangs and the I/Os stay high. If I comment out the Load DX line it passes fine and goes to an infinite loop toggling the I/Os which I can see is the end of my program.
>
>Now I have my scope on the CLKX pin and I cannot see any clocking on that pin. Does anyone have any ideas for what maybe wrong because I am out of ideas. My interrupt routines are just empty functions. I have XTINT and XINT enabled but they shouldn't do anything (ive tried off too)? Is there some bit I have to toggle to start a send my data word out of DX/XSR?
>
>Thanks in advance.
>
>Daniel Johnson
>
>(CODE BELOW)
>___________________________________________________________
>
> asm(" ldi 22h, IOF ");
> asm(" ldi 66h, IOF ");
>
> ST = 0x0000; /* GIE_bit = 0 */
> IE = 0x00; /* EXINT0_bit,ERINT0_bit = 0 */
>
> sp0-> s_rxt_control = 0x000; //Clears timer control
> sp0-> gcontrol = 0x03FC0046; //Halts serial port
> sp0-> s_x_control = 0x333; //sets up transmit control
> sp0-> s_r_control = 0x111; //sets up recieve control
> sp0-> s_rxt_period = 0x000A; //sets up a slower clock
> sp0-> s_rxt_control = 0x1CF; //sets up timer control
> sp0-> x_data = 0x00000000; //clears the DR register
> sp0-> gcontrol = 0x0FFC0046; //Starts the serial port
>
> sp0-> x_data = 0x84ffffff; //supposed to send my data
>
> asm("loop: ldi 26h, IOF ");
> asm(" ldi 26h, IOF ");
> asm(" ldi 26h, IOF ");
> asm(" ldi 26h, IOF ");
> asm(" ldi 26h, IOF ");
> asm(" ldi 26h, IOF ");
> asm(" ldi 26h, IOF ");
> asm(" ldi 26h, IOF ");
> asm(" ldi 26h, IOF ");
> asm(" ldi 26h, IOF ");
> asm(" ldi 26h, IOF ");
> asm(" ldi 26h, IOF ");
> asm(" ldi 62h, IOF ");
> asm(" ldi 62h, IOF ");
> asm(" ldi 62h, IOF ");
> asm(" ldi 62h, IOF ");
> asm(" ldi 62h, IOF ");
> asm(" ldi 62h, IOF ");
> asm(" ldi 62h, IOF ");
> asm(" ldi 62h, IOF ");
> asm(" ldi 62h, IOF ");
> asm(" ldi 62h, IOF ");
> asm(" ldi 62h, IOF ");
> asm(" ldi 62h, IOF ");
> asm(" br loop ");
>____________________________________________
>
>_____________________________________

_____________________________________