// 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); }
/* 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; }
/************************************************************************************************** * 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); }
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; }
/* 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 }