Пример #1
0
uint8 RDA_bt_SerialCommTxByte(uint8 data) /* return 0 --> ack */
{
	int32 i;
	uint8 temp_value = 0;
	for(i=7; (i>=0)&&(i<=7); i--)
	{
		GPIO_WriteIO( 0, RDA5868_SCL); /* low */
		DELAY(DURATION_LOW);
		if(i==7)GPIO_InitIO(1,RDA5868_SDA);
		DELAY(DURATION_LOW);

		GPIO_WriteIO(((data>>i)&0x01), RDA5868_SDA);
		DELAY(DURATION_LOW/2);
		GPIO_WriteIO( 1, RDA5868_SCL); /* high */
		DELAY(DURATION_HIGH);
	}
	GPIO_WriteIO(0, RDA5868_SCL); /* low */
	DELAY(DURATION_LOW);
	GPIO_InitIO(0,RDA5868_SDA);/* input  */
	DELAY(DURATION_LOW/2);
	GPIO_WriteIO(1, RDA5868_SCL); /* high */
	DELAY(DURATION_HIGH);
	temp_value = GPIO_ReadIO(RDA5868_SDA);
	GPIO_WriteIO(0, RDA5868_SCL); /* low */
	DELAY(DURATION_LOW);
	return temp_value;
}
Пример #2
0
kal_uint8 SerialCommRxByte(kal_uint8 addr, kal_uint8 *data)
{
   kal_int16 i;
   kal_uint16 dataRead=0;
   *data = 0;
   GPIO_WriteIO(1, LE);
   GPIO_InitIO(1,SDA);
   for(i=8; --i>=0;){
      GPIO_WriteIO( 0, SCL);
      GPIO_WriteIO(addr&0x01, SDA);
      GPIO_WriteIO(1, SCL);
      addr >>= 1;
      I2C_DUMMY_DELAY(5);
   }
   GPIO_InitIO(0,SDA);
   GPIO_WriteIO(0, LE);
   for(i=0; i<8; i++){
      GPIO_WriteIO( 0, SCL);
      I2C_DUMMY_DELAY(5);
      GPIO_WriteIO( 1, SCL);
      dataRead = GPIO_ReadIO(SDA);
      *data |= (dataRead << i);
   }
   I2C_DUMMY_DELAY(10);
}
Пример #3
0
void RDA_bt_SerialCommRxByte(uint8 *data, uint8 ack)
{
	int32 i;
	uint32 dataCache;

	dataCache = 0;
	for(i=7; (i>=0)&&(i<=7); i--)
	{
		GPIO_WriteIO(0, RDA5868_SCL);
		DELAY(DURATION_LOW);
		if(i==7)GPIO_InitIO(0,RDA5868_SDA);
		DELAY(DURATION_LOW);
		GPIO_WriteIO(1, RDA5868_SCL);
		DELAY(DURATION_HIGH);
		dataCache |= (GPIO_ReadIO(RDA5868_SDA)<<i);
		DELAY(DURATION_LOW/2);
	}

	GPIO_WriteIO(0, RDA5868_SCL);
	DELAY(DURATION_LOW);
	GPIO_InitIO(1,RDA5868_SDA);
	GPIO_WriteIO(ack, RDA5868_SDA);
	DELAY(DURATION_LOW/2);
	GPIO_WriteIO(1, RDA5868_SCL);
	DELAY(DURATION_HIGH);
	GPIO_WriteIO(0, RDA5868_SCL); /* low */
	DELAY(DURATION_LOW);
	*data = (uint8)dataCache;
}
Пример #4
0
/******************************************************************************
* Function:
*	GPSLocateVibSensorStart
*
* Usage:
*	Start vibration sensor monitor
*
* Parameters:
*	None
*
* Return:
*	None
******************************************************************************/
void GPSLocateVibSensorStart(void)
{
	kal_bool bResult;
	kal_uint8 SilenceThreshold;

	if (gGPSVibSensorTimer != NULL)
	{
		//has already started, do nothing
		return;
	}
	bResult = GPSLocateNvramReadRecord(
				GPS_NVRAM_RECID_VIBSENSOR_POLLINGINTERVAL,
				&gGPSVibSensorPollingInterval,
				sizeof(kal_uint8)
				);
	if (bResult != KAL_TRUE)
	{
		return;
	}
	bResult = GPSLocateNvramReadRecord(
				GPS_NVRAM_RECID_VIBSENSOR_SILENCETHRESHOLD,
				&SilenceThreshold,
				sizeof(kal_uint8)
				);
	if (bResult != KAL_TRUE)
	{
		return;
	}
	/*
	NOTE: 
		unit of SilenceThreshold is minute
		unit of gGPSVibSensorPollingInterval is 50ms
		so, the following convert is needed.
	*/
	gGPSVibSensorSilenceThreshold = (SilenceThreshold*60*1000)/(gGPSVibSensorPollingInterval*50);
	gGPSVibSensorTimer = GPSAppTimer_Create(
								GENERAL_GPSAPP_TIMERID,
								GPSLocateVibSensorExpireProc,
								gGPSVibSensorPollingInterval*KAL_TICKS_50_MSEC,
								gGPSVibSensorPollingInterval*KAL_TICKS_50_MSEC,
								KAL_TRUE
								);
	/*
	Configurate GPIO: input, pull-up/down disable
	*/
	GPIO_ModeSetup(GPS_VIBRATION_SENSOR_GPIO, 0);
	GPIO_InitIO(INPUT, GPS_VIBRATION_SENSOR_GPIO);
	GPIO_PullenSetup(GPS_VIBRATION_SENSOR_GPIO, KAL_FALSE);
	//get the initial IO value
	gGPSVibSensorPreviousIOValue = GPIO_ReadIO(GPS_VIBRATION_SENSOR_GPIO);
	//initialize the state
	gGPSVibSensorCurrState = GPSLOCATE_VIBSENSORSTATUS_SILENCE;
	//initialize silence counter
	gSilenceCounter = 0;
}
Пример #5
0
uint8 SerialCommTxByte(uint8 data) /* return 0 --> ack */
{
    int32 i;

    for(i=7; i>=0; i--) {
        GPIO_WriteIO( 0, SCL); /* low */
        /* The bus operates at a maximum clock frequency of 400 kHz */
        if(i==7)GPIO_InitIO(1,SDA);  // dummy
        GPIO_WriteIO(((data>>i)&0x01), SDA);
        GPIO_WriteIO( 1, SCL); /* high */
    }
    GPIO_WriteIO(0, SCL); /* low */
    GPIO_InitIO(0,SDA);
    GPIO_WriteIO(1, SCL); /* high */
    return GPIO_ReadIO(SDA);
}
Пример #6
0
void SerialCommRxByte(uint8 *data, uint8 ack)
{
    int32 i;
    uint32 dataCache;

    dataCache = 0;
    for(i=7; i>=0; i--) {
        GPIO_WriteIO(0, SCL);
        if(i==7)GPIO_InitIO(0,SDA);
        GPIO_WriteIO(1, SCL);
        dataCache |= (GPIO_ReadIO(SDA)<<i);
    }
    GPIO_WriteIO(0, SCL);
    GPIO_InitIO(1,SDA);
    GPIO_WriteIO(ack, SDA);
    GPIO_WriteIO(1, SCL);
    *data = (uint8)dataCache;
}
Пример #7
0
void SerialCommRxByte(kal_uint8 *data, kal_uint8 ack)
{
   kal_int16 i;
   kal_uint32 dataCache;
   dataCache = 0;
   GPIO_InitIO(0,SDA);
   for(i=8; --i>=0;){
      dataCache <<= 1;
      GPIO_WriteIO(1, SCL);
      I2C_DUMMY_DELAY(5);
      dataCache |= GPIO_ReadIO(SDA);
      GPIO_WriteIO(0, SCL);
      I2C_DUMMY_DELAY(5);
   }
   GPIO_InitIO(1,SDA);
   GPIO_WriteIO(ack, SDA);
   I2C_DUMMY_DELAY(5);
   GPIO_WriteIO(1, SCL);
   *data = (kal_uint8)dataCache;
   GPIO_WriteIO(0, SCL);
}
Пример #8
0
void SerialCommRxByte(uint8 *data, uint8 ack)
{
   int32 i;
   uint32 dataCache;

   dataCache = 0;
   for(i=7; i>=0; i--){
      GPIO_WriteIO(0, SCL);
      if(i==7)GPIO_InitIO(0,SDA);
      { // For EV200 only, solve a hardware bug
      	kal_int32 cnt;  // dummy for_loop
      	for(cnt=0; cnt<20; cnt++);
      }
      GPIO_WriteIO(1, SCL);
      dataCache |= (GPIO_ReadIO(SDA)<<i);
   }
   GPIO_WriteIO(0, SCL);
   GPIO_InitIO(1,SDA);
   GPIO_WriteIO(ack, SDA);
   GPIO_WriteIO(1, SCL);
   *data = (uint8)dataCache;
}
Пример #9
0
void SerialCommRxByte(unsigned  char *data, unsigned char ack)
{
   int i;
   unsigned int dataCache;
   dataCache = 0;
   GPIO_InitIO(INPUT,SDA);
   for(i=8; --i>=0;){
      dataCache <<= 1;
      I2C_DUMMY_DELAY(I2C_DELAY);
      GPIO_WriteIO(1, SCL);
      I2C_DUMMY_DELAY(I2C_DELAY);
      dataCache |= GPIO_ReadIO(SDA);
      GPIO_WriteIO(0, SCL);
      I2C_DUMMY_DELAY(I2C_DELAY);
   }
   GPIO_InitIO(OUTPUT,SDA);
   GPIO_WriteIO(ack, SDA);
   I2C_DUMMY_DELAY(I2C_DELAY);
   GPIO_WriteIO(1, SCL);
   I2C_DUMMY_DELAY(I2C_DELAY);
   GPIO_WriteIO(0, SCL);
   I2C_DUMMY_DELAY(I2C_DELAY);
   *data = (unsigned char)dataCache;
}
Пример #10
0
unsigned int SerialCommTxByte(unsigned char data) /* return 0 --> ack */
{
    int i, ack;
    
    GPIO_InitIO(OUTPUT,SDA);

    for(i=8; --i>0;){
        GPIO_WriteIO((data>>i)&0x01, SDA);
        I2C_DUMMY_DELAY(I2C_DELAY);
        GPIO_WriteIO( 1, SCL); /* high */
        I2C_DUMMY_DELAY(I2C_DELAY);
        GPIO_WriteIO( 0, SCL); /* low */
        I2C_DUMMY_DELAY(I2C_DELAY);
    }
    GPIO_WriteIO((data>>i)&0x01, SDA);
    I2C_DUMMY_DELAY(I2C_DELAY);
    GPIO_WriteIO( 1, SCL); /* high */
    I2C_DUMMY_DELAY(I2C_DELAY);
    GPIO_WriteIO( 0, SCL); /* low */
    I2C_DUMMY_DELAY(I2C_DELAY);
    
    GPIO_WriteIO(0, SDA);
    I2C_DUMMY_DELAY(I2C_DELAY);
    GPIO_InitIO(INPUT,SDA);
    I2C_DUMMY_DELAY(I2C_DELAY);
    GPIO_WriteIO(1, SCL);
    I2C_DUMMY_DELAY(I2C_DELAY);
    ack = GPIO_ReadIO(SDA); /// ack 1: error , 0:ok
    GPIO_WriteIO(0, SCL);
    I2C_DUMMY_DELAY(I2C_DELAY);
    
    if(ack==1)
        return 0;
    else
        return 1;  
}
Пример #11
0
kal_uint8 SerialCommTxByte(kal_uint8 data) /* return 0 --> ack */
{
   kal_int16 i, ack;
   GPIO_InitIO(1,SDA);
   for(i=8; --i>0;){
      GPIO_WriteIO((data>>i)&0x01, SDA);
      I2C_DUMMY_DELAY(5);
      GPIO_WriteIO( 1, SCL); /* high */
      I2C_DUMMY_DELAY(5);
      GPIO_WriteIO( 0, SCL); /* low */
      I2C_DUMMY_DELAY(5);
   }
   GPIO_WriteIO((data>>i)&0x01, SDA);
   I2C_DUMMY_DELAY(5);
   GPIO_WriteIO( 1, SCL); /* high */
   I2C_DUMMY_DELAY(5);
   GPIO_WriteIO( 0, SCL); /* low */

   GPIO_InitIO(0,SDA);
   GPIO_WriteIO(1, SCL);
   I2C_DUMMY_DELAY(5);
   ack = GPIO_ReadIO(SDA); /// ack
   GPIO_WriteIO(0, SCL);
}
Пример #12
0
static void GPSLocateVibSensorExpireProc(GPSAppTimerID_t Id)
{
	char CurrIOValue;

	CurrIOValue = GPIO_ReadIO(GPS_VIBRATION_SENSOR_GPIO);
	#if _VIBSENSOR_DBG_
	trace_printf("VSEP: CIO=%d, PIO=%d", CurrIOValue, gGPSVibSensorPreviousIOValue);
	trace_printf("VSEP: CS=%d", gGPSVibSensorCurrState);
	trace_printf("VSEP: SC=%d, ST=%d", gSilenceCounter, gGPSVibSensorSilenceThreshold);
	#endif //_VIBSENSOR_DBG_
	if (CurrIOValue != gGPSVibSensorPreviousIOValue)
	{
		///////// status changed ///////////
		// 1. save the current IO value as the previous one
		gGPSVibSensorPreviousIOValue = CurrIOValue;
		// 2. clear the silence counter
		gSilenceCounter = 0;
		// 3. check and post vibration message if needed
		if (gGPSVibSensorCurrState == GPSLOCATE_VIBSENSORSTATUS_SILENCE)
		{
			//post vibration message
			GPSLocateVibSensorStatusIndStruct_t *pStatusInd;
			pStatusInd = (GPSLocateVibSensorStatusIndStruct_t*)construct_local_para(sizeof(GPSLocateVibSensorStatusIndStruct_t), TD_UL);
			pStatusInd->Status = GPSLOCATE_VIBSENSORSTATUS_VIBRATING;
			SendMsg2GPSApp(
				stack_int_get_active_module_id(),
				MSG_ID_GPSLOCATE_VIBSENSORSTATUS_IND,
				(void*)pStatusInd
				);
			#if _VIBSENSOR_DBG_
			trace_printf("VSEP: V");
			#endif //_VIBSENSOR_DBG_
			//change state
			gGPSVibSensorCurrState = GPSLOCATE_VIBSENSORSTATUS_VIBRATING;
		}
	}
	else
	{
		////////// status not changed ///////////////
		gSilenceCounter++;
		if (gGPSVibSensorCurrState == GPSLOCATE_VIBSENSORSTATUS_VIBRATING 
			&& gSilenceCounter >= gGPSVibSensorSilenceThreshold)
		{
			//////// consider as silence ///////////

			//post silence message
			GPSLocateVibSensorStatusIndStruct_t *pStatusInd;
			pStatusInd = (GPSLocateVibSensorStatusIndStruct_t*)construct_local_para(sizeof(GPSLocateVibSensorStatusIndStruct_t), TD_UL);
			pStatusInd->Status = GPSLOCATE_VIBSENSORSTATUS_SILENCE;
			SendMsg2GPSApp(
				stack_int_get_active_module_id(),
				MSG_ID_GPSLOCATE_VIBSENSORSTATUS_IND,
				(void*)pStatusInd
				);
			#if _VIBSENSOR_DBG_
			trace_printf("VSEP: S");
			#endif //_VIBSENSOR_DBG_
			//change state
			gGPSVibSensorCurrState = GPSLOCATE_VIBSENSORSTATUS_SILENCE;
		}
	}
}
Пример #13
0
DCL_STATUS DclGPIO_Control(DCL_HANDLE handle, DCL_CTRL_CMD cmd, DCL_CTRL_DATA_T *data)
{
	   kal_char port; 
	   port= 0x000000FF & handle;

	   if(DCL_HANDLE_INVALID==handle)
   return STATUS_FAIL;
	
	   if(DCL_GPIO_IS_HANDLE_MAGIC(handle))
	   {
		   switch(cmd)
		   {
			 case GPIO_CMD_READ:
			 {
				GPIO_CTRL_READ_T   *prRead;
				prRead = &(data->rRead);
				prRead->u1IOData = GPIO_ReadIO(port);
				break;
			 }
			 case GPIO_CMD_WRITE_LOW:
			 {
				GPIO_MD_WriteIO(GPIO_IO_LOW, port);
				break;
			 }
			 case GPIO_CMD_WRITE_HIGH:
			 {
				GPIO_MD_WriteIO(GPIO_IO_HIGH, port);
				break;
			 } 
			 case GPIO_CMD_SET_MODE_0:
			 {
				GPIO_MD_ModeSetup(port, GPIO_MODE_0);
				break;
			 }
			 case GPIO_CMD_SET_MODE_1:
			 {
				GPIO_MD_ModeSetup(port, GPIO_MODE_1);
				break;
			 }
			 case GPIO_CMD_SET_MODE_2:
			 {
				GPIO_MD_ModeSetup(port, GPIO_MODE_2);
				break;				
			 }
			 case GPIO_CMD_SET_MODE_3:
			 {
				GPIO_MD_ModeSetup(port, GPIO_MODE_3);
				break;					
			 }
			 case GPIO_CMD_SET_MODE_4: //mode4-7 only for chip support more than 3bit mode control.
			 {
				GPIO_MD_ModeSetup(port, GPIO_MODE_4);
				break;
			 }
			 case GPIO_CMD_SET_MODE_5:
			 {
				GPIO_MD_ModeSetup(port, GPIO_MODE_5);
				break;
			 }
			 case GPIO_CMD_SET_MODE_6:
			 {
				GPIO_MD_ModeSetup(port, GPIO_MODE_6);
				break;	
			 }
			 case GPIO_CMD_SET_MODE_7:
			 {
				GPIO_MD_ModeSetup(port, GPIO_MODE_7);
				break;	
			 } 
			case GPIO_CMD_SET_MODE_8:
			 {
				GPIO_MD_ModeSetup(port, GPIO_MODE_8);
				break;	
			 }		  
			 case GPIO_CMD_SET_DIR_OUT:
			 {
				GPIO_MD_InitIO(GPIO_DIR_OUT,port);
				break;
			 }
			 case GPIO_CMD_SET_DIR_IN:
			 {
				GPIO_MD_InitIO(GPIO_DIR_IN,port);
				break;					
			 }
			 case GPIO_CMD_ENABLE_PULL:
			 {
				GPIO_MD_PullenSetup(port, (kal_bool)GPIO_PULL_ENABLE);
				break;
			 }
			 case GPIO_CMD_DISABLE_PULL:
			 {
				GPIO_MD_PullenSetup(port, (kal_bool)GPIO_PULL_DISABLE);
				break;
			 }
			 case GPIO_CMD_SET_PULL_HIGH:
			 {
				GPIO_PullSelSetup(port,(kal_bool) GPIO_PULL_HIGH);
				break;
			 }
			 case GPIO_CMD_SET_PULL_LOW:
			 {
				GPIO_MD_PullSelSetup(port, (kal_bool)GPIO_PULL_LOW);
				break;
			 }	 
			 case GPIO_CMD_SET_DINV:
			 {
				GPIO_CTRL_SET_DINV_T   *prSetDinv;
				prSetDinv = &(data->rSetDinv);
				GPIO_MD_DinvSetup(port,(kal_bool)( prSetDinv->fgSetDinv));
				break;
			 }

			 case GPIO_CMD_GET_AP_PIN:
			 {
			 	GPIO_CTRL_RETURN_AP_T  *prGetApData;
				prGetApData=&(data->rReturnAp);
				prGetApData->u1RetApData=port;
				break;
			 }
				
         #ifdef __CUST_NEW__
			 case GPIO_CMD_SET_DIR_OUT_NO_IRQ_MASK: 
			 {
				GPIO_InitIO_FAST(GPIO_DIR_OUT,port);
				break;
			 }
			 case GPIO_CMD_SET_DIR_IN_NO_IRQ_MASK:
			 {
				GPIO_InitIO_FAST(GPIO_DIR_IN,port);
				break;
			 }
			 case GPIO_CMD_WRITE_HIGH_NO_IRQ_MASK:
			 {
				GPIO_WriteIO_FAST(GPIO_IO_HIGH,port);
				break;
			 }
			 case GPIO_CMD_WRITE_LOW_NO_IRQ_MASK:
			 {
				GPIO_WriteIO_FAST(GPIO_IO_LOW,port);
				break;
			 }
			  case GPIO_CMD_READ_NO_IRQ_MASK:
			 {
				GPIO_CTRL_READ_T   *prRead;
				prRead = &(data->rRead);
				prRead->u1IOData = GPIO_ReadIO_FAST(port);
				break;
			 }
         #endif
			 case GPIO_CMD_WRITE_FOR_SPI:
			 {
				GPIO_CTRL_WRITE_FOR_SPI_T *prWrite;
				prWrite = &(data->rWriteSpi);
				GPIO_WriteIO_FAST2(prWrite->data,prWrite->no,prWrite->remainder_shift);
				break;
			 }		
			 default:
				EXT_ASSERT(0,handle,cmd,0);
				return STATUS_INVALID_CMD;
		  }
	   }
	   else if(DCL_GPO_IS_HANDLE_MAGIC(handle))
	   {
		  switch(cmd)
		  {
			 case GPO_CMD_MODE_SET_0:
			 {
				GPO_ModeSetup(port,GPO_MODE_0);
				break;
			 }
			 case GPO_CMD_MODE_SET_1:
			 {
				GPO_ModeSetup(port,GPO_MODE_1);
				break;
			 }
			 case GPO_CMD_MODE_SET_2:
			 {
				GPO_ModeSetup(port,GPO_MODE_2);
				break;
			 }
			 case GPO_CMD_MODE_SET_3:
			 {
				GPO_ModeSetup(port,GPO_MODE_3);
				break;
			 }
			 case GPO_CMD_WRITE_LOW :
			 {
				GPO_WriteIO(port,GPO_IO_LOW);
				break;
			 }
			 case GPO_CMD_WRITE_HIGH:
			 {
				GPO_WriteIO(port,GPO_IO_HIGH);
				break;
			 }
			 case GPO_CMD_RETURN_OUT:
			 {
				GPO_CTRL_RETURN_OUT_T	*prReturnOut;
				prReturnOut = &(data->oReturnOut);
				prReturnOut->u1RetOutData = GPO_ReturnDout(port);
				break;
			 }
			 case GPO_CMD_RETURN_MODE:
			 {
				GPO_CTRL_RETURN_MODE_T	 *prReturnMode;
				prReturnMode = &(data->oReturnMode);
				prReturnMode->u1RetMode = GPO_ReturnMode(port);
				break;
			 }
			 default:
				EXT_ASSERT(0,handle,cmd,0);
				return STATUS_INVALID_CMD;
		  }
	   }
	   else if (DCL_GPIO_CLK_IS_HANDLE_MAGIC(handle))
	   {
		  switch(cmd)
		  {

			 case GPIO_CMD_SET_CLK_DIV:
			 {
				kal_uint8 clknum=0;
				GPIO_CTRL_SET_CLK_DIV_T *prSetClkDiv;
				prSetClkDiv= &(data->rSetClkDiv);
				clknum=get_clknum(prSetClkDiv->u2ClkNum);
				GPIO_SetClkDiv(clknum,prSetClkDiv->u2Div);
				break;
			 }
			 default:
				EXT_ASSERT(0,handle,cmd,0);
				return STATUS_INVALID_CMD;
		  }
	   }
	   else
	   {
		  EXT_ASSERT(0,handle,cmd,0);
		  return STATUS_INVALID_DCL_HANDLE;
	   }  
	   return STATUS_OK;
}