Example #1
0
bool IsMicInLink(void)
{
#ifdef FUNC_MIC_DET_EN
	static uint8_t MicLinkState = 0;
	#define MICIN_JETTER_TIMES		10	//连接检测消抖时间:10次,100ms
	//设为输入,打开上拉
	GpioClrRegOneBit(MICIN_DETECT_PORT_OE, MICIN_DETECT_BIT);
	GpioClrRegOneBit(MICIN_DETECT_PORT_PU, MICIN_DETECT_BIT);
	GpioClrRegOneBit(MICIN_DETECT_PORT_PD, MICIN_DETECT_BIT);
	GpioSetRegBits(MICIN_DETECT_PORT_IE, MICIN_DETECT_BIT);

	if(GpioGetReg(MICIN_DETECT_PORT_IN) & MICIN_DETECT_BIT)
	{
		MicLinkState = 0;						//断开状态不做消抖处理
	}
	else
	{
		if(MicLinkState < MICIN_JETTER_TIMES)	//连接状态做消抖处理
		{
			MicLinkState++;
		}
	}
	gSys.MicEnable = (MicLinkState >= MICIN_JETTER_TIMES);
	return gSys.MicEnable;
#else
	gSys.MicEnable = TRUE;
	return TRUE;
#endif
}
Example #2
0
bool IsLineInLink(void)
{
	static uint8_t LineInLinkState = 0;
	
#ifdef LINEIN_DETECT_BIT_MASK
#define LINEIN_JETTER_TIMES		10	//连接检测消抖时间:10次,100ms

	//设为输入,带上拉
	GpioClrRegBits(LINEIN_DETECT_PORT_OE, LINEIN_DETECT_BIT_MASK);
	GpioClrRegBits(LINEIN_DETECT_PORT_PU, LINEIN_DETECT_BIT_MASK);
	GpioClrRegBits(LINEIN_DETECT_PORT_PD, LINEIN_DETECT_BIT_MASK);

	GpioSetRegBits(LINEIN_DETECT_PORT_IE, LINEIN_DETECT_BIT_MASK);

	if(GpioGetReg(LINEIN_DETECT_PORT_IN) & LINEIN_DETECT_BIT_MASK)
	{
		LineInLinkState = 0;						//断开状态不做消抖处理
	}
	else
	{
		if(LineInLinkState < LINEIN_JETTER_TIMES)	//连接状态做消抖处理
		{
			LineInLinkState++;
		}
	}
	return (LineInLinkState >= LINEIN_JETTER_TIMES);
#else
    return TRUE;
#endif
}
Example #3
0
uint8_t GetSDA(void* I2cMasterHandle)
{
	I2C_HANDLE I2cHandle = (I2C_HANDLE)I2cMasterHandle;
	uint32_t Val = GpioGetReg(I2cHandle->SdaPortIndex);
	if(Val & I2cHandle->SdaMask)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
Example #4
0
// Coding key signal-A interrupt.
__attribute__((section(".driver.isr"))) void GpioInterrupt(void)
{
	if(GpioIntFlagGet(CODING_KEY_A_PORT_INT) == CODING_KEY_A_BIT)
	{
		GpioIntClr(CODING_KEY_A_PORT_INT, CODING_KEY_A_BIT);
		if((GpioGetReg(CODING_KEY_A_PORT_IN) & CODING_KEY_A_BIT) || (ClockWiseCnt != 0) || (CounterClockWiseCnt != 0))
		{			
			return;
		}

		if(GpioGetReg(CODING_KEY_B_PORT_IN) & CODING_KEY_B_BIT)
		{
			//clockwise rotation
			ClockWiseCnt++;
		}
		else
		{
			//counterclockwise rotation
			CounterClockWiseCnt++;
		}
	}
}
Example #5
0
bool platform_gpio_input_get( const platform_gpio_t* gpio )
{
  bool     result = false;
  uint32_t regValue;
  uint32_t mask = (uint32_t)1 << gpio->pin;

  platform_mcu_powersave_disable();

  require_quiet( gpio != NULL, exit);

  regValue = GpioGetReg( GPIO_A_IN + gpio->port );

  result =  ((regValue&mask)  == 0 )? false : true;
  
exit:
  platform_mcu_powersave_enable();
  return result;  
}
Example #6
0
OSStatus platform_gpio_output_trigger( const platform_gpio_t* gpio )
{
  OSStatus err = kNoErr;
  uint32_t regValue;
  uint32_t mask = (uint32_t)1 << gpio->pin;

  platform_mcu_powersave_disable();

  require_action_quiet( gpio != NULL, exit, err = kParamErr);

  regValue = GpioGetReg( GPIO_A_OUT + gpio->port );

  (regValue&mask)? platform_gpio_output_low( gpio ) : platform_gpio_output_high( gpio );
  
exit:
  platform_mcu_powersave_enable();
  return err;  
}
Example #7
0
bool IsCardLink(void)
{
#ifdef FUNC_CARD_EN
	bool TempFlag;
	LockSdClk();
	GpioSdIoConfig(RESTORE_TO_GENERAL_IO);

	GpioClrRegBits(CARD_DETECT_PORT_PU, CARD_DETECT_BIT_MASK);
	GpioClrRegBits(CARD_DETECT_PORT_PD, CARD_DETECT_BIT_MASK);
	GpioClrRegBits(CARD_DETECT_PORT_OE, CARD_DETECT_BIT_MASK);

	GpioSetRegBits(CARD_DETECT_PORT_IE, CARD_DETECT_BIT_MASK);

	CardDetectDelay(); // ??? Disable和设置为IE 后,可能需要时延

	if(GpioGetReg(CARD_DETECT_PORT_IN) & CARD_DETECT_BIT_MASK)
	{
		TempFlag = FALSE;
	}
	else
	{
		TempFlag = TRUE;
	}
	
	if(TempFlag)
	{
		GpioSdIoConfig(SD_PORT_NUM);
	}

	UnLockSdClk();

	return TempFlag;
#else
	return FALSE;
#endif
}
Example #8
0
static BOOL USER_FUNC lum_studyWaveData(ORIGIN_WAVE_DATA* pWaveInfo)
{
	U32 lastGpioStatus = 0;
	U32 curGpioStatus;
	BOOL afterFirstWave = FALSE;
	BOOL startSave = FALSE;
	U32 protectCount = 0;
	BOOL ret = FALSE;


	lum_setSdo2InteruptStatus(FALSE); //中断服务程序内部不能禁止中断,故放此处
	lum_disableAllIrq();
	while(protectCount < 100000)  //1S
	{
		curGpioStatus = (GpioGetReg(GPIO_C_IN)&0x04);
		if(!afterFirstWave)
		{
			if(curGpioStatus != lastGpioStatus)
			{
				lastGpioStatus = curGpioStatus;
				pWaveInfo->waveData[0] = 0;
			}
			else
			{
				pWaveInfo->waveData[0]++;
			}

			if(pWaveInfo->waveData[0] >= MIN_WAVE_GAP_TIME) // > 3ms
			{
				afterFirstWave = TRUE;
				pWaveInfo->waveData[0] = 0;
				pWaveInfo->firstHighlevel = (curGpioStatus == 0)?0:1;
			}
		}
		else
		{
			if(curGpioStatus != lastGpioStatus)
			{
				lastGpioStatus = curGpioStatus;
				if(!startSave)
				{
					startSave = TRUE;
				}
				else
				{
					pWaveInfo->waveData[pWaveInfo->waveCount]++;
					pWaveInfo->waveCount++;
					if(pWaveInfo->waveCount >= MAX_WAVE_DATA_COUNT)
					{
						break;
					}
				}
			}
			else
			{
				if(startSave)
				{
					//g_timing = 0;
					pWaveInfo->waveData[pWaveInfo->waveCount]++;
					__nop();
					__nop();
					__nop();
				}

				if(pWaveInfo->waveData[pWaveInfo->waveCount] >= MIN_WAVE_GAP_TIME) // > 3ms
				{
					//pWaveInfo->waveCount++;
					if(pWaveInfo->waveCount > 20)
					{
						ret = TRUE;
					}
					break;
				}
			}
		}
		lum_delay15us(1);
		protectCount++;
	}

#ifdef LUM_STUDY_WAVE_TIME_DEBUG
	if(ret)
	{
		while(1)
		{
			curGpioStatus = (GpioGetReg(GPIO_C_IN)&0x04);
			if(curGpioStatus != lastGpioStatus)
			{
				lum_studyTest(pWaveInfo);
				break;
			}
		}
	}

#endif
	lum_enableAllIrq();
	return ret;
}
Example #9
0
static void USER_FUNC lum_searchFreqCallback(void)
{
	U8 rssiData = 0;
	U32 readCount = 0;
	U32 beginTime = 0;
	U32 curTime = 0;
	U32 totalRssi = 0;
	U32 waitTime = MIN_SEARCH_FREQ_WAIT_TIME;
	static U8 g_bLastFound = 0;



	if(g_searchFreqData.foundIrq)
	{
		lum_setSdo2InteruptStatus(FALSE);
		beginTime = hfsys_get_time();
		while(1)
		{
			if((GpioGetReg(GPIO_C_IN)&0x04) != 0)
			{
				rssiData = lum_spiReadData(REG_RSSIVALUE);
				if(waitTime != MAX_SEARCH_FREQ_WAIT_TIME)
				{
					waitTime = MAX_SEARCH_FREQ_WAIT_TIME;
				}
				if(rssiData != 0x80)
				{
					readCount++;
					totalRssi += rssiData;
					if(readCount >= MAX_READ_RSSI_COUNT)
					{
						totalRssi /=  readCount;
						if(totalRssi > g_searchFreqData.maxRssi)
						{
							if(g_bLastFound != 0)
							{
								g_searchFreqData.maxRssi = totalRssi;
								g_searchFreqData.bestFreq = g_searchFreqData.curFreq;
							}
							else
							{
								totalRssi = 0;
								g_bLastFound = 1;
							}
						}
						curTime = hfsys_get_time();
						break;
					}
				}
			}
			else
			{
				curTime = hfsys_get_time();
				if(curTime < beginTime)
				{
					beginTime = 0;
				}
				if((curTime - beginTime) > waitTime)
				{
					totalRssi = 0;
					g_bLastFound = 0;
					break;
				}
			}
		}
	}

	//lumi_debug("curFreq=%ld RSSI=%d bSdo2High=%d readCount=%d timegap=%d\n", g_searchFreqData.curFreq, totalRssi, g_searchFreqData.foundIrq, readCount, (curTime - beginTime));
	

	if(g_searchFreqData.curFreq < MAX_SEARCH_FREQUENT)
	{
		//search next frequent
		if(g_searchFreqData.foundIrq)
		{
			g_searchFreqData.curFreq += MIN_SEARCH_FREQ_GAP;
		}
		else
		{
			g_searchFreqData.curFreq += MAX_SEARCH_FREQ_GAP;
		}
		if(readCount == 0)
		{
			g_searchFreqData.foundIrq = 0;
		}
		lum_searchNextFreq();
	}
	else if(g_searchFreqData.maxRssi < MIN_SEARCH_FREQ_RSSI)
	{
		curTime = hfsys_get_time();
		if(curTime < MAX_STUDY_TIME_WAIT || (curTime - g_searchFreqData.timeout) < MAX_STUDY_TIME_WAIT)
		{
			//search again
			U32 lastTime;


			lastTime = g_searchFreqData.timeout;
			memset(&g_searchFreqData, 0, sizeof(SEARCH_FREQ_INFO));
			g_searchFreqData.chipStatus = SX1208_SEARCHING;
			g_searchFreqData.curFreq = MIN_SEARCH_FREQUENT;
			g_searchFreqData.timeout = lastTime;
			lum_searchNextFreq();
		}
		else
		{
			//Search Faild;
			lum_setSdo2InteruptStatus(FALSE);
			g_searchFreqData.chipStatus = SX1208_IDLE;
			lum_setRfMode(RF_SLEEP);
			lum_sendReplyStudyMessage();
			lumi_debug("search frequent timeout time1=%ld time2=%ld\n", g_searchFreqData.timeout, curTime);
		}
	}
	else
	{
		//search success
		lum_setSdo2InteruptStatus(FALSE);
		lum_enterStudyMode(g_searchFreqData.bestFreq);
	}
}