Example #1
0
void MOD_TIM_Config(Mod_Master_Frame_TypeDef* aFrame)
{


	TIM2_DeInit();
	
	TIM2_TimeBaseInit(0x0F, 1500); //2ms comm response time
	TIM2_UpdateRequestConfig(TIM2_UPDATESOURCE_REGULAR);
	TIM2_GenerateEvent(TIM2_EVENTSOURCE_UPDATE);
	TIM2_Cmd(DISABLE);
	TIM2_ClearITPendingBit(TIM2_IT_UPDATE);
	TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);
	TIM2_ClearFlag(TIM2_FLAG_UPDATE);
	
	TIM4_DeInit();
	
	TIM4_TimeBaseInit(0x07, 126);	//128 * 126 = 16128 = 2ms (8MHz), frame check
	TIM4_UpdateRequestConfig(TIM4_UPDATESOURCE_REGULAR);
	TIM4_GenerateEvent(TIM4_EVENTSOURCE_UPDATE);
	TIM4_Cmd(DISABLE);
	TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
	TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
	TIM4_ClearFlag(TIM4_FLAG_UPDATE);
	
}
Example #2
0
/**
  * @brief Timer4 Update/Overflow Interruption routine.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  * @par Called functions:
  * None
  */
@near @interrupt @svlreg void TIM4_UPD_OVF_IRQHandler (void)
{
	/* In order to detect unexpected events during development,
	 it is recommended to set a breakpoint on the following instruction.
	*/
	TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
	vtimer_UpdateHandler();
	return;
}
@far @interrupt void TIM4_UPD_OVF_IRQHandler (void)
{
    // 1ms 中断
    if( ++counter_10ms >= 10 )
    {
        counter_10ms = 0;
        flag_10ms_ok = 1;
    }
    TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
	return;
}
Example #4
0
void SysTick_ISR(void)
{
	static uint8_t s_count = 0;
	uint8_t i;

    /***********************************************
    * 描述: 清楚基本定时器4中断标志位
    */
	TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
	//TIM4_ClearFlag(TIM4_FLAG_UPDATE);

    /***********************************************
    * 描述: 每隔2ms进来1次
    */
	if (s_uiDelayCount > 0) {
		if (--s_uiDelayCount == 0) {
			s_ucTimeOutFlag = 1;
		}
	}

	if (++s_count < (10 / SYSTICK_PERIOD)) {
		return;
	}

	s_count = 0;


    /***********************************************
    * 描述: 每隔10ms进来1次
    */
	for (i = 0; i < TMR_COUNT; i++) {
		Bsp_SoftTimerDec(&g_Tmr[i]);
	}

    /***********************************************
    * 描述: 统计系统运行时间
    */
//	g_iRunTime++;	/* 全局运行时间每10ms增1,  248天一个循环 */
//	if (g_iRunTime == 0x7FFFFFFF)
//	{
//		g_iRunTime = 0;
//	}

    /***********************************************
    * 描述: 此函数在 bsp.c 中实现(可以为空)
    */
	Bsp_RunPer10ms();
}
Example #5
0
void Tim4_ClearITBit(void) {
    TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
    
}
Example #6
0
void mod_int_frame_timeout()
{
	uint16_t crc, val;

	stopUART();

	setTimeoutCheck(MOD_TIMER_PAUSE);
	setFrameCheck(MOD_TIMER_STOP);
	
	//exception Slave or unexception Slave
	TIM4_ClearITPendingBit(TIM4_IT_UPDATE);


	if (modFrame.rxframe[0] != modFrame.toAddr)
	{
		modFrame.rxCursor = 0;
		modFrame.rxLen = 0;
		modFrame.rxOK = FALSE;
		
		setTimeoutCheck(MOD_TIMER_RESUM);
		startRX();
	} else {

		modFrame.rxOK = TRUE;
		modFrame.modState = Mod_State_ProcessReply;
		modFrame.modEvent = Mod_Event_No;
		
		if (modFrame.rxCursor < 2) 
			modFrame.rxCursor = 10;
		crc = CRC16(modFrame.rxframe, modFrame.rxCursor - 2);
		val = ((uint16_t)(modFrame.rxframe[modFrame.rxCursor - 1]) << 8) + 
			modFrame.rxframe[modFrame.rxCursor - 2];
		if (crc != val)
		{
			if (modFrame.retryCount < MOD_MAX_RETRYS) //exceed max retry count
			{
				//resend , count ++
				modFrame.retryCount ++;
				modFrame.modState = Mod_State_Sending;
				sendFrame(2, &modFrame);
				return;
			} else {
				//commucation error
				modFrame.retryCount = 0;
				modFrame.linkFail = TRUE;
				modFrame.modState = Mod_State_Idle;
				modFrame.request = FALSE;
				
				return;
			}
		} else {
			//process reply
			frameProcessData(&modFrame);
			modFrame.retryCount = 0;
			modFrame.linkFail = FALSE;
			modFrame.modState = Mod_State_Idle;
			modFrame.request = FALSE;
			return;
		}
		
	}


}
Example #7
0
@far @interrupt void TIM4_UPD_OVF_IRQHandler(void)
{
		TIM4_ClearITPendingBit(TIM4_IT_UPDATE);	

		if(u8CommSendStep != 0)
		{
				if(u8CurSend500usCnt<200) u8CurSend500usCnt++;
				switch(u8CommSendStep)
				{
						case LEAD_LOW:
									if( u8CurSend500usCnt >= 12 )
									{
											u8CommSendStep = LEAD_HIGH;
											u8CurSend500usCnt = 0;
											GPIO_WriteLow(TxRxPort,TX);
									}
									else GPIO_WriteHigh(TxRxPort,TX);
									break;
						case LEAD_HIGH:
									if( u8CurSend500usCnt >= 20 )
									{
											u8CommSendStep = DATA_LOW;
											u8CurSend500usCnt = 0;
											GPIO_WriteHigh(TxRxPort,TX);
									}
									else GPIO_WriteLow(TxRxPort,TX);
									break;
						case DATA_LOW:
									if(u8CurSend500usCnt<2) return;
									GPIO_WriteLow(TxRxPort,TX);
									u8CurSend500usCnt = 0;
									if(u8CurSendByte>=TOTAL_TX_BYTE)
									{
											stopTim4();
											GPIO_Init(TxRxPort, RX, GPIO_MODE_IN_PU_IT);	//开接收中断
											u8CommSendStep = 0;
											u8commStatus = 0;
											return;
									}									
									else u8CommSendStep = DATA_HIGH;
									break;
						case DATA_HIGH:
									if(u8CurSend500usCnt >= 2)
									{
											if( ((TxBuf[u8CurSendByte] & BitMap[u8CurSendBit]) == 0 ) || (u8CurSend500usCnt>=6) )
											{
													GPIO_WriteHigh(TxRxPort,TX);
													u8CommSendStep = DATA_LOW;
													u8CurSend500usCnt = 0;
													u8CurSendBit++;
													if(u8CurSendBit>7)
													{
															u8CurSendBit = 0;
															u8CurSendByte++;
													}
											}
											else GPIO_WriteLow(TxRxPort,TX);
									}
									else GPIO_WriteLow(TxRxPort,TX);
									break;
				}
//				resetTim4For500us();	 
		}
		else	if( u8CommRevStep != 0)
		{
				u8CurRev500usCnt++;
				if(u8CurRev500usCnt>50)
				{
					u8CommRevStep = 0;
				}
//			resetTim4For500us(); 
		}
		else stopTim4();
}