コード例 #1
0
ファイル: i2c.c プロジェクト: LILA-99/openiBoot
static void init_i2c(I2CInfo* i2c) {
	clock_gate_switch(i2c->clockgate, ON);

	gpio_custom_io(i2c->iic_sda_gpio, 2); // pull sda low?

	int i;
	for (i = 0; i < 19; i++) {
		gpio_custom_io(i2c->iic_scl_gpio, (i % 2) ? 2 : 0);
		udelay(5);
	}

	gpio_custom_io(i2c->iic_scl_gpio, 5); // generate stop condition?
	gpio_custom_io(i2c->iic_sda_gpio, 5);

	SET_REG(i2c->register_8, 0x30);
	SET_REG(i2c->register_C, 0x37);

	i2c->operation_result = 0;

	interrupt_install(i2c->interrupt, i2cIRQHandler, (uint32_t)i2c);
	interrupt_enable(i2c->interrupt);
}
コード例 #2
0
ファイル: gpio.c プロジェクト: LILA-99/openiBoot
int gpio_setup() {
	// Initialise it
	uint8_t v[8];
	if (!(GET_REG(POWER + POWER_ID) & 1)) {
		gpio_custom_io(0x502, 0);
		gpio_custom_io(0x503, 0);
		gpio_custom_io(0x504, 0);
		gpio_pulldown_configure(0x502, GPIOPDDown);
		gpio_pulldown_configure(0x503, GPIOPDDown);
		gpio_pulldown_configure(0x504, GPIOPDDown);
		gpio_custom_io(0x202, 0);
		gpio_custom_io(0x301, 0);
		gpio_custom_io(0x304, 0);
		gpio_custom_io(0x305, 0);
		gpio_pulldown_configure(0x202, GPIOPDDown);
		gpio_pulldown_configure(0x301, GPIOPDDown);
		gpio_pulldown_configure(0x304, GPIOPDDown);
		gpio_pulldown_configure(0x305, GPIOPDDown);
		udelay(100);
		v[0] = chipid_get_gpio_epoch();
		v[1] = gpio_pin_state(0x504);
		v[2] = gpio_pin_state(0x503);
		v[3] = gpio_pin_state(0x502);
		v[4] = gpio_pin_state(0x305);
		v[5] = gpio_pin_state(0x304);
		v[6] = gpio_pin_state(0x301);
		v[7] = gpio_pin_state(0x202);
		gpio_custom_io(0x502, 4);
		gpio_custom_io(0x503, 4);
		gpio_custom_io(0x504, 4);
		gpio_custom_io(0x202, 4);
		gpio_custom_io(0x301, 4);
		gpio_custom_io(0x304, 4);
		gpio_custom_io(0x305, 4);
		uint32_t new_status = ((v[0] << 3 | v[1] << 2 | v[2] << 1 | v[3]) << 16) | ((v[4] << 3 | v[5] << 2 | v[6] << 1 | v[7]) << 8) | 1;
		SET_REG(POWER + POWER_ID, (GET_REG(POWER + POWER_ID) & 0xFF000000) | (new_status & 0xFFFFFF));
	}

	interrupt_install(GPIO_INTERRUPT, gpio_handle_interrupt, 0);
	interrupt_enable(GPIO_INTERRUPT);

	return 0;
}
コード例 #3
0
ファイル: gpio.c プロジェクト: LILA-99/openiBoot
void gpio_pin_use_as_input(int port) {
	gpio_custom_io(port, 0);
}
コード例 #4
0
ファイル: gpio.c プロジェクト: BluwinterFX/openiBoot
void gpio_pin_output(int port, int bit) {
	gpio_custom_io(port, 0xE | bit); // 0b111U, where U is the argument
}
コード例 #5
0
ファイル: gpio.c プロジェクト: chronzz/openiBoot
void gpio_pin_output(int port, int bit) {
	gpio_custom_io(port, (bit&1)+2); // 2 = OFF/ 3 = ON
}
コード例 #6
0
ファイル: gpio.c プロジェクト: chronzz/openiBoot
void gpio_pin_reset(int port)
{
	gpio_custom_io(port, 4); 
}