mirror of https://github.com/rusefi/ChibiOS.git
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1380 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
b33d1f0a4e
commit
f1aa994420
|
@ -59,9 +59,11 @@ CH_IRQ_HANDLER(Vector8C) {
|
||||||
|
|
||||||
/* No more events until a message is transmitted.*/
|
/* No more events until a message is transmitted.*/
|
||||||
CAN1->TSR = CAN_TSR_RQCP0 | CAN_TSR_RQCP1 | CAN_TSR_RQCP2;
|
CAN1->TSR = CAN_TSR_RQCP0 | CAN_TSR_RQCP1 | CAN_TSR_RQCP2;
|
||||||
|
chSysLockFromIsr();
|
||||||
while (chSemGetCounterI(&CAND1.cd_txsem) < 0)
|
while (chSemGetCounterI(&CAND1.cd_txsem) < 0)
|
||||||
chSemSignalI(&CAND1.cd_txsem);
|
chSemSignalI(&CAND1.cd_txsem);
|
||||||
chEvtBroadcastI(&CAND1.cd_txempty_event);
|
chEvtBroadcastI(&CAND1.cd_txempty_event);
|
||||||
|
chSysUnlockFromIsr();
|
||||||
|
|
||||||
CH_IRQ_EPILOGUE();
|
CH_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
@ -75,21 +77,23 @@ CH_IRQ_HANDLER(Vector90) {
|
||||||
CH_IRQ_PROLOGUE();
|
CH_IRQ_PROLOGUE();
|
||||||
|
|
||||||
rf0r = CAN1->RF0R;
|
rf0r = CAN1->RF0R;
|
||||||
chSysLockFromIsr();
|
|
||||||
if ((rf0r & CAN_RF0R_FMP0) > 0) {
|
if ((rf0r & CAN_RF0R_FMP0) > 0) {
|
||||||
/* No more receive events until the queue 0 has been emptied.*/
|
/* No more receive events until the queue 0 has been emptied.*/
|
||||||
CAN1->IER &= ~CAN_IER_FMPIE0;
|
CAN1->IER &= ~CAN_IER_FMPIE0;
|
||||||
|
chSysLockFromIsr();
|
||||||
while (chSemGetCounterI(&CAND1.cd_rxsem) < 0)
|
while (chSemGetCounterI(&CAND1.cd_rxsem) < 0)
|
||||||
chSemSignalI(&CAND1.cd_rxsem);
|
chSemSignalI(&CAND1.cd_rxsem);
|
||||||
chEvtBroadcastI(&CAND1.cd_rxfull_event);
|
chEvtBroadcastI(&CAND1.cd_rxfull_event);
|
||||||
|
chSysUnlockFromIsr();
|
||||||
}
|
}
|
||||||
if ((rf0r & CAN_RF0R_FOVR0) > 0) {
|
if ((rf0r & CAN_RF0R_FOVR0) > 0) {
|
||||||
/* Overflow events handling.*/
|
/* Overflow events handling.*/
|
||||||
CAN1->RF0R = CAN_RF0R_FOVR0;
|
CAN1->RF0R = CAN_RF0R_FOVR0;
|
||||||
canAddFlagsI(&CAND1, CAN_OVERFLOW_ERROR);
|
canAddFlagsI(&CAND1, CAN_OVERFLOW_ERROR);
|
||||||
|
chSysLockFromIsr();
|
||||||
chEvtBroadcastI(&CAND1.cd_error_event);
|
chEvtBroadcastI(&CAND1.cd_error_event);
|
||||||
}
|
|
||||||
chSysUnlockFromIsr();
|
chSysUnlockFromIsr();
|
||||||
|
}
|
||||||
|
|
||||||
CH_IRQ_EPILOGUE();
|
CH_IRQ_EPILOGUE();
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,6 +56,7 @@ static void adccallback(adcsample_t *buffer, size_t n) {
|
||||||
ny += n;
|
ny += n;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static WORKING_AREA(adc_continuous_wa, 256);
|
static WORKING_AREA(adc_continuous_wa, 256);
|
||||||
static msg_t adc_continuous_thread(void *p){
|
static msg_t adc_continuous_thread(void *p){
|
||||||
|
|
||||||
|
@ -91,6 +92,7 @@ static msg_t can_rx(void *p) {
|
||||||
palTogglePad(IOPORT3, GPIOC_LED);
|
palTogglePad(IOPORT3, GPIOC_LED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
chEvtUnregister(&CAND1.cd_rxfull_event, &el);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,16 +101,16 @@ static msg_t can_tx(void * p) {
|
||||||
CANTxFrame txmsg;
|
CANTxFrame txmsg;
|
||||||
|
|
||||||
(void)p;
|
(void)p;
|
||||||
txmsg.cf_IDE = CAN_IDE_STD;
|
txmsg.cf_IDE = CAN_IDE_EXT;
|
||||||
txmsg.cf_EID = 0x01234567;
|
txmsg.cf_EID = 0x01234567;
|
||||||
txmsg.cf_RTR = CAN_RTR_DATA;
|
txmsg.cf_RTR = CAN_RTR_DATA;
|
||||||
txmsg.cf_DLC = 8;
|
txmsg.cf_DLC = 8;
|
||||||
txmsg.cf_data32[0] = 0x55AA55AA;
|
txmsg.cf_data32[0] = 0x55AA55AA;
|
||||||
txmsg.cf_data32[0] = 0x00FF00FF;
|
txmsg.cf_data32[1] = 0x00FF00FF;
|
||||||
|
|
||||||
while (!chThdShouldTerminate()) {
|
while (!chThdShouldTerminate()) {
|
||||||
canTransmit(&CAND1, &txmsg, TIME_INFINITE);
|
canTransmit(&CAND1, &txmsg, MS2ST(100));
|
||||||
chThdSleepMilliseconds(50);
|
/* chThdSleepMilliseconds(5);*/
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue