// 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); }
void DRV8301_enable(DRV8301_Handle handle) { DRV8301_Obj *obj = (DRV8301_Obj *)handle; static volatile uint16_t enableWaitTimeOut; uint16_t n = 0; // Enable the drv8301 GPIO_setHigh(obj->gpioHandle,obj->gpioNumber); enableWaitTimeOut = 0; // Make sure the Fault bit is not set during startup while(((DRV8301_readSpi(handle,DRV8301_RegName_Status_1) & DRV8301_STATUS1_FAULT_BITS) != 0) && (enableWaitTimeOut < 1000)) { if(++enableWaitTimeOut > 999) { obj->enableTimeOut = true; } } // Wait for the DRV8301 registers to update for(n=0;n<0xffff;n++) asm(" NOP"); return; }
/* Initializes LCD */ void InitializeLCD(void) { GPIO_setHigh(myGpio, E); LCDDelay1600(); LCDDelay1600(); LCDDelay1600(); LCDDelay1600(); WriteCommandLCD(0x38); //Command to select 8 bit interface LCDDelay1600(); WriteCommandLCD(0x38); //Command to select 8 bit interface LCDDelay(); //Small delay WriteCommandLCD(0x38); //Command to select 8 bit interface LCDDelay(); WriteCommandLCD(0x08); //Command to off cursor,display off WriteCommandLCD(0x01); //Command to Clear LCD LCDDelay1600(); WriteCommandLCD(0x06); //Command for setting entry mode WriteCommandLCD(0x0f); //Command to on cursor,blink cursor WriteCommandLCD(0x02); //Command return the cursor to home LCDDelay1600(); }
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); } }
// 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); }
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 Data byte to LCD */ void WriteDataLCD(unsigned char DataByte) { GPIO_setHigh(myGpio, RS); //Set RS pin to 1 to write Data SendByte(DataByte); LCDDelay(); //Small delay }