Esempio n. 1
0
static void spi_transfer(uint16_t *in_buf, const uint16_t *out_buf, int length) {
	for (int i = 0;i < length;i++) {
		uint16_t send = out_buf ? out_buf[i] : 0xFFFF;
		uint16_t recieve = 0;

		for (int bit = 0;bit < 16;bit++) {
			palWritePad(DRV8301_MOSI_GPIO, DRV8301_MOSI_PIN, send >> 15);
			send <<= 1;

			palSetPad(DRV8301_SCK_GPIO, DRV8301_SCK_PIN);
			spi_delay();

			palClearPad(DRV8301_SCK_GPIO, DRV8301_SCK_PIN);

			int r1, r2, r3;
			r1 = palReadPad(DRV8301_MISO_GPIO, DRV8301_MISO_PIN);
			__NOP();
			r2 = palReadPad(DRV8301_MISO_GPIO, DRV8301_MISO_PIN);
			__NOP();
			r3 = palReadPad(DRV8301_MISO_GPIO, DRV8301_MISO_PIN);

			recieve <<= 1;
			if (utils_middle_of_3_int(r1, r2, r3)) {
				recieve |= 1;
			}

			spi_delay();
		}

		if (in_buf) {
			in_buf[i] = recieve;
		}
	}
}
Esempio n. 2
0
/*******************************************************************************
* 函数名称: emif_epld_adc_spi_write
* 功    能: 并口寄存器epld adc spi通道写数据。先写高位 下降沿写数
* 参    数:
* 参数名称         类型                描述
* data      unsigned int        所要写入的数据
* length    unsigned char				数据位宽
* 返回值:
* 无
* 说   明:
* 日   期     版本    作者   修改人      DEBUG
* -----------------------------------------------------------------
* 2012/06/15  V1.0     H4     无       :
*******************************************************************************/
int emif_epld_adc_spi_write(unsigned int data,unsigned char length)
{
	unsigned char i;
	if(length>32){
		return -1;	
	}
	emif_epld_adc_spi_le(SPI_H);
	spi_delay(SPI_TIME_DELAY);
	emif_epld_adc_spi_clk(SPI_H);
	emif_epld_adc_spi_le(SPI_L);
	for(i=0;i<length;i++){
		if((data&(1<<(length-1-i)))!=0)
		emif_epld_adc_spi_out(SPI_H);
		else
		emif_epld_adc_spi_out(SPI_L);
		emif_epld_adc_spi_clk(SPI_H);
		spi_delay(SPI_TIME_DELAY);
		emif_epld_adc_spi_clk(SPI_L);
		spi_delay(SPI_TIME_DELAY);
		emif_epld_adc_spi_clk(SPI_H);
	}
	emif_epld_adc_spi_le(SPI_H);
	spi_delay(SPI_TIME_DELAY);
	return 0;
}
Esempio n. 3
0
int dru_lmx2531_fdd_lte2_init()
{
    unsigned int R6,R7,R8,R9,R12;
    R6 = 0x0288006;
    R7 = 0x0000307;
    R8 = 0x0028008;
    R9 = 0x0000ba9;
    R12= 0x001048c;
	emif_epld_spi_channel(4);
	//usleep(1000);
	spi_delay(10000);
	emif_epld_spi_write(0x840005,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x800005,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x5807F5,LMX2531_REG_LENGTH );


	//usleep(1000);    
	spi_delay(10000);   
	emif_epld_spi_write(R12,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R9,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R8,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R7,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R6,LMX2531_REG_LENGTH );   
	        
	emif_epld_spi_write(0x000004,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x6cc003,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x4c0022,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x3e0001,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x361da0,LMX2531_REG_LENGTH );
	//emif_epld_spi_write(0x2C0001,LMX2531_REG_LENGTH );//

	return 1;
}
Esempio n. 4
0
UBYTE sd_cmd8()
{
	BYTE r;
	sd_wait_ready();

	spi_send_byte(0x48);
	spi_send_byte(0x00);
	spi_send_byte(0x00);
	spi_send_byte(0x01);
	spi_send_byte(0xaa);
	spi_send_byte(0x87);

	r = sd_wait_r1();
	spi_delay();
	spi_delay();
	spi_delay();
	spi_delay();
	spi_delay();

#ifdef DEBUG_SD
	debug_puts("cmd8:");
	debug_print_byte(r);
	debug_puts("\n");
#endif
	return r;
}
Esempio n. 5
0
int dru_lmx2531_wcdma_init()
{
	// for LMX2531_2050E, XTLSEL = manu; XDIV = 8; osc =61.44; 
    unsigned int R6,R7,R8,R9,R12;
    R6 = 0x0288056;
    R7 = 0x0000307;
    R8 = 0x0028008;
    R9 = 0x0000ba9;
    R12= 0x001048c;
	emif_epld_spi_channel(2);
	//usleep(1000);
	spi_delay(10000);
	emif_epld_spi_write(0x840005,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x800005,LMX2531_REG_LENGTH );	
	emif_epld_spi_write(0x5807F5,LMX2531_REG_LENGTH );//5807f5 8007f5
	//usleep(1000);    
	spi_delay(10000);   

	emif_epld_spi_write(R12,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R9,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R8,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R7,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R6,LMX2531_REG_LENGTH );
	          
	emif_epld_spi_write(0x0000004,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x06cc003,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x0580022,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x03e0001,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x03c25f0,LMX2531_REG_LENGTH );
	//emif_epld_spi_write(0x2C0001,LMX2531_REG_LENGTH );//

	return 1;
}
Esempio n. 6
0
UBYTE sd_cmd58()
{
	BYTE r;
	sd_wait_ready();

	spi_send_byte(0x7a);
	spi_send_byte(0x00);
	spi_send_byte(0x00);
	spi_send_byte(0x00);
	spi_send_byte(0x00);
	spi_send_byte(0xff);

	r = sd_wait_r1();
	spi_delay(); // if &0xc0==0xc0 => SDHC
	spi_delay();
	spi_delay();
	spi_delay();

#ifdef DEBUG_SD
	debug_puts("cmd58:");
	debug_print_byte(r);
	debug_puts("\n");
#endif
	return r;
}
Esempio n. 7
0
int dru_lmx2531_gsm1_init()
{
    unsigned int R6,R7,R8;
    R6 = 0x0080006;
    R7 = 0x0000107;
    R8 = 0x0028008;

	emif_epld_spi_channel(4);
	//usleep(1000);
	spi_delay(10000);
		
    emif_epld_spi_write(0x840005,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x800005,LMX2531_REG_LENGTH );	
	emif_epld_spi_write(0x8007F5,LMX2531_REG_LENGTH );
	//usleep(1000);    
	spi_delay(1000);  
	emif_epld_spi_write(R8,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R7,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R6,LMX2531_REG_LENGTH );
	
	            
	emif_epld_spi_write(0x000004,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0xecc003,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x430042,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x03e0001,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x0690240,LMX2531_REG_LENGTH );
	//emif_epld_spi_write(0x2C0001,LMX2531_REG_LENGTH );//

	return 1;
}
Esempio n. 8
0
/*******************************************************************************
*函数名称 : int dru_lmx2531_gsm_main_dcs_init()
*功    能 : 主单元
*输入参数 : 
*输出参数 :
*******************************************************************************/
int dru_lmx2531_gsm_main_dcs_init()//1663.9
{
    unsigned int R6,R7,R8,R9,R12;
    R6 = 0x0288006;
    R7 = 0x0000307;
    R8 = 0x0028008;
    R9 = 0x0000ba9;
    R12= 0x001048c;

	emif_epld_spi_channel(1);
	//usleep(1000);
	spi_delay(10000);
	emif_epld_spi_write(0x840005,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x800005,LMX2531_REG_LENGTH );	
	emif_epld_spi_write(0x5807F5,LMX2531_REG_LENGTH );
	//usleep(1000);    
	spi_delay(10000);  
	
	emif_epld_spi_write(R12,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R9,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R8,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R7,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R6,LMX2531_REG_LENGTH );
	
	            
	emif_epld_spi_write(0x000004,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0xecc043,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x7b0042,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x3e0041,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x5d96b0,LMX2531_REG_LENGTH );// 721.4M 电信cdma 

	return 1;
}
Esempio n. 9
0
static void SetData( unsigned short Data)
{
    LCD_CS( 0);
    spi_delay( 1);
    SendStartByte( 0, 1);
    SendByte( Data);
    spi_delay( 1);
    LCD_CS( 1);
}
Esempio n. 10
0
static void SetIndex( unsigned char Index)
{
    LCD_CS( 0);
    spi_delay( 1 );
    SendStartByte( 0, 0);
    SendByte( Index);
    spi_delay( 1 );
    LCD_CS( 1);
}
Esempio n. 11
0
int sd_load_sector(UBYTE* target, DWORD sector)
{
	DWORD address;
	BYTE r;
	BYTE timeout;

	address = sector<<9;

#ifdef DEBUG_SD
	debug_puts("loading address ");
	debug_print_dword(address);
	debug_puts("\n");
#endif

	sd_wait_ready();
	// read block
	spi_assert_cs();
	spi_send_byte(0x51);		// CMD17
	spi_send_byte((address>>24)&0xff);
	spi_send_byte((address>>16)&0xff);
	spi_send_byte((address>>8)&0xff);
	spi_send_byte(address&0xff);
	spi_send_byte(0xff);

	r = sd_wait_r1();
#ifdef DEBUG_SD
	debug_puts("cmd17:");
	debug_print_byte(r);
	debug_puts("\n");
#endif
	if ((r&0x80)!=0) {
		spi_deassert_cs();
		return FALSE;
	}

	// wait for 0xfe (start of block)
	timeout = 0xff;
	while (spi_receive_byte()!=0xfe) {
		if (timeout==0) {
			spi_deassert_cs();
			return FALSE;
		}
		timeout = timeout-1;
	}

	// read block
	load_data(target);

	// skip crc
	spi_delay();
	spi_delay();

	// shutdown
	spi_delay();
	spi_deassert_cs();
	return TRUE;
}
Esempio n. 12
0
//-------------------------------------------------------------------
void clear_screen ( void )
{
    SPI_CS_ON;
    spi_delay();
    spi_write_byte(0x20);
    spi_write_byte(0x00);
    spi_delay();
    SPI_CS_OFF;
}
Esempio n. 13
0
static void LcdSend(unsigned char Value)
{
  	
    LCD_CS(0);
    spi_delay(5);
    WriteByte( Value);
    spi_delay( 5);
    LCD_CS( 1);
    spi_delay(5);
}
Esempio n. 14
0
static void spi_write(unsigned char b)
{
    for(int i = 7; i >= 0; i--)
    {
        SPI_SCL(false);
        spi_delay();
        SPI_SDO((b >> i) & 1);
        spi_delay();
        SPI_SCL(true);
        spi_delay();
    }
}
Esempio n. 15
0
//-------------------------------------------------------------------
void spi_write_byte ( unsigned char d )
{
    unsigned char ca;

    for(ca=0x80;ca;ca>>=1)
    {
        if(ca&d) SPI_MOSI_ON; else SPI_MOSI_OFF;
        spi_delay();
        SPI_CLK_ON;
        spi_delay();
        SPI_CLK_OFF;
        spi_delay();
    }
}
Esempio n. 16
0
//-------------------------------------------------------------------
void spi_write_sharp_address ( unsigned char d )
{
    unsigned char ca;

    for(ca=0x01;;ca<<=1)
    {
        if(ca&d) SPI_MOSI_ON; else SPI_MOSI_OFF;
        spi_delay();
        SPI_CLK_ON;
        spi_delay();
        SPI_CLK_OFF;
        spi_delay();
        if(ca==0x80) break;
    }
}
Esempio n. 17
0
/*
 * Polls for non-busy status
 */
