PLEASE REPLY.............NCB 1321x baud rate

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

PLEASE REPLY.............NCB 1321x baud rate

1,853 次查看
bitasobhani
Contributor III

Hi all

I want to connect an optical port with baud rate 300 to 1321x NCB board. But the board baud rate can only be set from 1200 to 38400 (as below). How can I change the baud rate to 300?

Thanks

 

/* SCI baud rate = BUSCLK/(16?Baud rate)
 * Note that not all baud rates work for all clock rates. The actual baud rate
 * may deviate too much from the RS232 specification.
 */
#ifndef gSystemClock_d
#define gSystemClock_d     16           /* 16 MHz. */
#endif

typedef uint16_t UartBaudRate_t;
#if gSystemClock_d == 8
#define gUARTBaudRate1200_c     ((UartBaudRate_t) 0x01A1)
#define gUARTBaudRate2400_c     ((UartBaudRate_t) 0x00D0)
#define gUARTBaudRate4800_c     ((UartBaudRate_t) 0x0068)
#define gUARTBaudRate9600_c     ((UartBaudRate_t) 0x0034)
#define gUARTBaudRate19200_c    ((UartBaudRate_t) 0x001A)
#define gUARTBaudRate38400_c    ((UartBaudRate_t) 0x0011)
#define gUARTBaudRate57600_c    ((UartBaudRate_t) 0x0009)
#define gUARTBaudRate115200_c   ((UartBaudRate_t) 0x0004)   /* Might not work for all clients */
#endif

#if gSystemClock_d == 12
#define gUARTBaudRate1200_c     ((UartBaudRate_t) 0x0271)
#define gUARTBaudRate2400_c     ((UartBaudRate_t) 0x0139)
#define gUARTBaudRate4800_c     ((UartBaudRate_t) 0x009C)
#define gUARTBaudRate9600_c     ((UartBaudRate_t) 0x004E)
#define gUARTBaudRate19200_c    ((UartBaudRate_t) 0x0027)
#define gUARTBaudRate38400_c    ((UartBaudRate_t) 0x0014)
#define gUARTBaudRate57600_c    ((UartBaudRate_t) 0x000D)
#define gUARTBaudRate115200_c   ((UartBaudRate_t) 0x0007)
#endif

#if gSystemClock_d == 16
#define gUARTBaudRate1200_c     ((UartBaudRate_t) 0x0341)
#define gUARTBaudRate2400_c     ((UartBaudRate_t) 0x01A1)
#define gUARTBaudRate4800_c     ((UartBaudRate_t) 0x00D0)
#define gUARTBaudRate9600_c     ((UartBaudRate_t) 0x0068)
#define gUARTBaudRate19200_c    ((UartBaudRate_t) 0x0034)
#define gUARTBaudRate38400_c    ((UartBaudRate_t) 0x001A)
#define gUARTBaudRate57600_c    ((UartBaudRate_t) 0x0011)
#define gUARTBaudRate115200_c   ((UartBaudRate_t) 0x0009)   /* Might not work for all clients */
#endif

#if gSystemClock_d == 16780
#define gUARTBaudRate1200_c     ((UartBaudRate_t) 0x036A)
#define gUARTBaudRate2400_c     ((UartBaudRate_t) 0x01B5)
#define gUARTBaudRate4800_c     ((UartBaudRate_t) 0x00DA)
#define gUARTBaudRate9600_c     ((UartBaudRate_t) 0x006D)
#define gUARTBaudRate19200_c    ((UartBaudRate_t) 0x0037)
#define gUARTBaudRate38400_c    ((UartBaudRate_t) 0x001B)
#define gUARTBaudRate57600_c    ((UartBaudRate_t) 0x0012)
#define gUARTBaudRate115200_c   ((UartBaudRate_t) 0x0009)
#endif


/*list of possible baudrates */
#define  Baudrate_1200   gUARTBaudRate1200_c
#define  Baudrate_2400   gUARTBaudRate2400_c
#define  Baudrate_4800   gUARTBaudRate4800_c
#define  Baudrate_9600   gUARTBaudRate9600_c
#define  Baudrate_19200  gUARTBaudRate19200_c
#define  Baudrate_38400  gUARTBaudRate38400_c
#define  Baudrate_57600  gUARTBaudRate57600_c
#define  Baudrate_115200 gUARTBaudRate115200_c

/* Default baud rate. */

#ifndef gUartDefaultBaud_c
#define gUartDefaultBaud_c  Baudrate_38400
#endif

标签 (1)
0 项奖励
5 回复数

481 次查看
peg
Senior Contributor IV

Hi bitasobhani,

 

Seems to me you can extend these tables yourself down to 300 baud. Probably the only reason this was not done is it is rare to use such low rates these days. Simply multiply the 1200 value by 4.

 

0 项奖励

481 次查看
bitasobhani
Contributor III

Thanks for reply

