Пример #1
0
int ADC_IOinit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);

    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_OD;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Pin   = PIN_CLK;
    GPIO_Init(PIN_GROUP, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin   = PIN_CONV;
    GPIO_Init(PIN_GROUP, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStructure.GPIO_Pin   = PIN_DAT;
    GPIO_Init(PIN_GROUP, &GPIO_InitStructure);


	CONV_H();
	CLK_L();




	return 0;

}
Пример #2
0
uint16_t ADC_Converter(void)
{
    uint32_t i;              	//用于12位数字的计数 
	uint16_t result = 0;
	
	//时序图参见文档的12页。
	CONV_H();				   	
	Delay_nop(SHORT_DELAY);							
	CONV_L();				   	// CONV下降沿表示转换启动。
	Delay_nop(SHORT_DELAY);
	CLK_H();					// 先连续两个时钟脉冲,满足时序要求
	Delay_nop(SHORT_DELAY);
	CLK_L();
	Delay_nop(SHORT_DELAY);
	CLK_H();
	Delay_nop(SHORT_DELAY);
	CLK_L();

	for(i=0;i<12;i++)	   		// 第三个脉冲开始读取12位的转换内容。
	{
		CLK_H(); 
		Delay_nop(SHORT_DELAY);
		if( DAT_READ() )
			result |= 0x0001;		
		else
			result &= 0xfffe;
		CLK_L();
		Delay_nop(SHORT_DELAY);

		result <<= 1;				
	}
	CLK_H();
	Delay_nop(SHORT_DELAY);
	CLK_L();				 	// 最后发两个脉冲满足16位的时钟对齐。
	Delay_nop(SHORT_DELAY);
	CLK_H();
	Delay_nop(SHORT_DELAY);
	CLK_L();
	Delay_nop(SHORT_DELAY);
	CONV_H();				  	// 表示转换结束。

    return(result);        		//返回值    	
}
Пример #3
0
u8 SPI_write_byte(u8 byte)
{
	u8 i;
   	for(i=0;i<8;i++) 
   	{
		if(byte & 0x80)
			 MOSI_H();
		else 
     		 MOSI_L();			
		byte = (byte << 1);           
		CLK_H();                      
		byte |= READ_MISO;       		  
		CLK_L();           		  
   	}
    return(byte);           		  
}
Пример #4
0
static void write_TM1616(u8 data)
{
	u8 data_temp = data;
	u8 i;
	for(i=0;i<8;i++)
	{
		if((data_temp&0x01)!=0)   //send from lower bit
		{
			DIN_H();
		}
		else
		{
			DIN_L();
		}
		CLK_L();        //TM1616 read data as clk positive edge 
		ndelay(1);
		CLK_H();
		ndelay(1);
		data_temp = data_temp>>1;
	}	
}