This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

regarding TL16C752B DUAL UART

Other Parts Discussed in Thread: TL16C2552

Hi Sir,

I am new about this tl16c752b controller.  I am interfacing this controller into lpc2468 microcontroller. I am unable to access this device. I am writing the code, but it is not working.  Please help me how to solve my problem.

my code is:

#include<lpc24xx.h>

#include "main.h" #include "timer.h" #include "uart.h"

#define  UART_CS0 (1<<14)    //p2.14 cs for uart 0 #define  UART_CS1 (1<<15)    //p2.15 cs for uart 1

#define Enable_CS0  FIO2CLR = UART_CS0; #define Disable_CS0 FIO2SET = UART_CS0;

#define Enable_CS1  FIO2CLR = UART_CS1; #define Disable_CS1 FIO2SET = UART_CS1;

#define UART_WRE  (1<<25)  //p4.25 WE for d_uart

#define Enable_WRE  FIO4CLR = UART_WRE; #define Disable_WRE FIO4SET = UART_WRE;

#define UART_ORE  (1<<24)

#define Enable_ORE  FIO4CLR = UART_ORE; #define Disable_ORE FIO4SET = UART_ORE;

byte duart_read_B(int );

void duart_int(void); void duart_write(int ,byte ); void delay_50ms(void); void UART_SEND_A(byte ,byte ); void UART_RECV_A(int ); byte duart_read(int ); void Sram_init(void);

/*------------MAIN FUNCTION------------------*/ int main (void) {    SCS |= 0x01;    FIO0DIR |= BIT_7;    FIO4DIR |= 0x0300000E;             //set the address lines as output    FIO2DIR |= 0x0000C000;             //chipselect pins are set to output    FIO3DIR |= 0x000000FF;             //databits are set to output

   PINSEL6 |= 0X00000000;    PINSEL8 |= 0X00000000;    PINSEL9 |= 0X00000000;    PINSEL4 |= 0X00000000;

//   while(1) //   { //     Disable_ORE; //      delay_50ms(); //      Enable_ORE; //       delay_50ms(); //   //   } //                                      // initilize the timer    init_timer0();                     //initilize the inbuilt uart for checking the output    init_uart1();                      //initilize the dual uart function        duart_int();                       //transmit one byte into dualuart controller       while(1)    {      UART_SEND_A('B',1);      delay_50ms();      UART_RECV_A(0x00000000);         //get the data      delay_50ms();    }

} /*----------------------------*/ /*--- These registers are configured to dual uart initilization---*/ /*----------------------------*/

void duart_int(void) {        duart_write(0x00000003,0x80);               //set lcr     delay_50ms();     duart_write(0x00000000,0x0C);               //set baudrate dll     delay_50ms();     duart_write(0x00000001,0x00);               //set baudrate dlh     delay_50ms();     duart_write(0x00000003,0xBF);                  delay_50ms();     duart_write(0x00000006,0x41);                   delay_50ms();     duart_write(0x00000004,0x90);                  delay_50ms();     duart_write(0x00000003,0xBF);                   delay_50ms();     duart_write(0x00000002,0x1A);                   delay_50ms();     duart_write(0x00000003,0x00);                   delay_50ms();     duart_write(0x00000004,0x7f);     delay_50ms();     duart_write(0x00000006,0x41);                   delay_50ms();     duart_write(0x00000003,0xBF);                   delay_50ms();     duart_write(0x00000002,0x1A);                   delay_50ms();

}

/*---------------DUART WRITE--------------*/

void duart_write(int addr,byte val) {       Enable_CS0;       Disable_WRE;       delay_50ms();       Enable_WRE;       delay_50ms();       FIO4SET|= addr;       delay_50ms();       FIO3SET |= val;       delay_50ms();       Disable_WRE;       Disable_CS0; }

/*---------------------------------------*/

byte duart_read(int addr) {           unsigned long int val;       FIO3DIR &= 0xffffff00;

      Enable_CS0;       Disable_ORE;       delay_50ms();       Enable_ORE;       delay_50ms();       FIO4SET|= addr;       delay_50ms();       val = FIO3PIN;       delay_50ms();       Disable_ORE;       Disable_CS0;

      return val;

}

/*---------------------------------------*/     void UART_SEND_A(byte data,byte len) {       int i; //      Disable_WRE; //      delay_50ms(); //      Enable_WRE; //            while(duart_read(0x00000005)&0x20==0);    //TX FIFO is not empty;

      for(i=0;i<len;i++)       {         duart_write(0x00000000,data);     //    uart1_tx_byte(data);          }

   //   Disable_WRE; }

/*----------------------------------------*/

void UART_RECV_A(int dat) {       byte  j =0;   //    FIO4DIR &= 0xfffffff0; //      Disable_ORE; //      delay_50ms(); //      Enable_ORE;       j= duart_read_B(0x00000005);  //     uart1_tx_byte(j);       while((j&0x01)==0x01)        {           dat = duart_read_B(0x00000000);           delay_50ms();                 uart1_tx_byte(dat);

           j= duart_read_B(0x00000005);        }  //      Disable_ORE; }

byte duart_read_B(int addr) {           unsigned long int val;       FIO3DIR &= 0xffffff00;       Enable_CS1;       Disable_ORE;       delay_50ms();       Enable_ORE;       FIO4SET|= addr;       delay_50ms();       val = FIO3PIN;       delay_50ms();       Enable_ORE;       Disable_CS1;

      return val;     

}

/*-------------------------------------------*/

void delay_50ms(void) {     int i,j;

    for(i=0;i<14;i++)     for(j=0;j<1225;j++); }

 

 

Thanking you,

Uma