I added 300 baud rate to the table (as below). It works but receives bytes with error or some bytes are missed. 

 

#ifndef gSystemClock_d
#define gSystemClock_d     16           /* 16 MHz. */
#endif

typedef uint16_t UartBaudRate_t;
#if gSystemClock_d == 8
#define gUARTBaudRate300_c      ((UartBaudRate_t) 0x0684)
#define gUARTBaudRate1200_c     ((UartBaudRate_t) 0x01A1)
#define gUARTBaudRate2400_c     ((UartBaudRate_t) 0x00D0)
#define gUARTBaudRate4800_c     ((UartBaudRate_t) 0x0068)
#define gUARTBaudRate9600_c     ((UartBaudRate_t) 0x0034)
#define gUARTBaudRate19200_c    ((UartBaudRate_t) 0x001A)
#define gUARTBaudRate38400_c    ((UartBaudRate_t) 0x0011)
#define gUARTBaudRate57600_c    ((UartBaudRate_t) 0x0009)
#define gUARTBaudRate115200_c   ((UartBaudRate_t) 0x0004)   /* Might not work for all clients */
#endif

#if gSystemClock_d == 12
#define gUARTBaudRate300_c      ((UartBaudRate_t) 0x09C4)
#define gUARTBaudRate1200_c     ((UartBaudRate_t) 0x0271)
#define gUARTBaudRate2400_c     ((UartBaudRate_t) 0x0139)
#define gUARTBaudRate4800_c     ((UartBaudRate_t) 0x009C)
#define gUARTBaudRate9600_c     ((UartBaudRate_t) 0x004E)
#define gUARTBaudRate19200_c    ((UartBaudRate_t) 0x0027)
#define gUARTBaudRate38400_c    ((UartBaudRate_t) 0x0014)
#define gUARTBaudRate57600_c    ((UartBaudRate_t) 0x000D)
#define gUARTBaudRate115200_c   ((UartBaudRate_t) 0x0007)
#endif

#if gSystemClock_d == 16
#define gUARTBaudRate300_c      ((UartBaudRate_t) 0x0D04)
#define gUARTBaudRate1200_c     ((UartBaudRate_t) 0x0341)
#define gUARTBaudRate2400_c     ((UartBaudRate_t) 0x01A1)
#define gUARTBaudRate4800_c     ((UartBaudRate_t) 0x00D0)
#define gUARTBaudRate9600_c     ((UartBaudRate_t) 0x0068)
#define gUARTBaudRate19200_c    ((UartBaudRate_t) 0x0034)
#define gUARTBaudRate38400_c    ((UartBaudRate_t) 0x001A)
#define gUARTBaudRate57600_c    ((UartBaudRate_t) 0x0011)
#define gUARTBaudRate115200_c   ((UartBaudRate_t) 0x0009)   /* Might not work for all clients */
#endif

#if gSystemClock_d == 16780
#define gUARTBaudRate300_c      ((UartBaudRate_t) 0x0DA8)
#define gUARTBaudRate1200_c     ((UartBaudRate_t) 0x036A)
#define gUARTBaudRate2400_c     ((UartBaudRate_t) 0x01B5)
#define gUARTBaudRate4800_c     ((UartBaudRate_t) 0x00DA)
#define gUARTBaudRate9600_c     ((UartBaudRate_t) 0x006D)
#define gUARTBaudRate19200_c    ((UartBaudRate_t) 0x0037)
#define gUARTBaudRate38400_c    ((UartBaudRate_t) 0x001B)
#define gUARTBaudRate57600_c    ((UartBaudRate_t) 0x0012)
#define gUARTBaudRate115200_c   ((UartBaudRate_t) 0x0009)
#endif
0 项奖励

481 次查看
bigmac
Specialist III

Hello,

 

If you are polling the SCI module for received data, you will need to periodically clear the COP timer whilst waiting.  Otherwise it may be possible for COP timeout and reset to occur.

 

Additionally, during multiple byte send operations, you should also periodically clear the COP whilst waiting for the SCI buffer to become empty, ready to accept the next byte.  The transmission time for each byte is 33 milliseconds.

 

Regards,

Mac

 

0 项奖励

481 次查看
bitasobhani
Contributor III

Thanks for reply

I am not polling the SCI module. I am using Interrupt routine for receiving bytes. But I receive wrong bytes with my added baud rate 300. 

 

void BeeAppInit
  (
  void
  )
{
  ...


  Uart1_SetRxCallBack(Uart1RxCallBack);
  Uart1_SetBaud(gUARTBaudRate300_c);
 
  ...


}

 

static void Uart1RxCallBack
  (
  void
  )
{
  Uart1_GetByteFromRxBuffer(&byte);
  ... 
}

0 项奖励

481 次查看
Mads
Contributor V

Hi,

 

I would suggest that you make a transmission of a 0xAA or 0x55 pattern that you can monitor on an scope so you can validate the UART boadrate is correct.

 

br,

Mads

0 项奖励