⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 TPSN时间同步算法
💻 C
字号:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "44b.h"
#include "option.h"
#include "44blib.h"
#include "system.h"
#include "DM9000A.h"
#include "9xtend.h"
#include "timesyn.h"

void __irq Timer3Isr(void);
void __irq Eint3Isr(void);
//void __irq Uart1_RxInt(void);

int i;
int arrdbm[100];
char str[10] = {0};
char strdBm[5] = {0};
int dBmval = 0,ptuartrxBuf = 0;
unsigned char uartrxBuf[10],t[6];
unsigned short selfadd = 0x1;
unsigned long ts;

void Main(void)
{
 rSYSCFG = CACHECFG;
 Port_Init();
 Timer_Init();
 Int_Init();
 pISR_EINT3 = (int)Eint3Isr; //Register the ISR
 //pISR_URXD1 = (int)Uart1_RxInt; //Register the ISR
 pISR_TIMER3 = (int)Timer3Isr; //Register the ISR

 Uart_Init(0,9600);  //Uart0<-->9xtend;Uart1<-->PC
 Uart_Select(1);
 Delay(0);  //calibrate Delay()
 Uart_Printf("\nS3C44B0X Test rSYSCFG=0x%x MCLK=%d\n",rSYSCFG,MCLK);
 
 redLedBlk();
 
 //Initialize 9xtend,word in streaming mode, MY=2;
 Init_9xtend();
 
 //Send T1 syn packet
 Uart_Select(0);
 PackT1(selfadd,0x2);
 Uart_Sendbuf(synpktBuf,lenSYNPKT);
 Uart_Select(1);
 Uart_Sendbuf(synpktBuf,lenSYNPKT);
 
 //Wait for syn ack packet
 Uart_Select(0);
 ptpktBuf = 0;
 while(Uart_Getch() != 0x0F) ;
 T4 = us;
 synackpktBuf[ptpktBuf++] = 0x0F;
 while(1)
 {
     synackpktBuf[ptpktBuf++] = Uart_Getch();
     if(ptpktBuf==lenSYNPKT)
     {
         Uart_Select(1);
         Uart_Sendbuf(synackpktBuf,lenSYNPKT);
         ptpktBuf=0;
	     break;
     }
 }
 
 //Get T2 T3
 memcpy(&synackpacket,synackpktBuf,lenSYNPKT);
 T2 = synackpacket.Time1;
 T3 = synackpacket.Time2;
 Uart_Select(1);
 Uart_Printf("\nT1 is %d %x\nT2 is %d %x\nT3 is %d %x\nT4 is %d %x\n",T1,T1,T2,T2,T3,T3,T4,T4);

 //Calculate delta and delay
 delta = ((T2-T1) - (T4-T3))/2;
 delay = ((T2-T1) + (T4-T3))/2;
 
 //Calibrate node 1 clock
 us += delta;
 
 //Output the indicator
 Uart_Select(1);
 rPDATG &= ~(0x40);    
 while(1)
 {   
     
     if((ts=us)%1000000 == 0)
     {
         Uart_Printf("%d,%d,%d\n",ts,ts%1000000,ts/1000000);
         rPDATG |= 0x40;
         Delayus(200);
         rPDATG &= ~(0x40);
         Delayus(200);
     }
 }
 
}

void __irq Eint3Isr(void)
{
 rI_ISPC=BIT_EINT3;
 grnLedBlk();
}

void __irq Uart1_RxInt(void)
{
    rI_ISPC=BIT_URXD1;

    uartrxBuf[ptuartrxBuf++]=RdURXH1();
    redLedBlk();
    if(ptuartrxBuf==10)
    {
        Uart_Sendbuf(uartrxBuf,10);
		ptuartrxBuf=0;
	}
}

void __irq Timer3Isr(void)
{
 rI_ISPC=BIT_TIMER3;
 //redLedBlk();
 us++;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -