Beispiel #1
0
/* offset deve essere allineato a 16 bit (BIT0 non significativo) */
int bpi_flash_read(int32_t dev, uint32_t offset, uint32_t* bpi_data) {
	uint32_t app_data;

	//Imposto indirizzo
	app_data = offset << 1;
	CAENVME_WriteRegister(dev, A3818_BPI_FLASH_AD | 0x1000, app_data);

	//Abbasso il CE
	CAENVME_WriteRegister(dev, A3818_BPI_FLASH_CMD | 0x1000, 0x6);

	//Abbasso OE
	CAENVME_WriteRegister(dev, A3818_BPI_FLASH_CMD | 0x1000, 0x2);

	//Rialzo OE
	CAENVME_WriteRegister(dev, A3818_BPI_FLASH_CMD | 0x1000, 0x6);

	//Alzo CE
	CAENVME_WriteRegister(dev, A3818_BPI_FLASH_CMD | 0x1000, 0x7);

	//Sono significativi, per la lettura, solo i 16 bit bassi
	CAENVME_ReadRegister(dev, A3818_BPI_FLASH_DT | 0x1000, &app_data);
	*bpi_data = app_data & 0x0000FFFF;

	return 0;
}
Beispiel #2
0
/*-------------------------------------------------------------*/
int bpi_flash_write(int32_t dev, uint32_t offset, uint32_t bpi_data) {
	uint32_t data;

	//Imposto indirizzo
	data = offset << 1;

	CAENVME_WriteRegister(dev, A3818_BPI_FLASH_AD | 0x1000, data);

	//Imposto il dato
	//Per la scrittura i 16 bit da scrivere vanno messi nella parte alta del registro.
	data = bpi_data << 16;
	CAENVME_WriteRegister(dev, A3818_BPI_FLASH_DT | 0x1000, data);

	//Abbasso il CE
	CAENVME_WriteRegister(dev, A3818_BPI_FLASH_CMD | 0x1000, 0x6);

	//Abbasso WE
	CAENVME_WriteRegister(dev, A3818_BPI_FLASH_CMD | 0x1000, 0x4);

	//Rialzo WE
	CAENVME_WriteRegister(dev, A3818_BPI_FLASH_CMD | 0x1000, 0x6);

	//Alzo CE
	CAENVME_WriteRegister(dev, A3818_BPI_FLASH_CMD | 0x1000, 0x7);

	return 0;
}
	CAENVME_API parse_and_call_CAENVME_WriteRegister( char* arguments ){
		// parse string, call CAENVMElib function
		CAENVME_API caen_api_return_value;
		uint32_t address; // TODO CVRegisters !
		unsigned short value;// uint16_t value; // TODO unsigned short
		CVRegisters reg_address;

		// parse register address and input value
		char * pch;
		pch = strtok(arguments, " "); // blank space is the only delimeter in out case
		sscanf (pch, "%x", &address);
		reg_address = static_cast<CVRegisters>( address ); // uint32_t to enum
		sscanf (strtok(NULL, " "), "%x", &value);

		printf("Writing %x to register @ %x of the bridge device, handle ID = %d\n", value, address, bridge_handler);
		caen_api_return_value = CAENVME_WriteRegister(bridge_handler, reg_address, value);
		printf("Done\n");
		return caen_api_return_value;
	}
Beispiel #4
0
// Disabilita l'accesso alla BPI flash.
// L'a3818 può accedere alla sola flash SPI.
void A3818_EnableSPIAccess(int32_t handle) {
	uint32_t data;
	CAENVME_ReadRegister(handle, A3818_DMISCCS | 0x1000, &data);
	data = data & (~A3818_DMISCCS_SPI_BPI_FLASH_SEL);
	CAENVME_WriteRegister(handle, A3818_DMISCCS | 0x1000, data);
}