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

📄 initmcu.c

📁 名厂车载GPS通信终端
💻 C
📖 第 1 页 / 共 3 页
字号:
//                      INT1 interrupt
//------------------------------------------------------------------------------
void Int1Int(void)
{
	//   OS_EXIT_CRITICAL();
	Disable_Int1();
	InitTa3(24);
	StartTa3();
	Step_Recv = 0;
}

//------------------------------------------------------------------------------
//                      init int0
//------------------------------------------------------------------------------
void InitInt0(void)
{
	ifsr0  = 0;                                    //select one edge
	int0ic = 0x2;                                 //select interupt level 2,down edge
}
//------------------------------------------------------------------------------
//                      enable int0int
//------------------------------------------------------------------------------
void Enable_Int0(void)
{
	ifsr0  = 0;                                    //select one edge
	int0ic = 0x2;                                 //select interupt level 2,down edge
}
//------------------------------------------------------------------------------
//                      disable int0int
//------------------------------------------------------------------------------
void Disable_Int0(void)
{
	int0ic = 0x0;                                 //disable the int0 interupt
}
//------------------------------------------------------------------------------
//                      INT0 interrupt
//------------------------------------------------------------------------------
void Int0Int(void)
{
    Start_Timer(Accept_Ring_Timer,1,HMSEL);
}