static int spi_tx_check_busy(u8 mask)
{
	struct spi_dev *dev = &spi_dev;
	u8 limit = 16;
	u8 status;

	/*
	 * Poll for valid, non-busy status.
	 */
	do {
		status = spi_platform_io(0);
		if (!(status & mask)) {
			break;
		}
		spi_delay();
	} while (limit-- > 0);

	if (status & ASPI_MSTAT_INVAL) {
		STATS(tx_stat_inval);
		return 1;
	}

	if (status & mask) {
		if (status & ASPI_MSTAT_ATTN) {
			dev->state = SS_RX_WAIT;
			return 2;
		}
		STATS(tx_still_busy);
		return 3;
	}

	return 0;
}
Esempio n. 18
0
static void LCD_ILI9481_CMD(unsigned char cmd)
{
	LCD_CS(0);

	LCD_SCL(0);
	spi_delay(1);
	LCD_SI(0);
	LCD_SCL(1);

	spi_delay(1);
	SendByte(cmd);
	spi_delay(1);

	LCD_CS( 1);

}
Esempio n. 19
0
static int spi_test(void) {
	uint8_t res = 0;
	uint8_t data = 0x23;

	printf("SPI test\n");

	while(1) {
		spi_delay(1000000);
		res = 0;
		// sync
		spi_sync();
		printf(">> synchronized\n");
		// data from master
		if (HAL_SPI_Receive(&SpiHandle, &res, 1, SPI_TIMEOUT_MAX) != HAL_OK) {
			printf("HAL_SPI_Receive error 1\n");
			return -1;
		}
		if (res != 0x57) {
			printf("HAL_SPI_Receive recieved not 0x57 but %x\n", res);
		}
		// request data
		if (HAL_SPI_Transmit(&SpiHandle, &data, 1, SPI_TIMEOUT_MAX) != HAL_OK) {
			printf("HAL SPI Transmit error\n");
			return -1;
		}
	}

	return 0;
}
Esempio n. 20
0
/*
 ***************************************************************
 * 名称: Rec_1_Char 
 * 功能: 模拟spi接收字节
 * 输入: NULL 
 * 输出: NULL 
 * 返回: 返回接收到的数据
 * 描述: 无 
 ***************************************************************
 */
