kevin88
Junior Member level 1
Hi,
I have problem sending command through using uart. I could not seems like able to communicate with my gps. my code is below.
I have problem sending command through using uart. I could not seems like able to communicate with my gps. my code is below.
PHP:
#define SYSCLK 99532800 // Output of PLL derived from (INTCLK*2)
#define BAUDRATE_0 115200 // Baud rate of UART0 in bps
#define BAUDRATE_1 9600//115200 // Baud rate of UART1 in bps
#define UART1_BR1 (SYSCLK / BAUDRATE_1 / 2)
#define UART1_BR2 (UART1_BR1 / 256)
#define INT_DEC 256 // Integrate and decimate ratio
#define SAR_CLK 2500000 // Desired SAR clock speed
#define RX_BUFFER_SIZE 500
define adcs_data_segment 0x0000
char xdata g_c_rx0_buffer[500] _at_ (adcs_data_segment + 0);
char xdata g_c_rx1_buffer[500] _at_ (adcs_data_segment + 500);
//lsl : 05 Jan 2011 : 1854hrs
char xdata UART1_Buffer_P[100] _at_ (adcs_data_segment + 1000);
char *UART1_Buffer;
//char xdata *UART1_Buffer _at_ (adcs_data_segment + 1000);
nsigned short xdata g_us_rx0_ptr _at_ (adcs_data_segment + 1200);
unsigned short xdata g_us_tx0_ptr _at_ (adcs_data_segment + 1202);
unsigned short xdata g_us_rd0_ptr _at_ (adcs_data_segment + 1204);
unsigned short xdata g_us_rx1_ptr _at_ (adcs_data_segment + 1220);
unsigned short xdata g_us_tx1_ptr _at_ (adcs_data_segment + 1222);
unsigned short xdata g_us_rd1_ptr _at_ (adcs_data_segment + 1224);
unsigned short xdata g_us_tx1_cmd_length _at_ (adcs_data_segment + 1226);
void main(void)
{
//char *array1 = "1234";
unsigned short l_us_temp;
UART1_Buffer = UART1_Buffer_P;
//array1 = string1;
//Disable watchdog timer
WDTCN = 0xDE;
WDTCN = 0xAD;
ExtCrystalOsc_Init();
//Initialise crossbar and GPIO
Port_Init();
EMIF_Init();
//Initialise Timer 0
Timer0_Init();
//Initialise Timer 2
Timer2_Init();
//Initialise Timer 4
Timer4_Init();
//Initialise UART0
UART0_Init();
//Initialise UART1
UART1_Init();
//Initialise ADC
ADC0_Init();
//Initialise DAC
DAC0_Init();
DAC1_Init();
//Initialise PCA0
PCA0_Init();
//Initialise INT0_N & INT1_N
Ext_Interrupt_Init();
//lsl : 04 Jan 2011 : 0852hrs : disable Watchdog timer temporarily
//Initialise Watchdog Timer
// Watchdog_Init();
//Initialise SPI0
SPI0_Init();
//------------------------
//Reset IMU-A, IMU-B & GPS
SFRPAGE = CONFIG_PAGE;
IMU_A_CS = 1;
IMU_B_CS = 1;
IMU_A_RST = 0;
IMU_B_RST = 0;
GPS_RST = 0;
delay_ms(1);
IMU_A_RST = 1;
IMU_B_RST = 1;
GPS_RST = 1;
delay_ms(1);
//---------------------------------------------------------
//lsl : 31 Dec 2010 : 1046hrs: Initialise variables : begin
g_us_rx0_ptr = 0;
g_us_tx0_ptr = 0;
g_us_rd0_ptr = 0;
for (l_us_temp = 0 ; l_us_temp < RX_BUFFER_SIZE ; l_us_temp++)
{
g_c_rx0_buffer[l_us_temp] = 0;
}
g_us_rx1_ptr = 0;
g_us_tx1_ptr = 0;
g_us_rd1_ptr = 0;
for (l_us_temp = 0 ; l_us_temp < RX_BUFFER_SIZE ; l_us_temp++)
{
g_c_rx1_buffer[l_us_temp] = 0;
}
/*
UART1_Buffer[0] = 'l';
UART1_Buffer[1] = 'o';
UART1_Buffer[2] = 'g';
UART1_Buffer[3] = 0x20;
UART1_Buffer[4] = 'v';
UART1_Buffer[5] = 'e';
UART1_Buffer[6] = 'r';
UART1_Buffer[7] = 's';
UART1_Buffer[8] = 'i';
UART1_Buffer[9] = 'o';
UART1_Buffer[10] = 'n';
UART1_Buffer[11] = 0x0D;
UART1_Buffer[12] = 0x0A;
g_us_tx1_cmd_length = 13;
*/
*UART1_Buffer = "log version\r\n";
g_us_tx1_cmd_length = 13;
delay_ms(1);
g_uc_gps_init = 0;
//lsl : 31 Dec 2010 : 1046hrs: Initialise variables : end
//---------------------------------------------------------
// g_uc_uart = 0;
// printf("ADCS Firmware Date/Version - %s/%s\r\n", FW_DATE, FW_VER);
//Enable global interrupts
EA = 1;
//-----------------------------------------------------------------------------
// Start of WHILE LOOP
//-----------------------------------------------------------------------------
while (1)
{
//Toggle LED_1 & LED_2
SFRPAGE = CONFIG_PAGE;
LED_1 ^= 1;
LED_2 ^= 1;
}
void Port_Init(void)
{
//Save current SFR page
char SFRPAGE_SAVE = SFRPAGE;
// Set SFR page
SFRPAGE = CONFIG_PAGE;
P1MDIN = 0xFC;
P0MDOUT = 0x35;
P1MDOUT = 0x14;
P2MDOUT = 0xBA;
P3MDOUT = 0x20;
//Set P4.[7..0] to open-drain outputs
P4MDOUT = 0x00;
P6MDOUT = 0xFF;
P7MDOUT = 0x3F;
XBR0 = 0xF7;
XBR1 = 0xFF;
XBR2 = 0x7D;
CLKSEL |= 0x32;
//Restore SFR page
SFRPAGE = SFRPAGE_SAVE;
}
void UART1_Init(void)
{
//Save current SFR page
char SFRPAGE_SAVE = SFRPAGE;
//Switch to UART1
SFRPAGE = UART1_PAGE;
void UART1_Init(void)
{
//Save current SFR page
char SFRPAGE_SAVE = SFRPAGE;
//Switch to UART1
SFRPAGE = UART1_PAGE;
SFRPAGE = TIMER01_PAGE;
TMOD &= 0x0F;
TMOD |= 0x20;
if (UART1_BR2 < 1)
{
TH1 = -(UART1_BR1);
CKCON |= 0x10; // T1M = 1; SCA1:0 = xx
}
else if (UART1_BR2 < 4)
{
TH1 = -(UART1_BR1 / 4);
CKCON &= ~0x13; // Clear all T1-related bits
CKCON |= 0x01; // T1M = 0; SCA1:0 = 01
}
else if (UART1_BR2 < 12)
{
TH1 = -(UART1_BR1 / 12);
CKCON &= ~0x13; // T1M = 0; SCA1:0 = 00
}
else
{
TH1 = -(UART1_BR1 / 48);
CKCON &= ~0x13; // Clear all T1-related bits
CKCON |= 0x02; // T1M = 0; SCA1:0 = 10
}
//Initialize Timer 1
TL1 = TH1;
//Start Timer 1
TR1 = 1;
SFRPAGE = UART1_PAGE;
//Indicate TX1 ready
TI1 = 1;
//PS1 = 1 -> to set UART1 interrupt to high-priority
EIP2 |= 0x40;
//Restore SFR page
SFRPAGE = SFRPAGE_SAVE;
}