//------------------------------------------------------------------------------
//                      initialize watchdog
//------------------------------------------------------------------------------
void Init_Watchdog(void)
{
	wdc  |= 0x80;
	wdts  = 0x01;
}
//------------------------------------------------------------------------------
//                      clear watchdog
//------------------------------------------------------------------------------
void clr_watchdog(void)
{
	static uchar status = 0;
	static uchar watchdog_count=0;
	
	
	CLR_DOG   = status;
	if(status ==0) status = 1;else status = 0;
	//status = !status;
	wdts   = 0x01;
	if (watchdog_count>0x00)   Uart1hex(watchdog_count);
	watchdog_count=0x00;
	
}
//------------------------------------------------------------------------------
//                      watchdog interrupt
//------------------------------------------------------------------------------
void WatchdogInt(void)
{
	//   OS_EXIT_CRITICAL();
	watchdog_count +=1;
	if (watchdog_count>=0x30)
	{
		prc1 = 1;
		pm03 = 1;
		prc1 = 0;
	}
}
//------------------------------------------------------------------------------
//                      reset program
//------------------------------------------------------------------------------
void Reset_Program(void)
{
	prc1 = 1;
	pm03 = 1;
	prc1 = 0;
}
//------------------------------------------------------------------------------
//                      initialize ad
//------------------------------------------------------------------------------
void InitADC(uchar channel,uchar wei)
{
	Adc_Channel = channel;
	adcon2      = 0x00;
	adcon0      = 0x07&channel;
	if(wei==10)
		adcon1      = 0x28;              // 10 bit ad
	else
		adcon1      = 0x20;
}
//------------------------------------------------------------------------------
//                      start ad
//------------------------------------------------------------------------------
void StartADC(void)
{
	adcon0   |=0x40;
	adic     = 0x02;
	Adc_Flag = AD_START;
}
//------------------------------------------------------------------------------
//                      adc interrupt
//------------------------------------------------------------------------------
void ADCint(void)
{
	// OS_EXIT_CRITICAL();
	if(Adc_Channel==0x01)       //备用电源电压//
	{
		//Adc_Value = (uint)ad1l;
		Adc_Value = ad1&0x3ff;
	}
	if(Adc_Channel==0x03)       //低压//
	{
		Adc_Value = ad3&0x3ff;
	}
	adcon0   &=~0x40;
	Adc_Flag = AD_COMPELETE;
}
//------------------------------------------------------------------------------
//                      initialize uart 0 for gps
//------------------------------------------------------------------------------
void InitUart0(void)
{
	u0mr = 0x05;         // XXXX XXXX
	// |||| |||+- uart mode
	// |||| ||+-- uart mode
	// |||| |+--- uart mode
	// |||| |     100: 7 bit data
	// |||| |     101: 8 bit data
	// |||| |     110: 9 bit data
	// |||| +---- Internal/external clock select bit
	// ||||       0: Internal clock
	// ||||       1: External clock
	// |||+------ Stop bit length select bit
	// |||        0: One stop bit
	// |||        1: Two stop bit
	// ||+------- Odd/even parity select bit
	// ||         Valid when bit 6 = 1
	// ||         0: Odd parity
	// ||         1: Even parity
	// |+-------- Parity enable bit
	// |          0: Parity disabled
	// |          1: Parity enabled
	// +--------- Sleep select bit
	//            0: Sleep mode deselected
	//            1: Sleep mode selected
    // Setting UART0 transmit/receive control register 0 (UART mode)
    u0c0 = 0x38;            // 00XX XXXX
	// |||| |||+- BRG count source select bit
	// |||| ||+-- BRG count source select bit
	// |||| ||    00: f1 is selected
	// |||| ||    01: f8 is selected
	// |||| ||    10: f32 is selected
	// |||| ||    11: inhibited
	// |||| |+--- /CTS//RTS function select bit
	// |||| |     (Valid when bit 4 ='0')
	// |||| |     0: /CTS function is selected
	// |||| |     1: /RTS function is selected
	// |||| +---- Transmit register empty flag
	// ||||       0: Data present in transmit register
	// ||||          (during transmission)
	// ||||       1: No Data present in transmit register
	// ||||          (transmission completed)
	// |||+------ /CTS//RTS disable bit
	// |||        0: /CTS//RTS function enabled
	// |||        1: /CTS//RTS function disabled
	// ||+------- Data output select bit
	// ||         0: TxD0 pin is CMOS output
	// ||         1: TxD0 pin is N-channel open-drain
	// ||            output
	// |+-------- Must be fixed to '0'
	// +--------- Must be fixed to '0'
	
    // Setting UART0 transmit/receive control register 1 (UART mode)
    u0c1 = 0X0E ;//0x0f;    // ---- XXXX
	//      |||+- Transmit enable bit
	//      |||   0: Transmission disabled
	//      |||   1: Transmission enabled
	//	    ||+-- Transmit buffer empty flag
	//	    ||	0: Data present in transmit buffer register
	//	    ||	1: No data present in transmit buffer register
	//      |+--- Receive enable bit
	//      |     0: Reception disabled
	//      |     1: Reception enabled
	//      +---- Receive complete flag
	//            0: No data present in receive buffer
	//            1: Data present in receive buffer
	
    // Setting UART0 transmit/receive control register 2 (UART mode)
    ucon |= 0x00;           // -X0- ---X
	//  ||     +- UART0 transmit interrupt cause select bit
	//  ||        0: Transmit buffer empty (TI=1)
	//  ||        1: Transmission completed (TXEPT=1)
	//  |+------- Must be fixed to '0'
	//  +-------- Separate /CTS//RTS bit
	//            0: /CTS//RTS shared pin
	//            1: /CTS//RTS separate pin
	
    // Setting UART0 bit rate generator for 9600 baud (UART mode)
    u0brg = 0x40;           // REMARKS: U0BRG=(Xin/(16*clock_select*Baud))-1
	// For example:
	// Xin = 10MHz
	// clock_select = 1 (source=f1)
	// Baud = 9600 Baud rate
	//u0brg = 0x81;			// Baud = 4800 Baud rate
	
	// =>  u0brg = 64d = 0x40 (actual baud = 9615)
	s0ric = 0x03;       	// ---- XXXX
	//      ||||
	//      |||+-- Interupt priority level select bit
	//      ||+--- Interupt priority level select bit
	//      |+---- Interupt priority level select bit
	//      |      000: Level 0 (interrupt disabled)
	//      |      001: Level 1
	//      |      010: Level 2
	//      |      011: Level 3
	//      |      100: Level 4
	//      |      101: Level 5
	//      |      110: Level 6
	//      |      111: Level 7
	//      +----- Interupt request bit
	//             0: Interrupt not requested
	//             1: Interrupt requested
	s0tic	= 0x00;
}
//------------------------------------------------------------------------------
//                      uart 0 reciever interrupt
//------------------------------------------------------------------------------
void Uart0RxInt(void)
{
	WORD  wsdata;
	uchar u0rbbyte;
	
	//Send_Taskmsg(AlarmTaskid,STATUSCHANGE,NULL);
	
	//  OS_EXIT_CRITICAL();
	
	if((u0c1&0x08)==0x08)
	{
		u0c1 &= ~0x08;
		wsdata = u0rb;
		if(wsdata & 0x8000)
		{
			u0c1&=~0x04;
			u0c1|=0x04;
			return;
		}
		
		u0rbbyte = (uchar)(wsdata&0x00ff);
		if(gpsuart.bufnum>=MAX_GPS_RECV)           //避免溢出//
		{
			gpsuart.bufnum = 0;
		}
		//u1tb = u0rbbyte;
		switch(gpsuart.recvstep)
		{
		case 0:
            gpsuart.recvlen  = 0;
            if(u0rbbyte=='$')
            {
				gpsuart.recvstep ++;
            }
			break;
		case 1:
			gpsuart.recvlen  = 0;
			gpsuart.recvstep ++;
			if(u0rbbyte!='G')
				gpsuart.recvstep = 0;
			break;
		case 2:
			gpsuart.recvlen  = 0;
			gpsuart.recvstep++;
			if(u0rbbyte!='P')
				gpsuart.recvstep = 0;
			break;
		case 3:
			if(u0rbbyte!='R'&&u0rbbyte!='T'&&u0rbbyte!='G')
			{
				gpsuart.recvlen  = 0;
				gpsuart.recvstep = 0;
			}
			else
			{
				gpsuart.recvstep++;
			}
			break;
		case 4:
			if(u0rbbyte!='M'&&u0rbbyte!='X'&&u0rbbyte!='S')
			{
				gpsuart.recvlen  = 0;
				gpsuart.recvstep = 0;
			}
			else
			{
				gpsuart.recvstep++;
			} 
			break;
		case 5:
			if(u0rbbyte!='C'&&u0rbbyte!='T'&&u0rbbyte!='A')
			{
				gpsuart.recvlen  = 0;
				gpsuart.recvstep = 0;
			}
			else
			{
				gpsuart.recvstep++;
			}
			break;
		case 6:
            if(/*gpsuart.recvbuf[gpsuart.bufnum][gpsuart.recvlen-1]==0x0d&&*/u0rbbyte=='*')
            {
				//gpsuart.recvbuf[gpsuart.bufnum][gpsuart.recvlen++] = '*';//0x0a;
				gpsuart.recvbuf[gpsuart.bufnum][0]               = gpsuart.recvlen;
				Send_Taskmsg(AlarmTaskid,GPSUARTRECV,gpsuart.recvbuf[gpsuart.bufnum]);
				gpsuart.bufnum++;
				gpsuart.recvstep = 0;
				if(gpsuart.bufnum>=MAX_GPS_RECV)
					gpsuart.bufnum = 0;
            }
            else
            {
				if(gpsuart.recvlen>140)
					gpsuart.recvstep = 0;
            }
			break;
		default:
            gpsuart.recvstep = 0;
			break;
		}
		gpsuart.recvbuf[gpsuart.bufnum][gpsuart.recvlen] = u0rbbyte;
		gpsuart.recvlen++;
	}
}
//------------------------------------------------------------------------------
//                      uart 0 transimit interrupt
//------------------------------------------------------------------------------
void Uart0TxInt(void)
{
	//  OS_EXIT_CRITICAL();
	if((u0c1 & 0x02)==0x02)
	{
		u0c1 &= ~0x02;
		if(gpsuart.sendstatus==_BUSY&&gpsuart.sendlen!=0)
		{
			u0tb  = gpsuart.sendbuf[gpsuart.sendlen-1];
			//u0c1 |= 0x01;
			gpsuart.sendlen--;
			if(gpsuart.sendlen==0)
			{
				gpsuart.sendstatus==_IDLE;
			}
		}
	}
}
//------------------------------------------------------------------------------
//                      initial uart 1

⌨️ 快捷键说明

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