bool Scheduler_HasDelayElapsed(const uint_least16_t Delay, SchedulerDelayCounter_t* const DelayCounter) { SchedulerDelayCounter_t CurrentTickValue_LCL; SchedulerDelayCounter_t DelayCounter_LCL; uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); CurrentTickValue_LCL = Scheduler_TickCounter; SetGlobalInterruptMask(CurrentGlobalInt); DelayCounter_LCL = *DelayCounter; if (CurrentTickValue_LCL >= DelayCounter_LCL) { if ((CurrentTickValue_LCL - DelayCounter_LCL) >= Delay) { *DelayCounter = CurrentTickValue_LCL; return true; } } else { if (((MAX_DELAYCTR_COUNT - DelayCounter_LCL) + CurrentTickValue_LCL) >= Delay) { *DelayCounter = CurrentTickValue_LCL; return true; } } return false; }
void USB_Init( #if defined(USB_CAN_BE_BOTH) const uint8_t Mode #endif #if (defined(USB_CAN_BE_BOTH) && !defined(USE_STATIC_OPTIONS)) , #elif (!defined(USB_CAN_BE_BOTH) && defined(USE_STATIC_OPTIONS)) void #endif #if !defined(USE_STATIC_OPTIONS) const uint8_t Options #endif ) { #if !defined(USE_STATIC_OPTIONS) USB_Options = Options; #endif uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); NVM.CMD = NVM_CMD_READ_CALIB_ROW_gc; USB.CAL0 = pgm_read_byte(offsetof(NVM_PROD_SIGNATURES_t, USBCAL0)); USB.CAL1 = pgm_read_byte(offsetof(NVM_PROD_SIGNATURES_t, USBCAL1)); NVM.CMD = NVM_CMD_NO_OPERATION_gc; /* Ugly workaround to ensure an aligned table, since __BIGGEST_ALIGNMENT__ == 1 for the 8-bit AVR-GCC toolchain */ USB.EPPTR = ((intptr_t)&USB_EndpointTable[1] & ~(1 << 0)); USB.CTRLA = (USB_STFRNUM_bm | ((ENDPOINT_TOTAL_ENDPOINTS - 1) << USB_MAXEP_gp)); if ((USB_Options & USB_OPT_BUSEVENT_PRIHIGH) == USB_OPT_BUSEVENT_PRIHIGH) USB.INTCTRLA = (3 << USB_INTLVL_gp); else if ((USB_Options & USB_OPT_BUSEVENT_PRIMED) == USB_OPT_BUSEVENT_PRIMED) USB.INTCTRLA = (2 << USB_INTLVL_gp); else USB.INTCTRLA = (1 << USB_INTLVL_gp); SetGlobalInterruptMask(CurrentGlobalInt); #if defined(USB_CAN_BE_BOTH) USB_CurrentMode = Mode; #endif USB_IsInitialized = true; USB_ResetInterface(); }
static void USB_Device_SetAddress(void) { uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F); uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); Endpoint_ClearSETUP(); Endpoint_ClearStatusStage(); while (!(Endpoint_IsINReady())); USB_Device_SetDeviceAddress(DeviceAddress); USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default; SetGlobalInterruptMask(CurrentGlobalInt); }
void USB_Init( #if defined(USB_CAN_BE_BOTH) const uint8_t Mode #endif #if (defined(USB_CAN_BE_BOTH) && !defined(USE_STATIC_OPTIONS)) , #elif (!defined(USB_CAN_BE_BOTH) && defined(USE_STATIC_OPTIONS)) void #endif #if !defined(USE_STATIC_OPTIONS) const uint8_t Options #endif ) { #if !defined(USE_STATIC_OPTIONS) USB_Options = Options; #endif USB_IsInitialized = true; uint_reg_t CurrentGlobalInt = GetGlobalInterruptMask(); GlobalInterruptDisable(); NVM.CMD = NVM_CMD_READ_CALIB_ROW_gc; USB.CAL0 = pgm_read_byte(offsetof(NVM_PROD_SIGNATURES_t, USBCAL0)); NVM.CMD = NVM_CMD_READ_CALIB_ROW_gc; USB.CAL1 = pgm_read_byte(offsetof(NVM_PROD_SIGNATURES_t, USBCAL1)); USB.EPPTR = (intptr_t)&USB_EndpointTable; if ((USB_Options & USB_OPT_BUSEVENT_PRIHIGH) == USB_OPT_BUSEVENT_PRIHIGH) USB.INTCTRLA = (3 << USB_INTLVL_gp); else if ((USB_Options & USB_OPT_BUSEVENT_PRIMED) == USB_OPT_BUSEVENT_PRIMED) USB.INTCTRLA = (2 << USB_INTLVL_gp); else USB.INTCTRLA = (1 << USB_INTLVL_gp); SetGlobalInterruptMask(CurrentGlobalInt); USB_ResetInterface(); }