Пример #1
0
/**
 * \brief Set maXTouch configuration
 *
 * This function writes a set of predefined, optimal maXTouch configuration data
 * to the maXTouch Xplained Pro.
 *
 * \param device Pointer to mxt_device struct
 */
static void mxt_init(struct mxt_device *device)
{
	enum status_code status;

	/* T8 configuration object data */
	uint8_t t8_object[] = {
		0x0d, 0x00, 0x05, 0x0a, 0x4b, 0x00, 0x00,
		0x00, 0x32, 0x19
	};

	/* T9 configuration object data */
	uint8_t t9_object[] = {
		0x8B, 0x00, 0x00, 0x0E, 0x08, 0x00, 0x80,
		0x32, 0x05, 0x02, 0x0A, 0x03, 0x03, 0x20,
		0x02, 0x0F, 0x0F, 0x0A, 0x00, 0x00, 0x00,
		0x00, 0x18, 0x18, 0x20, 0x20, 0x00, 0x00,
		0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x02,
		0x02
	};

	/* T46 configuration object data */
	uint8_t t46_object[] = {
		0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x03,
		0x00, 0x00
	};
	
	/* T56 configuration object data */
	uint8_t t56_object[] = {
		0x02, 0x00, 0x01, 0x18, 0x1E, 0x1E, 0x1E,
		0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
		0x1E, 0x1E, 0x1E, 0x1E, 0x00, 0x00, 0x00,
		0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
		0x00, 0x00, 0x00, 0x00, 0x00
	};

	/* TWI configuration */
	twihs_master_options_t twi_opt = {
		.speed = MXT_TWI_SPEED,
		.chip  = MAXTOUCH_TWI_ADDRESS,
	};

	status = (enum status_code)twihs_master_setup(MAXTOUCH_TWI_INTERFACE, &twi_opt);
	Assert(status == STATUS_OK);

	/* Initialize the maXTouch device */
	status = mxt_init_device(device, MAXTOUCH_TWI_INTERFACE,
			MAXTOUCH_TWI_ADDRESS, MAXTOUCH_XPRO_CHG_PIO);
	Assert(status == STATUS_OK);

	/* Issue soft reset of maXTouch device by writing a non-zero value to
	 * the reset register */
	mxt_write_config_reg(device, mxt_get_object_address(device,
			MXT_GEN_COMMANDPROCESSOR_T6, 0)
			+ MXT_GEN_COMMANDPROCESSOR_RESET, 0x01);

	/* Wait for the reset of the device to complete */
	delay_ms(MXT_RESET_TIME);

	/* Write data to configuration registers in T7 configuration object */
	mxt_write_config_reg(device, mxt_get_object_address(device,
			MXT_GEN_POWERCONFIG_T7, 0) + 0, 0x20);
	mxt_write_config_reg(device, mxt_get_object_address(device,
			MXT_GEN_POWERCONFIG_T7, 0) + 1, 0x10);
	mxt_write_config_reg(device, mxt_get_object_address(device,
			MXT_GEN_POWERCONFIG_T7, 0) + 2, 0x4b);
	mxt_write_config_reg(device, mxt_get_object_address(device,
			MXT_GEN_POWERCONFIG_T7, 0) + 3, 0x84);

	/* Write predefined configuration data to configuration objects */
	mxt_write_config_object(device, mxt_get_object_address(device,
			MXT_GEN_ACQUISITIONCONFIG_T8, 0), &t8_object);
	mxt_write_config_object(device, mxt_get_object_address(device,
			MXT_TOUCH_MULTITOUCHSCREEN_T9, 0), &t9_object);
	mxt_write_config_object(device, mxt_get_object_address(device,
			MXT_SPT_CTE_CONFIGURATION_T46, 0), &t46_object);
	mxt_write_config_object(device, mxt_get_object_address(device,
			MXT_PROCI_SHIELDLESS_T56, 0), &t56_object);

	/* Issue recalibration command to maXTouch device by writing a non-zero
	 * value to the calibrate register */
	mxt_write_config_reg(device, mxt_get_object_address(device,
			MXT_GEN_COMMANDPROCESSOR_T6, 0)
			+ MXT_GEN_COMMANDPROCESSOR_CALIBRATE, 0x01);
}
Пример #2
0
/**
 * \brief Application entry point for AT24MACXX Component Example.
 *
 * \return Unused (ANSI-C compatibility).
 */
