本文整理汇总了C++中chSysLockFromIsr函数的典型用法代码示例。如果您正苦于以下问题:C++ chSysLockFromIsr函数的具体用法?C++ chSysLockFromIsr怎么用?C++ chSysLockFromIsr使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了chSysLockFromIsr函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: serve_interrupt
/**
* @brief Common IRQ handler.
*
* @param[in] sdp communication channel associated to the USART
*/
static void serve_interrupt(SerialDriver *sdp) {
USART_TypeDef *u = sdp->usart;
uint16_t cr1 = u->CR1;
uint16_t sr = u->SR; /* SR reset step 1.*/
uint16_t dr = u->DR; /* SR reset step 2.*/
/* Error condition detection.*/
if (sr & (USART_SR_ORE | USART_SR_NE | USART_SR_FE | USART_SR_PE))
set_error(sdp, sr);
/* Special case, LIN break detection.*/
if (sr & USART_SR_LBD) {
chSysLockFromIsr();
chnAddFlagsI(sdp, SD_BREAK_DETECTED);
chSysUnlockFromIsr();
u->SR &= ~USART_SR_LBD;
}
/* Data available.*/
if (sr & USART_SR_RXNE) {
chSysLockFromIsr();
sdIncomingDataI(sdp, (uint8_t)dr);
chSysUnlockFromIsr();
}
/* Transmission buffer empty.*/
if ((cr1 & USART_CR1_TXEIE) && (sr & USART_SR_TXE)) {
msg_t b;
chSysLockFromIsr();
b = chOQGetI(&sdp->oqueue);
if (b < Q_OK) {
chnAddFlagsI(sdp, CHN_OUTPUT_EMPTY);
u->CR1 = (cr1 & ~USART_CR1_TXEIE) | USART_CR1_TCIE;
}
else
u->DR = b;
chSysUnlockFromIsr();
}
/* Physical transmission end.*/
if (sr & USART_SR_TC) {
chSysLockFromIsr();
chnAddFlagsI(sdp, CHN_TRANSMISSION_END);
chSysUnlockFromIsr();
u->CR1 = cr1 & ~USART_CR1_TCIE;
u->SR &= ~USART_SR_TC;
}
}
开发者ID:AbuShaqra,项目名称:chibios-rt-arduino-due,代码行数:49,代码来源:serial_lld.c
示例2: _usb_ep0in
/**
* @brief Default EP0 IN callback.
* @details This function is used by the low level driver as default handler
* for EP0 IN events.
*
* @param[in] usbp pointer to the @p USBDriver object
* @param[in] ep endpoint number, always zero
*
* @notapi
*/
void _usb_ep0in(USBDriver *usbp, usbep_t ep) {
size_t max;
(void)ep;
switch (usbp->ep0state) {
case USB_EP0_TX:
max = usbFetchWord(&usbp->setup[6]);
/* If the transmitted size is less than the requested size and it is a
multiple of the maximum packet size then a zero size packet must be
transmitted.*/
if ((usbp->ep0n < max) && ((usbp->ep0n % usbp->epc[0]->in_maxsize) == 0)) {
usbPrepareTransmit(usbp, 0, NULL, 0);
chSysLockFromIsr();
usbStartTransmitI(usbp, 0);
chSysUnlockFromIsr();
usbp->ep0state = USB_EP0_WAITING_TX0;
return;
}
/* Falls into, it is intentional.*/
case USB_EP0_WAITING_TX0:
/* Transmit phase over, receiving the zero sized status packet.*/
usbp->ep0state = USB_EP0_WAITING_STS;
usbPrepareReceive(usbp, 0, NULL, 0);
chSysLockFromIsr();
usbStartReceiveI(usbp, 0);
chSysUnlockFromIsr();
return;
case USB_EP0_SENDING_STS:
/* Status packet sent, invoking the callback if defined.*/
if (usbp->ep0endcb != NULL)
usbp->ep0endcb(usbp);
usbp->ep0state = USB_EP0_WAITING_SETUP;
return;
default:
;
}
/* Error response, the state machine goes into an error state, the low
level layer will have to reset it to USB_EP0_WAITING_SETUP after
receiving a SETUP packet.*/
usb_lld_stall_in(usbp, 0);
usb_lld_stall_out(usbp, 0);
_usb_isr_invoke_event_cb(usbp, USB_EVENT_STALLED);
usbp->ep0state = USB_EP0_ERROR;
}
开发者ID:Ankhbayar,项目名称:mlab-chibios,代码行数:54,代码来源:usb.c
示例3: cmd_color
static void cmd_color(BaseSequentialStream *chp, int argc, char *argv[]) {
#define COLOR_USABLE_WITH_LOOP TRUE
#if !COLOR_USABLE_WITH_LOOP
uint32_t loop_times=1;
uint32_t loop_delay_ms=100;
if(argc > 0){
if(strcmp("-l", argv[0])==0){
if(argc > 1){
if(str_is_valid_num(argv[1])){
loop_times = atol(argv[1]);
if(argc > 2){
if(strcmp("-s", argv[2])==0){
if(argc > 3){
if(str_is_valid_num(argv[3])){
loop_delay_ms = atol(argv[3]);
} else {
chprintf(chp,invalid_num_str,argv[3]);
}
} else {
chprintf(chp,"please enter millisecond delay\n\r");
}
} else {
chprintf(chp,invalid_arg_str,argv[2]);
}
}
} else {
chprintf(chp,invalid_num_str, argv[1]);
}
} else {
chprintf(chp, "please enter a number of times to loop\n\r");
}
} else if(strcmp("-h",argv[0])==0){
chprintf(chp, "printing help:\n\r");
chprintf(chp, color_usage);
} else {
chprintf(chp, invalid_arg_str, argv[0]);
chprintf(chp, color_usage);
}
}
chprintf(chp, "looping %U times with delay of %U milliseconds:\n\r",
loop_times,loop_delay_ms);
while(loop_times--){
#endif
#if !USE_I2C_POLL_THD
request_color_data();
#endif
chSysLockFromIsr();
get_lx_from_cnts();
chSysUnlockFromIsr();
chprintf(chp, "color_lx: y=%U\tr=%U\tg=%U\tb=%U\n\r",
y_lx_val,r_lx_val,g_lx_val,b_lx_val);
#if !COLOR_USABLE_WITH_LOOP
chThdSleepMilliseconds(loop_delay_ms);
}
#endif
}
开发者ID:emdarcher,项目名称:chibios-tinkering,代码行数:56,代码来源:main.c
示例4: can_lld_wakeup_handler
/**
* @brief Wake up ISR handler.
*
* @param[in] canp pointer to the @p CANDriver object
*
* @notapi
*/
static void can_lld_wakeup_handler(CANDriver *canp) {
/* Wakeup event.*/
canp->state = CAN_READY;
can_lld_wakeup(canp);
chSysLockFromIsr();
chEvtBroadcastI(&canp->wakeup_event);
chSysUnlockFromIsr();
}
开发者ID:ISMER,项目名称:ChibiOS-RT,代码行数:17,代码来源:can_lld.c
示例5: gpt1cb
/*
* GPT1 callback.
*/
static void gpt1cb(GPTDriver *gptp) {
msg_t msg;
(void)gptp;
chSysLockFromIsr();
msg = chMBPostI(&mb[0], MSG_SEND_RIGHT);
if (msg != RDY_OK)
saturated = TRUE;
chSysUnlockFromIsr();
}
开发者ID:CNCBASHER,项目名称:ChibiOS,代码行数:13,代码来源:main.c
示例6: pwm3cb
static void pwm3cb(PWMDriver *pwmp) {
chSysLockFromIsr();
if (pwm_cycles > 8) {
pwmDisableChannelI(pwmp, 2);
pwmDisableChannelI(pwmp, 3);
tmp1 = (&GPT_DRIVER)->tim->CNT;
}
chSysUnlockFromIsr();
}
开发者ID:openrobots-dev,项目名称:R2P_Sonar_module,代码行数:10,代码来源:main_hardware_test.c
示例7: i2cDmaIrqHandler
// =============================== I2C =========================================
void i2cDmaIrqHandler(void *p, uint32_t flags) {
chSysLockFromIsr();
//Uart.Printf("===T===");
Thread *PThd = ((i2c_t*)p)->PRequestingThread;
if (PThd != NULL) {
((i2c_t*)p)->PRequestingThread = NULL;
chSchReadyI(PThd);
}
chSysUnlockFromIsr();
}
开发者ID:Kreyl,项目名称:nute,代码行数:11,代码来源:kl_lib_f2xx.cpp
示例8: extdetail_launch_detect
/*! Triggered when the pin changes state (both edges)
*
* Challenge: Add de-bouncing
*/
void extdetail_launch_detect(EXTDriver *extp, expchannel_t channel) {
(void)extp;
(void)channel;
chSysLockFromIsr();
chEvtBroadcastI(&extdetail_launch_detect_event);
chSysUnlockFromIsr();
}
开发者ID:aperiodic,项目名称:stm32,代码行数:14,代码来源:extdetail.c
示例9: TIM2_IRQHandler
void TIM2_IRQHandler(void) {
CH_IRQ_PROLOGUE();
chSysLockFromIsr();
if(TIM2->SR & TIM_SR_UIF) {
TIM2->SR &= ~TIM_SR_UIF;
Adc.IIrqSmpHandler();
}
chSysUnlockFromIsr();
CH_IRQ_EPILOGUE();
}
开发者ID:ramilian,项目名称:big_father_firmware,代码行数:10,代码来源:adc_ext.cpp
示例10: AdcTxIrq
void AdcTxIrq(void *p, uint32_t flags) {
dmaStreamDisable(ADC_DMA);
ADC1->CR2 = 0; // Disable ADC
// Signal event to thread
if(IPThread != nullptr) {
chSysLockFromIsr();
chEvtSignalI(IPThread, IEvt);
chSysUnlockFromIsr();
}
}
开发者ID:Kreyl,项目名称:Telegraph,代码行数:10,代码来源:adc_f2.cpp
示例11: systimer_serve_interrupt
/**
* @brief Process system timer interrupts, if present.
*
* @notapi
*/
static void systimer_serve_interrupt( void )
{
// Update the system time
chSysLockFromIsr();
chSysTimerHandlerI();
chSysUnlockFromIsr();
// Clear timer interrupt
ARM_TIMER_CLI = 0;
}
开发者ID:jesshack10,项目名称:iotwebmanager,代码行数:15,代码来源:hal_lld.c
示例12: gpt2cb
/*
* GPT2 callback.
*/
static void gpt2cb(GPTDriver *gptp) {
msg_t msg;
(void)gptp;
chSysLockFromIsr();
msg = chMBPostI(&mb[NUM_THREADS - 1], MSG_SEND_LEFT);
if (msg != RDY_OK)
saturated = TRUE;
chSysUnlockFromIsr();
}
开发者ID:CNCBASHER,项目名称:ChibiOS,代码行数:13,代码来源:main.c
示例13: AdcTxIrq
void AdcTxIrq(void *p, uint32_t flags) {
dmaStreamDisable(ADC_DMA);
// Resume thread if any
chSysLockFromIsr();
if(PAdcThread != NULL) {
if(PAdcThread->p_state == THD_STATE_SUSPENDED) chSchReadyI(PAdcThread);
PAdcThread = NULL;
}
chSysUnlockFromIsr();
}
开发者ID:Kreyl,项目名称:Quetta,代码行数:10,代码来源:adc_f2.cpp
示例14: txend2
/*
* This callback is invoked when a transmission has physically completed.
*/
static void txend2(UARTDriver *uartp) {
(void)uartp;
palSetPad(IOPORT3, GPIOC_LED);
chSysLockFromIsr();
if (chVTIsArmedI(&vt1))
chVTResetI(&vt1);
chVTSetI(&vt1, MS2ST(5000), restart, NULL);
chSysUnlockFromIsr();
}
开发者ID:Ankhbayar,项目名称:mlab-chibios,代码行数:13,代码来源:main.c
示例15: extcb1
/* Triggered when the button is pressed or released. The LED is set to ON.*/
static void extcb1(EXTDriver *extp, expchannel_t channel) {
(void)extp;
(void)channel;
palClearPad(GPIOC, GPIOC_LED);
chSysLockFromIsr();
if (!chVTIsArmedI(&vt))
chVTSetI(&vt, MS2ST(200), ledoff, NULL);
chSysUnlockFromIsr();
}
开发者ID:EmbeddedFiedel,项目名称:Carrera_F407_Controlunit,代码行数:11,代码来源:main.c
示例16: txend2
/*
* This callback is invoked when a transmission has physically completed.
*/
static void txend2(UARTDriver *uartp) {
(void)uartp;
palClearPad(GPIOE, GPIOE_LED3_RED);
chSysLockFromIsr();
if (chVTIsArmedI(&vt1))
chVTResetI(&vt1);
chVTSetI(&vt1, MS2ST(5000), restart, NULL);
chSysUnlockFromIsr();
}
开发者ID:EmbeddedFiedel,项目名称:ChibiOS,代码行数:13,代码来源:main.c
示例17: usb_event
/*
* Handles the USB driver global events.
*/
static void usb_event(USBDriver *usbp, usbevent_t event) {
uint8_t ep;
switch (event) {
case USB_EVENT_RESET:
return;
case USB_EVENT_ADDRESS:
return;
case USB_EVENT_CONFIGURED:
chSysLockFromIsr();
for (ep = 1; ep < 10; ep++)
{
// Make sure the endpoint are initialized from 1 to 9
if (ep == CDC1_NOTIFICATION_EPADDR)
usbInitEndpointI(usbp, CDC1_NOTIFICATION_EPADDR, &cdc1_ep_int_config);
if (ep == CDC1_TX_EPADDR)
usbInitEndpointI(usbp, CDC1_TX_EPADDR, &cdc1_ep_in_config);
if (ep == CDC1_RX_EPADDR)
usbInitEndpointI(usbp, CDC1_RX_EPADDR, &cdc1_ep_out_config);
if (ep == CDC2_NOTIFICATION_EPADDR)
usbInitEndpointI(usbp, CDC2_NOTIFICATION_EPADDR, &cdc2_ep_int_config);
if (ep == CDC2_TX_EPADDR)
usbInitEndpointI(usbp, CDC2_TX_EPADDR, &cdc2_ep_in_config);
if (ep == CDC2_RX_EPADDR)
usbInitEndpointI(usbp, CDC2_RX_EPADDR, &cdc2_ep_out_config);
#if HAL_USE_MSD
if (ep == MASS_STORAGE_IN_EPADDR)
usbInitEndpointI(usbp, MASS_STORAGE_IN_EPADDR, &ms_ep_in_config);
if (ep == MASS_STORAGE_OUT_EPADDR)
usbInitEndpointI(usbp, MASS_STORAGE_OUT_EPADDR, &ms_ep_out_config);
#endif
}
/* Resetting the state of the CDC subsystem.*/
sduConfigureHookI(usbp);
#if HAL_USE_MSD
msdConfigureHookI(usbp);
#endif
chSysUnlockFromIsr();
return;
case USB_EVENT_SUSPEND:
#if HAL_USE_MSD
msdSuspendHookI(usbp);
#endif
return;
case USB_EVENT_WAKEUP:
return;
case USB_EVENT_STALLED:
return;
}
return;
}
开发者ID:sam0737,项目名称:reprap-arduino-due,代码行数:58,代码来源:usbcfg.c
示例18: usb_event
/*
* Handles the USB driver global events.
* These events are triggered by the USB driver.
*/
static void usb_event(USBDriver *usbp, usbevent_t event) {
(void) usbp;
switch (event) {
case USB_EVENT_RESET:
/* Signals when a USB reset event has occurred.
* Typically this will happen at startup and when the cable
* is connected or disconnected.
* After a reset, the usb system will not be operational
* until it is configured.
*/
chSysLockFromIsr();
chEvtBroadcastFlagsI(&esUsbReset, (flagsmask_t)0);
chSysUnlockFromIsr();
return;
case USB_EVENT_ADDRESS:
return;
case USB_EVENT_CONFIGURED:
/* Enables the endpoints specified into the configuration.
* Note, this callback is invoked from an ISR so I-Class functions
* must be used.
*/
chSysLockFromIsr();
usbInitEndpointI(usbp, 1, &ep1config);
usbInitEndpointI(usbp, 2, &ep2config);
/* Signals that the configuration is complete, and the USB system
* is ready to be used.
*/
chEvtBroadcastFlagsI(&esUsbConfigured, (flagsmask_t)0);
chSysUnlockFromIsr();
return;
case USB_EVENT_SUSPEND:
return;
case USB_EVENT_WAKEUP:
return;
case USB_EVENT_STALLED:
return;
}
return;
}
开发者ID:kjellhar,项目名称:chibi-bldc,代码行数:46,代码来源:usbdevice.c
示例19: serve_interrupt
/**
* @brief Common IRQ handler.
* @note Tries hard to clear all the pending interrupt sources, we don't
* want to go through the whole ISR and have another interrupt soon
* after.
*
* @param[in] u pointer to an UART I/O block
* @param[in] sdp communication channel associated to the UART
*/
static void serve_interrupt(SerialDriver *sdp) {
LPC_USART_TypeDef *u = sdp->uart;
while (u->INTSTAT) {
if (u->INTSTAT & STAT_RXRDY) {
chSysLockFromIsr();
if (chIQIsEmptyI(&sdp->iqueue))
chnAddFlagsI(sdp, CHN_INPUT_AVAILABLE);
if (chIQPutI(&sdp->iqueue, u->RXDATA) < Q_OK)
chnAddFlagsI(sdp, SD_OVERRUN_ERROR);
chSysUnlockFromIsr();
}
if (u->INTSTAT & STAT_TXRDY) {
msg_t b;
chSysLockFromIsr();
b = chOQGetI(&sdp->oqueue);
chSysUnlockFromIsr();
if (b < Q_OK) {
u->INTENCLR = STAT_TXRDY;
chSysLockFromIsr();
chnAddFlagsI(sdp, CHN_OUTPUT_EMPTY);
chSysUnlockFromIsr();
break;
}
else {
u->TXDATA = b;
}
}
if (u->INTSTAT & (STAT_OVERRUN | STAT_DELTARXBRK |
STAT_FRAMERR | STAT_PARITYERR) ) {
IOREG32 stat = u->STAT;
set_error(sdp, stat);
u->STAT = stat;
}
}
}
开发者ID:AntidotRepository,项目名称:Quadrirotor,代码行数:51,代码来源:serial_lld.c
示例20: spicb
/*
* SPI end transfer callback.
*/
static void spicb(SPIDriver *spip) {
if(spip->state == SPI_COMPLETE){
/* On transfer end just releases the slave select line.*/
chSysLockFromIsr();
SPI_done = TRUE;
spiUnselectI(spip);
// palSetPad(GPIOC,4);
chSysUnlockFromIsr();
}
}
开发者ID:emdarcher,项目名称:chibios-tinkering,代码行数:14,代码来源:main.c
注:本文中的chSysLockFromIsr函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论