git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1380 35acf78f-673a-0410-8e92-d51de3d6d3f4

This commit is contained in:
gdisirio 2009-12-06 17:49:53 +00:00
parent b33d1f0a4e
commit f1aa994420
2 changed files with 12 additions and 6 deletions

View File

@ -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();
} }

View File

@ -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;
} }