unsigned char  Rec_1_Char(void)
{
	unsigned char i, Temp = 0;

	for (i = 0; i < 8; i++)                   
	{
		Temp <<= 1; 
		Temp |= MYSPI_MISO;
		MYSPI_SCK_1;                   
		spi_delay(6);
		MYSPI_SCK_0; 
		spi_delay(6);		
	}

	return Temp;
}
Esempio n. 21
0
static void LCD_ILI9481_INDEX(unsigned char index)
{

	LCD_CS(0);

	LCD_SCL(0);
	spi_delay(1);
	LCD_SI(1);
	LCD_SCL(1);

	spi_delay(1);
	SendByte(index);
	spi_delay(1);

	LCD_CS( 1);

}
Esempio n. 22
0
/*
 ***************************************************************
 * 名称: Send_1_Char 
 * 功能: 模拟spi发送字节
 * 输入: NULL 
 * 输出: NULL 
 * 返回: NULL 
 * 描述: 无 
 ***************************************************************
 */
void Send_1_Char(unsigned char Data)
{   
	unsigned char i;

	for (i = 0; i < 8; i++)          		
	{		
		if (Data & 0x80) 
			MYSPI_MOSI_1;     	
		else 
			MYSPI_MOSI_0;
		
		spi_delay(6);
		MYSPI_SCK_1;                   
		Data <<= 1;
		spi_delay(6);
		MYSPI_SCK_0; 						
	} 
}
Esempio n. 23
0
UBYTE spi_receive_byte()
{
	spi_delay();
	#asm
	in a,($01)
	ld l,a
	ld h,0
	#endasm
}
Esempio n. 24
0
int dru_lmx2531_wcdma_config(unsigned int freq)
{
	// for LMX2531_2050E, XTLSEL = manu; XDIV = 8; osc =61.44; 
    unsigned int R6,R7,R8,R9,R12,R0=0;
    unsigned short NUM=0;
    unsigned char N=0;
    R6 = 0x0288056;
    R7 = 0x0000307;
    R8 = 0x0028008;
    R9 = 0x0000ba9;
    R12= 0x001048c;
	emif_epld_spi_channel(2);
	//usleep(1000);
	spi_delay(10000);
	N= freq/30720;
	NUM=(freq-N*30720)/20;
	
	
	
	R0= (N <<16) |(NUM<<4);
	
	
	emif_epld_spi_write(0x840005,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x800005,LMX2531_REG_LENGTH );	
	emif_epld_spi_write(0x5807F5,LMX2531_REG_LENGTH );//5807f5 8007f5
	//usleep(1000);    
	spi_delay(10000);   

	emif_epld_spi_write(R12,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R9,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R8,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R7,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R6,LMX2531_REG_LENGTH );
	          
	emif_epld_spi_write(0x0000004,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x06cc003,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x0580022,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x03e0001,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R0,LMX2531_REG_LENGTH );
	//emif_epld_spi_write(0x03c25f0,LMX2531_REG_LENGTH );
	//emif_epld_spi_write(0x2C0001,LMX2531_REG_LENGTH );//

	return 1;
}
Esempio n. 25
0
static void tegra_spi_wait(struct tegra_spi_channel *spi)
{
	unsigned int count, dma_blk;

	dma_blk = 1 + (read32(&spi->regs->dma_blk) &
		(SPI_DMA_CTL_BLOCK_SIZE_MASK << SPI_DMA_CTL_BLOCK_SIZE_SHIFT));

	while ((count = spi_byte_count(spi)) != dma_blk)
		spi_delay(spi, dma_blk - count);
}
Esempio n. 26
0
int dru_lmx2531_fdd_lte2_config(unsigned int freq)
{
    unsigned int R6,R7,R8,R9,R12,R0=0;
    unsigned short NUM=0;
    unsigned char N=0;
    R6 = 0x0288006;
    R7 = 0x0000307;
    R8 = 0x0028008;
    R9 = 0x0000ba9;
    R12= 0x001048c;
	emif_epld_spi_channel(4);
	//usleep(1000);
	spi_delay(10000);
	N= freq/30720;
	NUM=(freq-N*30720)/40;
	
	
	
	R0= (N <<16) |(NUM<<4);
	
	emif_epld_spi_write(0x840005,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x800005,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x5807F5,LMX2531_REG_LENGTH );


	//usleep(1000);    
	spi_delay(10000);   
	emif_epld_spi_write(R12,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R9,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R8,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R7,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R6,LMX2531_REG_LENGTH );   
	        
	emif_epld_spi_write(0x000004,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x6cc003,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x4c0022,LMX2531_REG_LENGTH );
	emif_epld_spi_write(0x3e0001,LMX2531_REG_LENGTH );
	emif_epld_spi_write(R0,LMX2531_REG_LENGTH ); 
	//emif_epld_spi_write(0x361da0,LMX2531_REG_LENGTH );
	//emif_epld_spi_write(0x2C0001,LMX2531_REG_LENGTH );//

	return 1;
}
Esempio n. 27
0
void dru_lm2581_init(void)
{
	lm2581_spi_channel(1);
	lm2581_spi_write(0x00108015);
	spi_delay(10000);  
	lm2581_spi_write(0x021FE80F);
	lm2581_spi_write(0x4082C10D);
	lm2581_spi_write(0x210050CA);
	lm2581_spi_write(0x03C7C039);
	lm2581_spi_write(0x207DDBF8);
	lm2581_spi_write(0x00082317);
	lm2581_spi_write(0x000004C6);
	lm2581_spi_write(0x0010A805);
	
	lm2581_spi_write(0x00000004);
	lm2581_spi_write(0x2005E3c3);
	lm2581_spi_write(0x0FD09002);
	lm2581_spi_write(0xC53A2051);
	lm2581_spi_write(0x41062750);
	spi_delay(50000);  
	lm2581_spi_write(0x41062750);

	lm2581_spi_channel(2);
	lm2581_spi_write(0x00108015);
	spi_delay(10000);  
	lm2581_spi_write(0x021FE80F);
	lm2581_spi_write(0x4082C10D);
	lm2581_spi_write(0x210050CA);
	lm2581_spi_write(0x03C7C039);
	lm2581_spi_write(0x207DDBF8);
	lm2581_spi_write(0x00082317);
	lm2581_spi_write(0x000004C6);
	lm2581_spi_write(0x00108005);
	
	lm2581_spi_write(0x00000004);
	lm2581_spi_write(0x2001E3C3);
	lm2581_spi_write(0x2C001902);
	lm2581_spi_write(0xC4002021);
	lm2581_spi_write(0x401F0860);
	spi_delay(50000);  
	lm2581_spi_write(0x401F0860);
}
Esempio n. 28
0
static int read_command(unsigned char reg,unsigned char *value)
{
	int i=16;
	int temp=0;
	int pin_value;
	unsigned char adr = reg;
	gpio_write_io(cs_pin,1);//CS=1
	gpio_write_io(data_pin,0);//SCL=0
	gpio_write_io(clk_pin,0);//SDA
	
	adr = adr << 1;
	// set csn low
	gpio_write_io(cs_pin,0);//CS=0
	spi_delay(delay_time);
	for(i=0;i<16;i++)
	{
		if(i<8)
		{
			if(i==1)
				gpio_write_io(data_pin,1); // read flag
			else
			{
				if(adr&0x80)
					gpio_write_io(data_pin,1);
				else
					gpio_write_io(data_pin,0);
				
				adr = adr << 1;
			}
			
			spi_delay(delay_time);
			gpio_write_io(clk_pin,1);
			spi_delay(delay_time);
			gpio_write_io(clk_pin,0);
			spi_delay(delay_time);
		}
		else
		{
			gpio_write_io(clk_pin,1);
			spi_delay(delay_time);
			pin_value=gpio_read_io(data_pin);
			temp = temp<<1;
			temp+=pin_value;
			
			spi_delay(delay_time);
			gpio_write_io(clk_pin,0);
			spi_delay(delay_time);
		}
		
	}
	gpio_write_io(cs_pin,1);
	*value = temp;
	printk("reg 0x%x,value 0x%x\r\n",reg,temp);
	return 0;
}
Esempio n. 29
0
static int sent_command(unsigned char adr,unsigned char value)
{
	int i=16;
	
	gpio_write_io(cs_pin,1);//CS=1
	gpio_write_io(data_pin,0);//SCL=0
	gpio_write_io(clk_pin,0);//SDA
	
	adr = adr << 1;
	// set csn low
	gpio_write_io(cs_pin,0);//CS=0
	spi_delay(delay_time);
	for(i=0;i<16;i++)
	{
		if(i<8)
		{
			if(i==1)
				gpio_write_io(data_pin,0); // write flag
			else
			{
				if(adr&0x80)
					gpio_write_io(data_pin,1);
				else
					gpio_write_io(data_pin,0);
				
				adr = adr << 1;
			}
			
			spi_delay(delay_time);
			gpio_write_io(clk_pin,1);
			spi_delay(delay_time);
			gpio_write_io(clk_pin,0);
			spi_delay(delay_time);
		}
		else
		{
			if(value&0x80)
				gpio_write_io(data_pin,1);
			else
				gpio_write_io(data_pin,0);

			value = value <<1;

			spi_delay(delay_time);
			gpio_write_io(clk_pin,1);
			spi_delay(delay_time);
			gpio_write_io(clk_pin,0);
			spi_delay(delay_time);
		}
		
	}
	gpio_write_io(cs_pin,1);
	return 0;
}
Esempio n. 30
0
/*******************************************************************************
* 函数名称: lm2581_spi_write
* 功    能: 并口寄存器epld spi通道写数据。先写高位 上升沿写数
* 参    数:
* 参数名称         类型                描述
* data      unsigned int        所要写入的数据
* length    unsigned char				数据位宽
* 返回值:
* 无
* 说   明:
* 日   期     版本    作者   修改人      DEBUG
* -----------------------------------------------------------------
* 2012/06/15  V1.0     H4     无       :
*******************************************************************************/
int lm2581_spi_write(unsigned int data)
{
	unsigned char i;
	lm2581_spi_le(1);
	spi_delay(1);
	lm2581_spi_clk(0);
	lm2581_spi_le(0);
	for(i=0;i<32;i++){
		if((data&(1<<(32-1-i)))!=0)
		lm2581_spi_out(1);
		else
		lm2581_spi_out(0);
		lm2581_spi_clk(0);
		spi_delay(1);
		lm2581_spi_clk(1);
		spi_delay(1);
		lm2581_spi_clk(0);
	}
	lm2581_spi_le(1);
	spi_delay(1);
	return 0;
}