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