static void  LCD_open_cmd(__u32 sel)
{
    IIC_Write(0xfc, 0xf830, 0xb2);
    IIC_Write(0xfc, 0xf833, 0xc2);
    IIC_Write(0xfc, 0xf831, 0xf0);
    IIC_Write(0xfc, 0xf840, 0x80);
    IIC_Write(0xfc, 0xf881, 0xec);
}
Beispiel #2
0
ErrorStatus fnSetAlarmClock(uint8_t h,uint8_t m,uint8_t setting)
{
	uint8_t t;
	
	if ((h>=24)||(m>=60))
		return ERROR;
	rt_kprintf("\n===Enter Alarm Clock Mode===\n");
	
	/* Set Alarm Time */
	t = IIC_Read(DS3231_ADDRESS,DS3231_CONTROL) & 0xFC;
	if (setting)
	{
		IIC_Write(DS3231_ADDRESS,DS3231_CONTROL,t | 0x01);
		IIC_Write(DS3231_ADDRESS,DS3231_A1_S,0x00);
		IIC_Write(DS3231_ADDRESS,DS3231_A1_M,(m%10)|((m/10)<<4));
		IIC_Write(DS3231_ADDRESS,DS3231_A1_H,(h%10)|((h/10)<<4));
		IIC_Write(DS3231_ADDRESS,DS3231_A1_D,0x80);
	}else{
		IIC_Write(DS3231_ADDRESS,DS3231_CONTROL,t | 0x02);
		IIC_Write(DS3231_ADDRESS,DS3231_A2_M,(m%10)|((m/10)<<4));
		IIC_Write(DS3231_ADDRESS,DS3231_A2_H,(h%10)|((h/10)<<4));
		IIC_Write(DS3231_ADDRESS,DS3231_A2_D,0x80);
	}
	
	/* Clear Alarm Flag */
	t = IIC_Read(DS3231_ADDRESS,DS3231_CON_STA);
	t &= 0xFC;
	IIC_Write(DS3231_ADDRESS,DS3231_CON_STA,t);
	
	rt_event_send(en_event,EVENT_TEMP_CLOCK);
	rt_thread_delay_hmsm(0,0,1,0);
	
	rt_event_send(reg_event,REG_ALARM_MSK);
	reg_output[REG_ALARM] = REG_Convert(REG_HexToReg(m%10),REG_HexToReg(m/10),REG_HexToReg(h%10),REG_HexToReg(h/10),1,0);
	rt_thread_delay_hmsm(0,0,1,0);
	
	reg_output[REG_ALARM] = 0xFFFFFFFF;
	rt_thread_delay_hmsm(0,0,0,62);
	reg_output[REG_ALARM] = 0xFFFFFFFE;
	rt_thread_delay_hmsm(0,0,0,62);
	reg_output[REG_ALARM] = 0xFFFFFEBF;
	rt_thread_delay_hmsm(0,0,0,62);
	reg_output[REG_ALARM] = 0xFFFEBFF7;
	rt_thread_delay_hmsm(0,0,0,62);
	reg_output[REG_ALARM] = 0xFEBFF7FF;
	rt_thread_delay_hmsm(0,0,0,62);
	reg_output[REG_ALARM] = 0xBFF7FFFF;
	rt_thread_delay_hmsm(0,0,0,62);
	reg_output[REG_ALARM] = 0xF7FFFFFF;
	rt_thread_delay_hmsm(0,0,0,62);
	reg_output[REG_ALARM] = 0xFFFFFFFF;
	rt_thread_delay_hmsm(0,0,0,62);
	
	StandBy();
	return SUCCESS;
}
Beispiel #3
0
void SetPWMFreq(short freq)
{
	short prescale=6103;
	uint8_t oldmode,newmode; 	
	freq*=0.9;
	prescale/=freq;
	oldmode =IIC_Read(PCA_Add,PCA9685_MODE1);
	newmode =(oldmode&0x7f)|0x10;
	IIC_Write(PCA_Add,PCA9685_MODE1,newmode);
	IIC_Write(PCA_Add,PCA9685_PRESCALE,prescale);
	IIC_Write(PCA_Add,PCA9685_MODE1,oldmode);
	Delay5ms();
	IIC_Write(PCA_Add,PCA9685_MODE1,oldmode|0xa1);
}
Beispiel #4
0
/************************************************************************************
*
*  Accel_GetXYZMeasurements
*
************************************************************************************/
#if TRUE == gAccelerometerSupported_d