int main(void)
{
	uint32_t i;
	twihs_options_t opt;

	/* Initialize the SAM system */
	sysclk_init();

	/* Initialize the board */
	board_init();

	/* Turn off LEDs */
	ioport_set_pin_level(LED0_GPIO, LED0_INACTIVE_LEVEL);
	ioport_set_pin_level(LED1_GPIO, LED1_INACTIVE_LEVEL);

	/* Initialize the console UART */
	configure_console();

	/* Output example information */
	puts(STRING_HEADER);
	
	/* Configure systick for 1 ms */
	puts("Configure system tick to get 1ms tick period.\r");
	if (SysTick_Config(sysclk_get_cpu_hz() / 1000)) {
		puts("-E- Systick configuration error\r");
		while (1) {
			/* Capture error */
		}
	}

	/* Configure the options of TWI driver */
	opt.master_clk = sysclk_get_cpu_hz();
	opt.speed = AT24MAC_TWIHS_CLK;

	if (twihs_master_setup(BOARD_AT24MAC_TWIHS_INSTANCE, &opt) != TWIHS_SUCCESS) {
		puts("AT24MACXX initialization is failed.\r");
		ioport_set_pin_level(LED0_GPIO, LED0_ACTIVE_LEVEL);
		ioport_set_pin_level(LED1_GPIO, LED1_ACTIVE_LEVEL);
		while (1) {
			/* Capture error */
		}
	}
	
	at24macxx_reset();

	/* Fill EEPROM with memory pattern */
	if (at24macxx_fill_pattern(AT24MAC_MEM_ADDR,
			AT24MAC_MEM_ADDR + TEST_DATA_LENGTH - 1,
			MEMORY_PATTERN) != AT24MAC_WRITE_SUCCESS) {
		puts("AT24MACXX pattern fill is failed.\r");
		ioport_set_pin_level(LED0_GPIO, LED0_ACTIVE_LEVEL);
		ioport_set_pin_level(LED1_GPIO, LED1_ACTIVE_LEVEL);
		while (1) {
			/* Capture error */
		}
	}
	
	/* Wait at least 10 ms */
	mdelay(WAIT_TIME);

	if (at24macxx_read_continuous(AT24MAC_MEM_ADDR, TEST_DATA_LENGTH,
			test_data_rx) != AT24MAC_READ_SUCCESS) {
		puts("AT24MACXX read packet is failed.\r");
		ioport_set_pin_level(LED0_GPIO, LED0_ACTIVE_LEVEL);
		ioport_set_pin_level(LED1_GPIO, LED1_ACTIVE_LEVEL);
		while (1) {
			/* Capture error */
		}
	}

	/* Compare the sent and the received */
	for (i = 0; i < TEST_DATA_LENGTH; i++) {
		if (MEMORY_PATTERN != test_data_rx[i]) {
			/* No match */
			puts("Pattern comparison: Unmatched!\r");
			ioport_set_pin_level(LED0_GPIO, LED0_ACTIVE_LEVEL);
			ioport_set_pin_level(LED1_GPIO, LED1_ACTIVE_LEVEL);
			while (1) {
				/* Capture error */
			}
		}
	}
	puts("Pattern comparison: Matched!\r");

	/* Send test data to EEPROM */
	if (at24macxx_write_continuous(AT24MAC_MEM_ADDR, TEST_DATA_LENGTH,
			test_data_tx) != AT24MAC_WRITE_SUCCESS) {
		puts("AT24MACXX write packet is failed.\r");
		ioport_set_pin_level(LED0_GPIO, LED0_ACTIVE_LEVEL);
		ioport_set_pin_level(LED1_GPIO, LED1_ACTIVE_LEVEL);
		while (1) {
			/* Capture error */
		}
	}
	
	/* Wait at least 10 ms */
	mdelay(WAIT_TIME);

	/* Get memory from EEPROM */
	if (at24macxx_read_continuous(AT24MAC_MEM_ADDR, TEST_DATA_LENGTH,
			test_data_rx) != AT24MAC_READ_SUCCESS) {
		puts("AT24MACXX read packet is failed.\r");
		ioport_set_pin_level(LED0_GPIO, LED0_ACTIVE_LEVEL);
		ioport_set_pin_level(LED1_GPIO, LED1_ACTIVE_LEVEL);
		while (1) {
			/* Capture error */
		}
	}

	/* Compare the sent and the received */
	for (i = 0; i < TEST_DATA_LENGTH; i++) {
		if (test_data_tx[i] != test_data_rx[i]) {
			/* No match */
			puts("Data comparison: Unmatched!\r");
			ioport_set_pin_level(LED0_GPIO, LED0_ACTIVE_LEVEL);
			ioport_set_pin_level(LED1_GPIO, LED1_ACTIVE_LEVEL);
			while (1) {
				/* Capture error */
			}
		}
	}
	/* Match */
	puts("Data comparison: Matched!\r");

	/* Page Operation */
	for (i = 0; i < PAGE_SIZE; i++) {
		page_read_buf[i] = 0;
		page_write_buf[i] = i;
	}

	if (at24macxx_write_page(PAGE_ADDR, PAGE_SIZE, page_write_buf) !=
			AT24MAC_WRITE_SUCCESS) {
		puts("AT24MACXX page write is failed.\r");
		ioport_set_pin_level(LED0_GPIO, LED0_ACTIVE_LEVEL);
		ioport_set_pin_level(LED1_GPIO, LED1_ACTIVE_LEVEL);
		while (1) {
			/* Capture error */
		}
	}

	if (at24macxx_read_page(PAGE_ADDR, PAGE_SIZE, page_read_buf) !=
			AT24MAC_READ_SUCCESS) {
		puts("AT24MACXX page read is failed.\r");
		ioport_set_pin_level(LED0_GPIO, LED0_ACTIVE_LEVEL);
		ioport_set_pin_level(LED1_GPIO, LED1_ACTIVE_LEVEL);
		while (1) {
			/* Capture error */
		}
	}

	for (i = 0; i < PAGE_SIZE; i++) {
		if (page_read_buf[i] != page_write_buf[i]) {
			/* No match */
			puts("Page comparison: Unmatched!\r");
			ioport_set_pin_level(LED0_GPIO, LED0_ACTIVE_LEVEL);
			ioport_set_pin_level(LED1_GPIO, LED1_ACTIVE_LEVEL);
			while (1) {
				/* Capture error */
			}
		}
	}
	/* Match */
	puts("Page comparison: Matched!\r");
	while (1) {
	}
}