// The following must be true (see datasheet): 0xX0 <= addr; len <= 0x10.
void EEPROM25AA02_writeRegisterN(EEPROM25AA02_Handle handle, uint8_t addr, uint8_t *buffer, int len) {
	uint32_t n = 0;
	for(n = 0; (n < MAX_WAIT_CYCLES) && (EEPROM25AA02_readStatus(handle) & 0x01); n++){
		asm(" NOP");
	}

	int index = 0;
	EEPROM25AA02_Obj *obj = (EEPROM25AA02_Obj *)handle;

	// take the chip select low to select the device:
	GPIO_setLow(obj->gpioHandle, obj->gpio_CS);
	EEPROM25AA02_spiTransferByte(handle, WREN);

	GPIO_setHigh(obj->gpioHandle, obj->gpio_CS);

	GPIO_setLow(obj->gpioHandle, obj->gpio_CS);

	EEPROM25AA02_spiTransferByte(handle, WRITE_instruction);
	EEPROM25AA02_spiTransferByte(handle, addr); //Send register location
	while(len > index){
		EEPROM25AA02_spiTransferByte(handle, buffer[index]);
		index++;
	}

	//EEPROM25AA02_spiTransferByte(handle, WRDI);

	for(n = 0; n < 0xf; n++){            //OK
		asm(" NOP");
	}

	// take the chip select high to de-select:
	GPIO_setHigh(obj->gpioHandle, obj->gpio_CS);
}
void EEPROM25AA02_writeRegister(EEPROM25AA02_Handle handle, uint8_t addr, uint8_t value) {
	uint32_t n = 0;
	for(n = 0; (n < MAX_WAIT_CYCLES) && (EEPROM25AA02_readStatus(handle) & 0x01); n++){
		asm(" NOP");
	}

	EEPROM25AA02_Obj *obj = (EEPROM25AA02_Obj *)handle;

	// take the chip select low to select the device:
	GPIO_setLow(obj->gpioHandle, obj->gpio_CS);
	EEPROM25AA02_spiTransferByte(handle, WREN);
	GPIO_setHigh(obj->gpioHandle, obj->gpio_CS);

	GPIO_setLow(obj->gpioHandle, obj->gpio_CS);

	EEPROM25AA02_spiTransferByte(handle, WRITE_instruction);
	EEPROM25AA02_spiTransferByte(handle, addr); //Send register location
	EEPROM25AA02_spiTransferByte(handle, value);  //Send value to record into register

	for(n = 0; n < 0xf; n++){            //OK
		asm(" NOP");
	}

	// take the chip select high to de-select:
	GPIO_setHigh(obj->gpioHandle, obj->gpio_CS);
}
예제 #3
0
/* Send a byte of data to LCD */
void SendByte(unsigned char Value)
{
	unsigned char temp;


	if((Value & 0x01) == 0x01)
		GPIO_setHigh(myGpio, D0);
	else
		GPIO_setLow(myGpio, D0);


	if((Value & 0x02) == 0x02)
		GPIO_setHigh(myGpio, D1);
	else
		GPIO_setLow(myGpio, D1);


	if((Value & 0x04) == 0x04)
		GPIO_setHigh(myGpio, D2);
	else
		GPIO_setLow(myGpio, D2);

	if((Value & 0x08) == 0x08)
		GPIO_setHigh(myGpio, D3);
	else
		GPIO_setLow(myGpio, D3);

	if((Value & 0x10) == 0x10)
		GPIO_setHigh(myGpio, D4);
	else
		GPIO_setLow(myGpio, D4);


	if((Value & 0x20) == 0x20)
		GPIO_setHigh(myGpio, D5);
	else
		GPIO_setLow(myGpio, D5);


	if((Value & 0x40) == 0x40)
		GPIO_setHigh(myGpio, D6);
	else
		GPIO_setLow(myGpio, D6);


	if((Value & 0x80) == 0x80)
		GPIO_setHigh(myGpio, D7);
	else
		GPIO_setLow(myGpio, D7);


	GPIO_setHigh(myGpio, E);			//Set E pin to select LCD
	for(temp=0;temp<5; temp++);
	GPIO_setLow(myGpio, E);				//Clear E pin to deselect LCD
	LCDDelay();				            //Small delay

}
void EEPROM25AA02_getEUI64(EEPROM25AA02_Handle handle, uint8_t *buffer) {
	uint32_t n = 0;
	for(n = 0; (n < MAX_WAIT_CYCLES) && (EEPROM25AA02_readStatus(handle) & 0x01); n++){
		asm(" NOP");
	}

	EEPROM25AA02_Obj *obj = (EEPROM25AA02_Obj *)handle;
	uint8_t i = 0;

	// take the chip select low to select the device:
	GPIO_setLow(obj->gpioHandle, obj->gpio_CS);
	EEPROM25AA02_spiTransferByte(handle, READ_instruction);
	// send the device the register you want to read:
	EEPROM25AA02_spiTransferByte(handle, 0xFA);
	for(i = 0; i < 8; i++){
		if(i == 3){
			buffer[i] = 0xFF;
		}else if(i == 4){
			buffer[i] = 0xFE;
		}else{
			buffer[i] = EEPROM25AA02_spiTransferByte(handle, 0x00);
		}
	}
	
	for(n = 0; n < 0xf; n++){            //OK
		asm(" NOP");
	}

	GPIO_setHigh(obj->gpioHandle, obj->gpio_CS);
}
uint8_t EEPROM25AA02_readRegisterN(EEPROM25AA02_Handle handle, uint8_t addr, uint8_t *buffer, int len) {
	uint32_t n = 0;
	for(n = 0; (n < MAX_WAIT_CYCLES) && (EEPROM25AA02_readStatus(handle) & 0x01); n++){
		asm(" NOP");
	}

	EEPROM25AA02_Obj *obj = (EEPROM25AA02_Obj *)handle;

	if(buffer == 0){
		return 1;
	}
	int index = 0;
	uint8_t result = 0;   // result to return
	// take the chip select low to select the device:
	GPIO_setLow(obj->gpioHandle, obj->gpio_CS);
	EEPROM25AA02_spiTransferByte(handle, READ_instruction);
	// send the device the register you want to read:
	EEPROM25AA02_spiTransferByte(handle, addr);
	while(len > index){
		result = EEPROM25AA02_spiTransferByte(handle, 0x00);
		buffer[index] = result;
		index++;
	}

	for(n = 0; n < 0xf; n++){            //OK
		asm(" NOP");
	}

	GPIO_setHigh(obj->gpioHandle, obj->gpio_CS);

	// return the result:
	return 0;
}
uint8_t EEPROM25AA02_readRegister(EEPROM25AA02_Handle handle, uint8_t addr) {
	uint32_t n = 0;
	for(n = 0; (n < MAX_WAIT_CYCLES) && (EEPROM25AA02_readStatus(handle) & 0x01); n++){
		asm(" NOP");
	}

	EEPROM25AA02_Obj *obj = (EEPROM25AA02_Obj *)handle;

	uint8_t result = 0;   // result to return
	// take the chip select low to select the device:
	GPIO_setLow(obj->gpioHandle, obj->gpio_CS);
	EEPROM25AA02_spiTransferByte(handle, READ_instruction);
	// send the device the register you want to read:
	EEPROM25AA02_spiTransferByte(handle, addr);
	// send a value of 0 to read the first byte returned:
	result = EEPROM25AA02_spiTransferByte(handle, 0x00);

	for(n = 0; n < 0xf; n++){            //OK
		asm(" NOP");
	}

	// take the chip select high to de-select:
	GPIO_setHigh(obj->gpioHandle, obj->gpio_CS);

	// return the result:
	return result;
}
예제 #7
0
/**************************************************************************************************
* Set Csn pin (spi control)
**************************************************************************************************/
void nRF_setCSN(bool bEnable,GPIO_Handle HandleGPIO)
{
	if(bEnable)
		GPIO_setHigh(HandleGPIO, HandleRF.structCSNPin);
	else
		GPIO_setLow(HandleGPIO, HandleRF.structCSNPin);
}
// Disable write protection on the whole array: 0x00.
// Enable  write protection on 0xC0 - 0xFF:     0x04.
// Enable  write protection on 0x80 - 0xFF:     0x08.
// Enable  write protection on the whole array: 0x0C.
void EEPROM25AA02_writeStatus(EEPROM25AA02_Handle handle, uint8_t value) {
	EEPROM25AA02_Obj *obj = (EEPROM25AA02_Obj *)handle;
	uint16_t n = 0;

	GPIO_setLow(obj->gpioHandle, obj->gpio_CS);

	EEPROM25AA02_spiTransferByte(handle, WRITE_STATUS_instruction);
	EEPROM25AA02_spiTransferByte(handle, value);  //Send value to record into register

	for(n = 0; n < 0xf; n++){            //OK
		asm(" NOP");
	}

	GPIO_setHigh(obj->gpioHandle, obj->gpio_CS);
}
예제 #9
0
파일: old.c 프로젝트: JackDoan/locolab
void main()
{
 memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
 WDOG_Handle myWDog;
 myWDog = WDOG_init((void *)WDOG_BASE_ADDR, sizeof(WDOG_Obj));
 WDOG_disable(myWDog);

 CLK_Handle myClk;
 PLL_Handle myPll;
 myClk = CLK_init((void *)CLK_BASE_ADDR, sizeof(CLK_Obj));
 myPll = PLL_init((void *)PLL_BASE_ADDR, sizeof(PLL_Obj));

  CLK_setOscSrc(myClk, CLK_OscSrc_Internal);

  PLL_setup(myPll, PLL_Multiplier_12, PLL_DivideSelect_ClkIn_by_2);

  GPIO_Handle myGpio;
  myGpio = GPIO_init((void *)GPIO_BASE_ADDR, sizeof(GPIO_Obj));

  GPIO_setMode(myGpio, GPIO_Number_0, GPIO_0_Mode_GeneralPurpose);
  GPIO_setDirection(myGpio, GPIO_Number_0, GPIO_Direction_Output);
  GPIO_setMode(myGpio, GPIO_Number_1, GPIO_1_Mode_GeneralPurpose);
  GPIO_setDirection(myGpio, GPIO_Number_1, GPIO_Direction_Output);
  GPIO_setMode(myGpio, GPIO_Number_2, GPIO_2_Mode_GeneralPurpose);
  GPIO_setDirection(myGpio, GPIO_Number_2, GPIO_Direction_Output);
  GPIO_setMode(myGpio, GPIO_Number_3, GPIO_3_Mode_GeneralPurpose);
  GPIO_setDirection(myGpio, GPIO_Number_3, GPIO_Direction_Output);

  GPIO_setHigh(myGpio, GPIO_Number_0);
  GPIO_setHigh(myGpio, GPIO_Number_1);
  GPIO_setHigh(myGpio, GPIO_Number_2);
  GPIO_setHigh(myGpio, GPIO_Number_3);

  while(1)
  {
    GPIO_setLow(myGpio, GPIO_Number_3);
    DELAY_US(1000000);
    GPIO_setHigh(myGpio, GPIO_Number_3);
    DELAY_US(1000000);
  }

}
uint8_t EEPROM25AA02_readStatus(EEPROM25AA02_Handle handle) {
	EEPROM25AA02_Obj *obj = (EEPROM25AA02_Obj *)handle;
	uint16_t n = 0;

	uint8_t result = 0;   // result to return

	// take the chip select low to select the device:
	GPIO_setLow(obj->gpioHandle, obj->gpio_CS);

	EEPROM25AA02_spiTransferByte(handle, READ_STATUS_instruction);
	result = EEPROM25AA02_spiTransferByte(handle, 0x00);

	for(n = 0; n < 0xf; n++){            //OK
		asm(" NOP");
	}

	GPIO_setHigh(obj->gpioHandle, obj->gpio_CS);

	return result;
}
예제 #11
0
/* Writes a command byte to LCD */
void WriteCommandLCD(unsigned char CommandByte)
{
	GPIO_setLow(myGpio, RS);	    //Clear RS pin to write command
	SendByte(CommandByte);
	LCDDelay();				        //Small delay
}