#if gTargetBoard_c == gMc1323xRcm_c         /* Only for MC1323xRCM board */
accelErr_t Accel_GetXYZMeasurements (accelData_t* XYZValues, accelCallback_t AccelCallback) 
{
  iicErr_t SerialComError = gIicErrNoError_c;
  uint8_t au8TempBuffer = 0;

  #if(TRUE == gAccelParameterValidation_d) 
  if((NULL == XYZValues) || (NULL == AccelCallback))
  {
    return gAccelErrInvalidParam_c;
  }
  #endif  
  
  if( gAccelComStatusIdle_c != mgAccelCurrentStatus) 
  {
    return gAccelErrDriverBusy_c;  
  }
  
  mgXYZValues = XYZValues;
  mgAccelCallback = AccelCallback;     
  au8TempBuffer = mAccelXValueReg_c;
  
  SerialComError = IIC_Write (mAccelmma7660fcI2cAddress_c,&au8TempBuffer, 1,AccelWrite_IicCallback);

  if(gIicErrNoError_c != SerialComError) 
  {
    (void)IIC_StopTransaction(mAccelmma7660fcI2cAddress_c);
    return gAccelErrInterfComError_c;
  } 
  else                                
  {
    mgAccelCurrentStatus = gAccelComStatusWrtAddress_c; 
  }
  
  return gAccelNoError_c;
}
Beispiel #5
0
// =============================================================================
// 功能:在指定地址写入一个字节的数据
// 参数:Addr,写入地址
//       Value,写入的数据
// 返回:写入的数据量
// =============================================================================
u32 E2PROM_WriteByte(u32 Addr,u8 Value)
{
	u32 result = 0;
	if(Addr > CN_E2ROM_MAX_SIZE)
		return result;
	result = IIC_Write(&pg_E2ROM_Dev,Addr,&Value,1,true,CN_E2ROM_OP_TIMEOUT);
	
	return result;
}
Beispiel #6
0
void Set_Time(uint8_t Y,uint8_t M,uint8_t D,uint8_t w, uint8_t h,uint8_t m, uint8_t s)
{
  IIC_Write(DS3231_ADDRESS, DS3231_SECOND , ((s/10)<<4)|(s%10));
  IIC_Write(DS3231_ADDRESS, DS3231_MINUTE , ((m/10)<<4)|(m%10));
  IIC_Write(DS3231_ADDRESS, DS3231_HOUR , ((h/10)<<4)|(h%10));
  IIC_Write(DS3231_ADDRESS, DS3231_WEEKDAY , ((w/10)<<4)|(w%10));
  IIC_Write(DS3231_ADDRESS, DS3231_YEAR , ((Y/10)<<4)|(Y%10));
  IIC_Write(DS3231_ADDRESS, DS3231_MONTH , ((M/10)<<4)|(M%10));
  IIC_Write(DS3231_ADDRESS, DS3231_DAY , ((D/10)<<4)|(D%10));  
  time();
  return;
}
Beispiel #7
0
// =============================================================================
// 功能:按页写,最大字节不能超过一页大小的数据,WC是芯片的写控制引脚,每次写之前需拉低
//       电平,写完需拉高电平,但是本板件WC一直是低电平,这样导致写完后,芯片需花一定
//       时间去判断是否写完
// 参数:PageNo,页号
//       pSrcBuf,写入的数据
//       SrcLen,写入字节数,必须小于一页数据量
// 返回:写入的字节数
// =============================================================================
u32 E2PROM_WritePage(u32 PageNo,u8 *pSrcBuf,u32 SrcLen)
{
	u32 Addr,result=0;
	
	if((PageNo > CN_E2ROM_MAX_PAGE) || (SrcLen == 0)
			|| (SrcLen > CN_E2ROM_PAGE_SIZE) || (NULL == pSrcBuf))
		return result;
	
	Addr = PageNo * CN_E2ROM_PAGE_SIZE;
	result = IIC_Write(&pg_E2ROM_Dev,Addr,pSrcBuf,SrcLen,1,CN_E2ROM_OP_TIMEOUT);
	
	Djy_EventDelay(CN_CHIP_WRITE_FINISHED_TIME);
    return result;
}
Beispiel #8
0
char MPU6050_swrite(unsigned char WriteAddr,unsigned char Data)
{
    //  Single_write(&Data,MPU6050_Addr,WriteAddr,1);
    IIC_Write(&Data,MPU6050_Addr,WriteAddr,1);
    return Data;
}
Beispiel #9
0
void PCA_Reset()
{
IIC_Write(PCA_Add,PCA9685_MODE1,0x00);
}
Beispiel #10
0
void rt_thread_alarm_entry (void *parameter)
{
	uint8_t buf;
	uint16_t t;
	rt_uint32_t e;
	
	AlarmerInit();
	SetAlarm(0);
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); 
	if (PWR_GetFlagStatus(PWR_FLAG_WU)==SET)
	{
		rt_kprintf("\n\nWaken up by DS3231\n");
		if ((IIC_Read(DS3231_ADDRESS, DS3231_CON_STA)) & 0x01) fnAlarm();
		IIC_Write(DS3231_ADDRESS, DS3231_CON_STA,0x80);
	}
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, DISABLE);

	while (rt_mq_recv(key_mq,&buf,sizeof(uint8_t),10)==RT_EOK);
	while (1)
	{
		do
		{
			rt_mq_recv(key_mq,&buf,sizeof(uint8_t),RT_WAITING_FOREVER);
		}while(buf!=0);
		t = 0;
		reg_output[REG_ALARM]=0xF777F7F7;
		rt_event_send(reg_event,REG_ALARM_MSK);
		
		rt_mq_recv(key_mq,&buf,sizeof(uint8_t),RT_WAITING_FOREVER);
		if (buf>9)
		{
			rt_event_recv(reg_event,REG_ALARM_MSK,RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR,0,&e);
			continue;
		}
		t = buf;
		reg_output[REG_ALARM]=(0x01000000*REG_HexToReg(buf)) | (0x00FFFFFF & reg_output[REG_ALARM]) | 0x80000000;

		rt_mq_recv(key_mq,&buf,sizeof(uint8_t),RT_WAITING_FOREVER);	
		if (buf>9)
		{
			rt_event_recv(reg_event,REG_ALARM_MSK,RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR,0,&e);
			continue;
		}
		t = t*10+buf;
		reg_output[REG_ALARM]=(0x00010000*REG_HexToReg(buf)) | (0xFF00FFFF & reg_output[REG_ALARM]);

		rt_mq_recv(key_mq,&buf,sizeof(uint8_t),RT_WAITING_FOREVER);		
		if (buf>9)
		{
			rt_event_recv(reg_event,REG_ALARM_MSK,RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR,0,&e);
			continue;
		}
		t = t*10+buf;
		reg_output[REG_ALARM]=(0x00000100*REG_HexToReg(buf)) | (0xFFFF00FF & reg_output[REG_ALARM]);

		rt_mq_recv(key_mq,&buf,sizeof(uint8_t),RT_WAITING_FOREVER);		
		if (buf>9)
		{
			rt_event_recv(reg_event,REG_ALARM_MSK,RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR,0,&e);
			continue;
		}
		t = t*10+buf;
		reg_output[REG_ALARM]=(0x00000001*REG_HexToReg(buf)) | (0xFFFFFF00 & reg_output[REG_ALARM]);

		rt_mq_recv(key_mq,&buf,sizeof(uint8_t),RT_WAITING_FOREVER);		
		if (buf<=9)
		{
			rt_event_recv(reg_event,REG_ALARM_MSK,RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR,0,&e);
			continue;
		}else
		{
			if (fnSetAlarmClock(t/100,t%100,buf==0x0B)==ERROR)
				rt_event_recv(reg_event,REG_ALARM_MSK,RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR,0,&e);

		}
	}
}