This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Why output data is wrong by serial?

hello,everyone!
I wrote a program about serial communication and when I run it on simulator,it is no problem, but when I upload it to the Phytec KitCon167's flash,something wrong occur.
The program is below:

unsigned char temp,temp1;

void main()
{
  serial_init ();

  temp = 0x45;
  while(1)
  {
    transmit_data(temp);
    while (! S0TBIR)
    {
     ;
    }
    S0TBIR = 0;
    temp1 = 0x23;
    transmit_data(temp1);
    while (! S0TBIR)
    {
     ;
    }
    S0TBIR = 0;

    temp1 ++;
    transmit_data(temp1);
    while (! S0TBIR)
    {
     ;
    }
    S0TBIR = 0;
}

In simulator,serial output is 45 23 24;
but in KC167,serial output is FF 23 FF.
Who can tell me,what happen to the program?

Parents
  • Some random stuff to try:

    1] Instead of using S0TBIR, try S0TIR. Also set S0TIR to 0 before putting anything into S0TBUF for the first time. Also remove the space between temp1 and the ++ operator.

    2] Use

    S0CON=0x0011;
    at the beginning of serial_init. At the end of serial_init add the line:
    S0R = 1;

    3] If I were you, I would move up the priority of interrupt to level 5 or more. When you add the Keil RTX, you will miss characters if the serial interrupts aren't greater than the RTX interrupts.

    4] Take a look at where temp and temp1 are mapped in memory. Instead of setting SOTBUF to temp and temp1, set
    SOTBUF=0x43;
    , etc....

Reply
  • Some random stuff to try:

    1] Instead of using S0TBIR, try S0TIR. Also set S0TIR to 0 before putting anything into S0TBUF for the first time. Also remove the space between temp1 and the ++ operator.

    2] Use

    S0CON=0x0011;
    at the beginning of serial_init. At the end of serial_init add the line:
    S0R = 1;

    3] If I were you, I would move up the priority of interrupt to level 5 or more. When you add the Keil RTX, you will miss characters if the serial interrupts aren't greater than the RTX interrupts.

    4] Take a look at where temp and temp1 are mapped in memory. Instead of setting SOTBUF to temp and temp1, set
    SOTBUF=0x43;
    , etc....

Children
No data