示例#1
0
unsigned char ow_reset(void)
{
	unsigned char presence;

 // pull DQ line low
	DDRE |= (1 << PE4); //set for output
	PORTE &= ~(1 << PE4); //set value low

 // leave it low for 480us
	delay_usec(479);

 // allow line to return high
	PORTE |= (1 << PE4); //set value high
	DDRE &= ~(1 << PE4); //set for input
	//PORTE &= ~(1 << PE4); //set value low?

 // wait for presence
	delay_usec(69);

 // get presence signal
	presence = !(PINE & (1 << PE4)); //read for presence

// wait for end of timeslot
	delay_usec(229); 

	return(presence); // presence signal returned
} // 1=presence, 0=no sensor
示例#2
0
文件: e1000.c 项目: m943040028/prex
static int
e1000_hw_reset(struct e1000_hw *hw)
{
	uint32_t ctrl;
	uint32_t icr;

	/* Clear interrupt mask to stop board from generating interrupts */
	ew32(IMC, 0xffffffff);

	/* Disable the Transmit and Receive units.  Then delay to allow
	 * any pending transactions to complete before we hit the MAC with
	 * the global reset.
	 */
	ew32(RCTL, 0);
	ew32(TCTL, E1000_TCTL_PSP);
	er32(STATUS); /* wait for complete */

	/* Delay to allow any outstanding PCI transactions to complete before
	 * resetting the device
	 */
	delay_usec(10000);
	ctrl = er32(CTRL);

	/* reset phy */
	ew32(CTRL, (ctrl | E1000_CTRL_PHY_RST));
	delay_usec(5000);

	/* Issue a global reset to the MAC.  This will reset the chip's
	 * transmit, receive, DMA, and link units.  It will not effect
	 * the current PCI configuration.  The global reset bit is self-
	 * clearing, and should clear within a microsecond.
	 */
	ew32(CTRL, (ctrl | E1000_CTRL_RST));

	/* After MAC reset, force reload of EEPROM to restore power-on
	 * settings to device.  Later controllers reload the EEPROM
	 * automatically, so just wait for reload to complete.
	 */
	delay_usec(20000);

	/* Clear interrupt mask to stop board from generating interrupts */
	ew32(IMC, 0xffffffff);

	/* Clear any pending interrupt events. */
	icr = er32(ICR);

	return 0;
}
示例#3
0
int ow_read_temperature(void)
{
	char get[10];
	char temp_lsb,temp_msb;
	int k;
	char temp_c;
	//char temp_f;
	ow_reset();
	ow_write_byte(0xCC); //Skip ROM
	ow_write_byte(0x44); // Start Conversion
	delay_usec(119); //wait 120us
	ow_reset();
	ow_write_byte(0xCC); // Skip ROM
	ow_write_byte(0xBE); // Read Scratch Pad
	for (k=0; k<9; k++) {
		get[k] = ow_read_byte();
	}
	temp_msb = get[1]; // Sign byte + lsbit
	temp_lsb = get[0]; // Temp data plus lsb
	if (temp_msb <= 0x80){temp_lsb = (temp_lsb/2);} // shift to get whole degree
	temp_msb = temp_msb & 0x80; // mask all but the sign bit
	if (temp_msb >= 0x80) {temp_lsb = (~temp_lsb)+1;} // twos complement
	if (temp_msb >= 0x80) {temp_lsb = (temp_lsb/2);}// shift to get whole degree
	if (temp_msb >= 0x80) {temp_lsb = ((-1)*temp_lsb);} // add sign bit
	temp_c = temp_lsb; // ready for conversion to Fahrenheit
	//temp_f = (((int)temp_c)* 9)/5 + 32;
	return temp_c;
}
示例#4
0
unsigned char ow_read_byte(void) 
{
	unsigned char value = 0;
	unsigned char i;
	for (i = 0; i < 8; i++) {
		if (ow_read_bit()) {
			value |= 0x01 << i; //reads a bit and left-shifts it into place
		}
		delay_usec(19); //wait 20us
	}
	return value;
}
示例#5
0
void ow_write_byte(char val)
{
	unsigned char i;
	unsigned char temp;
	for (i = 0; i < 8; i++) {
		temp = val >> i;
		temp &= 0x01;
		ow_write_bit(temp);
	}
	
	delay_usec(119); //wait 120us
}
示例#6
0
unsigned char ow_read_bit(void)
{
	//pull low
	DDRE |= (1 << PE4);
	PORTE &= ~(1 << PE4);
	//let return to high
	PORTE |= (1 << PE4); //set value high
	DDRE &= ~(1 << PE4); //set for input
	
	delay_usec(14); //wait 15us
	
	return(PINE & (1 << PE4));
}
示例#7
0
gpointer x11_event_thread(gpointer data)
{
    GCContext    *context = (GCContext*)data;
    GCX11Context *x11     = &context->X11_context;
    Movie        *movie   =  context->movie_context;

    long event_mask = KeyReleaseMask;

    XSelectInput(x11->display, x11->root_window, event_mask);

    do {
        XEvent event;

        if (XCheckMaskEvent(x11->display, event_mask, &event)) {
            XKeyEvent *keyEvent = (XKeyEvent*)&event;
            g_message("Key pressed: %d", keyEvent->keycode);

            g_mutex_lock(&context->movie_context->tick_lock);

            /*if (keyEvent->keycode == KEYCODE_RIGHT) {
               movie->ease_to_frame = get_frame_offset(context, GO_TO_NEXT_DAY, DAY_OFFSET_NOW); 
               movie->ease_to = TRUE;
               g_cond_broadcast(&context->movie_context->tick_cond);
            } else */
            if (keyEvent->keycode == KEYCODE_LEFT || keyEvent->keycode == KEYCODE_ESC) {
               exit(1);
               //movie->ease_to_frame = get_frame_offset(context, GO_TO_RAND_DAY, DAY_OFFSET_NOW); 
               //movie->ease_to = TRUE;
               //g_cond_broadcast(&context->movie_context->tick_cond);
            } else if (keyEvent->keycode == KEYCODE_UP) {
               movie->ease_to_frame = get_frame_offset(context, GO_TO_NEXT_DAY, DAY_OFFSET_NOW); 
               movie->ease_to = TRUE;
               g_cond_broadcast(&context->movie_context->tick_cond);
            } else if (keyEvent->keycode == KEYCODE_DOWN) {
               movie->ease_to_frame = get_frame_offset(context, GO_TO_PREV_DAY, DAY_OFFSET_NOW); 
               movie->ease_to = TRUE;
               g_cond_broadcast(&context->movie_context->tick_cond);
            }

            g_mutex_unlock(&context->movie_context->tick_lock);
        }

        g_thread_yield();
        delay_usec(10000);

    } while (!context->exit);

    return NULL;
}
示例#8
0
void ow_write_bit(char bitval)
{
	//pull low
	DDRE |= (1 << PE4);
	PORTE &= ~(1 << PE4);
	
	//if writing a one, go high
	if (bitval == 1) {
		PORTE |= (1 << PE4); //set value high
	}
	
	delay_usec(59); //wait 60us
	
	PORTE |= (1 << PE4); //set value high
	DDRE &= ~(1 << PE4); //set for input
}