void main() { /* Place your initialization/startup code here (e.g. MyInst_Start()) */ uint16 adc, compare; LCD_Start(); ADC_Start(); PWM_Start(); /* CyGlobalIntEnable; */ /* Uncomment this line to enable global interrupts. */ for(;;) { /* Place your application code here. */ // LCD_ClearDisplay(); LCD_Start(); adc = 0; ADC_StartConvert(); ADC_IsEndConversion(ADC_WAIT_FOR_RESULT); ADC_StopConvert(); adc = ADC_GetResult16(); if(adc > 255) { if(adc == 0xFFFF) /* underflow correction */ { adc = 0x00; } else adc = 0xFF; /* Overflow correction */ } LCD_Position(0,0); LCD_PrintHexUint8(adc); compare = (uint16)(1000 + ((float)((float)((float)adc / (float)255) * (float)1000))); LCD_Position(1,0); LCD_PrintDecUint16(compare); PWM_WriteCompare(compare); PWM_WritePeriod(compare + 39999); } }
void updateLED() { double f1=(double)(QuadDec1_GetCounter()); double f2=(double)(QuadDec2_GetCounter()); f1=f1/10.0; f2=f2/10.0; double difference=f1-f2; if (difference<0) { difference=difference*(-1.0); } if (difference<1) difference=1.0; //difference=difference+0.1; int wc=(1000/difference); int wp=wc/2; PWM_WritePeriod(wc); PWM_WriteCompare(wp); bf=difference;//global }
/******************************************************************************* * Function Name: PWM_Init ******************************************************************************** * * Summary: * Initialize component's parameters to the parameters set by user in the * customizer of the component placed onto schematic. Usually called in * PWM_Start(). * * Parameters: * None * * Return: * None * *******************************************************************************/ void PWM_Init(void) { #if (PWM_UsingFixedFunction || PWM_UseControl) uint8 ctrl; #endif /* (PWM_UsingFixedFunction || PWM_UseControl) */ #if(!PWM_UsingFixedFunction) #if(PWM_UseStatus) /* Interrupt State Backup for Critical Region*/ uint8 PWM_interruptState; #endif /* (PWM_UseStatus) */ #endif /* (!PWM_UsingFixedFunction) */ #if (PWM_UsingFixedFunction) /* You are allowed to write the compare value (FF only) */ PWM_CONTROL |= PWM_CFG0_MODE; #if (PWM_DeadBand2_4) PWM_CONTROL |= PWM_CFG0_DB; #endif /* (PWM_DeadBand2_4) */ /* Set the default Compare Mode */ #if(CY_PSOC5A) ctrl = PWM_CONTROL2 & ((uint8)(~PWM_CTRL_CMPMODE1_MASK)); PWM_CONTROL2 = ctrl | PWM_DEFAULT_COMPARE1_MODE; #endif /* (CY_PSOC5A) */ #if(CY_PSOC3 || CY_PSOC5LP) ctrl = PWM_CONTROL3 & ((uint8 )(~PWM_CTRL_CMPMODE1_MASK)); PWM_CONTROL3 = ctrl | PWM_DEFAULT_COMPARE1_MODE; #endif /* (CY_PSOC3 || CY_PSOC5LP) */ /* Clear and Set SYNCTC and SYNCCMP bits of RT1 register */ PWM_RT1 &= ((uint8)(~PWM_RT1_MASK)); PWM_RT1 |= PWM_SYNC; /*Enable DSI Sync all all inputs of the PWM*/ PWM_RT1 &= ((uint8)(~PWM_SYNCDSI_MASK)); PWM_RT1 |= PWM_SYNCDSI_EN; #elif (PWM_UseControl) /* Set the default compare mode defined in the parameter */ ctrl = PWM_CONTROL & ((uint8)(~PWM_CTRL_CMPMODE2_MASK)) & ((uint8)(~PWM_CTRL_CMPMODE1_MASK)); PWM_CONTROL = ctrl | PWM_DEFAULT_COMPARE2_MODE | PWM_DEFAULT_COMPARE1_MODE; #endif /* (PWM_UsingFixedFunction) */ #if (!PWM_UsingFixedFunction) #if (PWM_Resolution == 8) /* Set FIFO 0 to 1 byte register for period*/ PWM_AUX_CONTROLDP0 |= (PWM_AUX_CTRL_FIFO0_CLR); #else /* (PWM_Resolution == 16)*/ /* Set FIFO 0 to 1 byte register for period */ PWM_AUX_CONTROLDP0 |= (PWM_AUX_CTRL_FIFO0_CLR); PWM_AUX_CONTROLDP1 |= (PWM_AUX_CTRL_FIFO0_CLR); #endif /* (PWM_Resolution == 8) */ PWM_WriteCounter(PWM_INIT_PERIOD_VALUE); #endif /* (!PWM_UsingFixedFunction) */ PWM_WritePeriod(PWM_INIT_PERIOD_VALUE); #if (PWM_UseOneCompareMode) PWM_WriteCompare(PWM_INIT_COMPARE_VALUE1); #else PWM_WriteCompare1(PWM_INIT_COMPARE_VALUE1); PWM_WriteCompare2(PWM_INIT_COMPARE_VALUE2); #endif /* (PWM_UseOneCompareMode) */ #if (PWM_KillModeMinTime) PWM_WriteKillTime(PWM_MinimumKillTime); #endif /* (PWM_KillModeMinTime) */ #if (PWM_DeadBandUsed) PWM_WriteDeadTime(PWM_INIT_DEAD_TIME); #endif /* (PWM_DeadBandUsed) */ #if (PWM_UseStatus || PWM_UsingFixedFunction) PWM_SetInterruptMode(PWM_INIT_INTERRUPTS_MODE); #endif /* (PWM_UseStatus || PWM_UsingFixedFunction) */ #if (PWM_UsingFixedFunction) /* Globally Enable the Fixed Function Block chosen */ PWM_GLOBAL_ENABLE |= PWM_BLOCK_EN_MASK; /* Set the Interrupt source to come from the status register */ PWM_CONTROL2 |= PWM_CTRL2_IRQ_SEL; #else #if(PWM_UseStatus) /* CyEnterCriticalRegion and CyExitCriticalRegion are used to mark following region critical*/ /* Enter Critical Region*/ PWM_interruptState = CyEnterCriticalSection(); /* Use the interrupt output of the status register for IRQ output */ PWM_STATUS_AUX_CTRL |= PWM_STATUS_ACTL_INT_EN_MASK; /* Exit Critical Region*/ CyExitCriticalSection(PWM_interruptState); /* Clear the FIFO to enable the PWM_STATUS_FIFOFULL bit to be set on FIFO full. */ PWM_ClearFIFO(); #endif /* (PWM_UseStatus) */ #endif /* (PWM_UsingFixedFunction) */ }
/******************************************************************************* * Function Name: PWM_RestoreConfig ******************************************************************************** * * Summary: * Restores the current user configuration of the component. * * Parameters: * void * * Return: * void * * Global variables: * PWM_backup: Variables of this global structure are used to * restore the values of non retention registers on wakeup from sleep mode. * *******************************************************************************/ void PWM_RestoreConfig(void) { #if(!PWM_UsingFixedFunction) #if (CY_PSOC5A) /* Interrupt State Backup for Critical Region*/ uint8 PWM_interruptState; /* Enter Critical Region*/ PWM_interruptState = CyEnterCriticalSection(); #if (PWM_UseStatus) /* Use the interrupt output of the status register for IRQ output */ PWM_STATUS_AUX_CTRL |= PWM_STATUS_ACTL_INT_EN_MASK; PWM_STATUS_MASK = PWM_backup.InterruptMaskValue; #endif /* (PWM_UseStatus) */ #if (PWM_Resolution == 8) /* Set FIFO 0 to 1 byte register for period*/ PWM_AUX_CONTROLDP0 |= (PWM_AUX_CTRL_FIFO0_CLR); #else /* (PWM_Resolution == 16)*/ /* Set FIFO 0 to 1 byte register for period */ PWM_AUX_CONTROLDP0 |= (PWM_AUX_CTRL_FIFO0_CLR); PWM_AUX_CONTROLDP1 |= (PWM_AUX_CTRL_FIFO0_CLR); #endif /* (PWM_Resolution == 8) */ /* Exit Critical Region*/ CyExitCriticalSection(PWM_interruptState); PWM_WriteCounter(PWM_backup.PWMUdb); PWM_WritePeriod(PWM_backup.PWMPeriod); #if(PWM_UseOneCompareMode) PWM_WriteCompare(PWM_backup.PWMCompareValue); #else PWM_WriteCompare1(PWM_backup.PWMCompareValue1); PWM_WriteCompare2(PWM_backup.PWMCompareValue2); #endif /* (PWM_UseOneCompareMode) */ #if(PWM_DeadBandMode == PWM__B_PWM__DBM_256_CLOCKS || \ PWM_DeadBandMode == PWM__B_PWM__DBM_2_4_CLOCKS) PWM_WriteDeadTime(PWM_backup.PWMdeadBandValue); #endif /* deadband count is either 2-4 clocks or 256 clocks */ #if ( PWM_KillModeMinTime) PWM_WriteKillTime(PWM_backup.PWMKillCounterPeriod); #endif /* ( PWM_KillModeMinTime) */ #endif /* (CY_PSOC5A) */ #if (CY_PSOC3 || CY_PSOC5LP) #if(!PWM_PWMModeIsCenterAligned) PWM_WritePeriod(PWM_backup.PWMPeriod); #endif /* (!PWM_PWMModeIsCenterAligned) */ PWM_WriteCounter(PWM_backup.PWMUdb); #if (PWM_UseStatus) PWM_STATUS_MASK = PWM_backup.InterruptMaskValue; #endif /* (PWM_UseStatus) */ #if(PWM_DeadBandMode == PWM__B_PWM__DBM_256_CLOCKS || \ PWM_DeadBandMode == PWM__B_PWM__DBM_2_4_CLOCKS) PWM_WriteDeadTime(PWM_backup.PWMdeadBandValue); #endif /* deadband count is either 2-4 clocks or 256 clocks */ #if(PWM_KillModeMinTime) PWM_WriteKillTime(PWM_backup.PWMKillCounterPeriod); #endif /* (PWM_KillModeMinTime) */ #endif /* (CY_PSOC3 || CY_PSOC5LP) */ #if(PWM_UseControl) PWM_WriteControlRegister(PWM_backup.PWMControlRegister); #endif /* (PWM_UseControl) */ #endif /* (!PWM_UsingFixedFunction) */ }
/******************************************************************************* * Function Name: StackEventHandler ******************************************************************************** * * Summary: * This is an event callback function to receive events from the BLE Component. * * Parameters: * uint8 event: Event from the CYBLE component * void* eventParams: A structure instance for corresponding event type. The * list of event structure is described in the component * datasheet. * * Return: * None * *******************************************************************************/ void StackEventHandler(uint32 event, void *eventParam) { char authFailReasonCode[3]; CYBLE_GAP_AUTH_FAILED_REASON_T *authFailReason; switch(event) { /* Mandatory events to be handled by Find Me Target design */ case CYBLE_EVT_STACK_ON: case CYBLE_EVT_GAP_DEVICE_DISCONNECTED: /* Start BLE advertisement for 30 seconds and update link * status on LEDs */ CyBle_GappStartAdvertisement(CYBLE_ADVERTISING_FAST); Advertising_LED_Write(LED_ON); PWM_WriteCompare(LED_NO_ALERT); break; case CYBLE_EVT_GAP_DEVICE_CONNECTED: UART_UartPutString("GAP Device Connected\r\n"); /* BLE link is established */ Advertising_LED_Write(LED_OFF); break; case CYBLE_EVT_TIMEOUT: if(*(uint8 *) eventParam == CYBLE_GAP_ADV_MODE_TO) { /* Advertisement event timed out, go to low power * mode (Hibernate mode) and wait for an external * user event to wake up the device again */ Advertising_LED_Write(LED_OFF); Hibernate_LED_Write(LED_ON); PWM_Stop(); Wakeup_SW_ClearInterrupt(); Wakeup_Interrupt_ClearPending(); Wakeup_Interrupt_Start(); CySysPmHibernate(); } break; /********************************************************** * GAP Events ***********************************************************/ case CYBLE_EVT_GAP_AUTH_REQ: UART_UartPutString("Authorization Requested\r\n"); break; case CYBLE_EVT_GAP_AUTH_COMPLETE: UART_UartPutString("Pairing is Successful!\r\n"); break; case CYBLE_EVT_GAP_AUTH_FAILED: authFailReason = ((CYBLE_GAP_AUTH_FAILED_REASON_T *)eventParam); UART_UartPutString("Authentication Failed with Reason Code: "); snprintf(authFailReasonCode, sizeof(authFailReasonCode), "%lu", (uint32)(*authFailReason)); UART_UartPutString(authFailReasonCode); UART_UartPutChar("\r\n"); break; /********************************************************** * GATT Events ***********************************************************/ case CYBLE_EVT_GATT_CONNECT_IND: UART_UartPutString("GATT Connection Indication\r\n"); /* Set OOB data after the connection indication but before the authorization * request is received. */ if(CyBle_GapSetOobData(cyBle_connHandle.bdHandle, CYBLE_GAP_OOB_ENABLE, securityKey, NULL, NULL) != CYBLE_ERROR_OK) { UART_UartPutString("Error in Setting OOB Data\r\n"); } else { UART_UartPutString("OOB Data is Set\r\n"); } break; default: break; } }