Revision 1a8fb642 core/src/aos_system.c
core/src/aos_system.c | ||
---|---|---|
661 | 661 |
* |
662 | 662 |
* @param[in] args Pointer to the GPIO line identifier. |
663 | 663 |
*/ |
664 |
static void _extiCallback(void* args)
|
|
664 |
static void _gpioCallback(void* args)
|
|
665 | 665 |
{ |
666 | 666 |
aosDbgCheck((args != NULL) && (*((ioline_t*)args) != PAL_NOLINE) && (PAL_PAD(*((ioline_t*)args)) < sizeof(eventflags_t) * 8)); |
667 | 667 |
|
668 | 668 |
chSysLockFromISR(); |
669 |
chEvtBroadcastFlagsI(&aos.events.io, AOS_IOEVENT_FLAG(PAL_PAD(*((ioline_t*)args))));
|
|
669 |
chEvtBroadcastFlagsI(&aos.events.gpio, AOS_GPIOEVENT_FLAG(PAL_PAD(*((ioline_t*)args))));
|
|
670 | 670 |
chSysUnlockFromISR(); |
671 | 671 |
|
672 | 672 |
return; |
... | ... | |
690 | 690 |
// if the system is in operation phase |
691 | 691 |
if (aos.sssp.stage == AOS_SSSP_OPERATION) { |
692 | 692 |
// read signal S |
693 |
apalControlGpioGet(&moduleSsspGpioSync, &s_state);
|
|
693 |
apalControlGpioGet(&moduleSsspGpioS, &s_state); |
|
694 | 694 |
// if S was toggled from on to off |
695 | 695 |
if (s_state == APAL_GPIO_OFF) { |
696 | 696 |
// get current uptime |
... | ... | |
710 | 710 |
} |
711 | 711 |
} |
712 | 712 |
// broadcast event |
713 |
chEvtBroadcastFlagsI(&aos.events.io, AOS_IOEVENT_FLAG(PAL_PAD(*((ioline_t*)args))));
|
|
713 |
chEvtBroadcastFlagsI(&aos.events.gpio, AOS_GPIOEVENT_FLAG(PAL_PAD(*((ioline_t*)args))));
|
|
714 | 714 |
chSysUnlockFromISR(); |
715 | 715 |
|
716 | 716 |
return; |
... | ... | |
755 | 755 |
|
756 | 756 |
chSysLockFromISR(); |
757 | 757 |
// toggle and read signal S |
758 |
apalGpioToggle(moduleSsspGpioSync.gpio);
|
|
759 |
apalControlGpioGet(&moduleSsspGpioSync, &s_state);
|
|
758 |
apalGpioToggle(moduleSsspGpioS.gpio); |
|
759 |
apalControlGpioGet(&moduleSsspGpioS, &s_state); |
|
760 | 760 |
// if S was toggled from off to on |
761 | 761 |
if (s_state == APAL_GPIO_ON) { |
762 | 762 |
// reconfigure the timer precisely, because the logically falling edge (next interrupt) snychronizes the system time |
... | ... | |
817 | 817 |
aos.sssp.moduleId = 0; |
818 | 818 |
#endif /* (AMIROOS_CFG_SSSP_ENABLE == true) */ |
819 | 819 |
aosIOStreamInit(&aos.iostream); |
820 |
chEvtObjectInit(&aos.events.io); |
|
820 |
chEvtObjectInit(&aos.events.gpio);
|
|
821 | 821 |
chEvtObjectInit(&aos.events.os); |
822 | 822 |
|
823 | 823 |
/* interrupt setup */ |
824 | 824 |
#if (AMIROOS_CFG_SSSP_ENABLE == true) |
825 | 825 |
// PD signal |
826 |
palSetLineCallback(moduleSsspGpioPd.gpio->line, _extiCallback, &moduleSsspGpioPd.gpio->line);
|
|
827 |
palEnableLineEvent(moduleSsspGpioPd.gpio->line, APAL2CH_EDGE(moduleSsspGpioPd.meta.edge));
|
|
826 |
palSetLineCallback(moduleSsspGpioPD.gpio->line, _gpioCallback, &moduleSsspGpioPD.gpio->line);
|
|
827 |
palEnableLineEvent(moduleSsspGpioPD.gpio->line, APAL2CH_EDGE(moduleSsspGpioPD.meta.edge));
|
|
828 | 828 |
// SYNC signal |
829 | 829 |
#if (AMIROOS_CFG_SSSP_MASTER == true) |
830 |
palSetLineCallback(moduleSsspGpioSync.gpio->line, _extiCallback, &moduleSsspGpioSync.gpio->line);
|
|
830 |
palSetLineCallback(moduleSsspGpioS.gpio->line, _gpioCallback, &moduleSsspGpioS.gpio->line);
|
|
831 | 831 |
#else /* (AMIROOS_CFG_SSSP_MASTER == true) */ |
832 |
palSetLineCallback(moduleSsspGpioSync.gpio->line, _signalSyncCallback, &moduleSsspGpioSync.gpio->line);
|
|
832 |
palSetLineCallback(moduleSsspGpioS.gpio->line, _signalSyncCallback, &moduleSsspGpioS.gpio->line);
|
|
833 | 833 |
#endif /* (AMIROOS_CFG_SSSP_MASTER == true) */ |
834 |
palEnableLineEvent(moduleSsspGpioSync.gpio->line, APAL2CH_EDGE(moduleSsspGpioSync.meta.edge));
|
|
834 |
palEnableLineEvent(moduleSsspGpioS.gpio->line, APAL2CH_EDGE(moduleSsspGpioS.meta.edge));
|
|
835 | 835 |
#if (AMIROOS_CFG_SSSP_STACK_START != true) |
836 | 836 |
// DN signal |
837 |
palSetLineCallback(moduleSsspGpioDn.gpio->line, _extiCallback, &moduleSsspGpioDn.gpio->line);
|
|
838 |
palEnableLineEvent(moduleSsspGpioDn.gpio->line, APAL2CH_EDGE(moduleSsspGpioDn.meta.edge));
|
|
837 |
palSetLineCallback(moduleSsspGpioDN.gpio->line, _gpioCallback, &moduleSsspGpioDN.gpio->line);
|
|
838 |
palEnableLineEvent(moduleSsspGpioDN.gpio->line, APAL2CH_EDGE(moduleSsspGpioDN.meta.edge));
|
|
839 | 839 |
#endif /* (AMIROOS_CFG_SSSP_STACK_START != true) */ |
840 | 840 |
#if (AMIROOS_CFG_SSSP_STACK_END != true) |
841 | 841 |
// UP signal |
842 |
palSetLineCallback(moduleSsspGpioUp.gpio->line, _extiCallback, &moduleSsspGpioUp.gpio->line);
|
|
843 |
palEnableLineEvent(moduleSsspGpioUp.gpio->line, APAL2CH_EDGE(moduleSsspGpioUp.meta.edge));
|
|
842 |
palSetLineCallback(moduleSsspGpioUP.gpio->line, _gpioCallback, &moduleSsspGpioUP.gpio->line);
|
|
843 |
palEnableLineEvent(moduleSsspGpioUP.gpio->line, APAL2CH_EDGE(moduleSsspGpioUP.meta.edge));
|
|
844 | 844 |
#endif /* (AMIROOS_CFG_SSSP_STACK_END != true) */ |
845 | 845 |
#endif /* (AMIROOS_CFG_SSSP_ENABLE == true) */ |
846 | 846 |
|
... | ... | |
926 | 926 |
aos.sssp.stage = AOS_SSSP_STARTUP_2_2; |
927 | 927 |
|
928 | 928 |
// deactivate the sync signal to indicate that the module is ready (SSSPv1 stage 2.1 of startup phase) |
929 |
apalControlGpioSet(&moduleSsspGpioSync, APAL_GPIO_OFF);
|
|
929 |
apalControlGpioSet(&moduleSsspGpioS, APAL_GPIO_OFF); |
|
930 | 930 |
|
931 | 931 |
// wait for any event to occur (do not apply any filter in order not to miss any event) |
932 | 932 |
m = chEvtWaitOne(ALL_EVENTS); |
933 | 933 |
f = chEvtGetAndClearFlags(syncEvtListener); |
934 |
apalControlGpioGet(&moduleSsspGpioSync, &s);
|
|
934 |
apalControlGpioGet(&moduleSsspGpioS, &s); |
|
935 | 935 |
|
936 | 936 |
// if the event was a system event, |
937 | 937 |
// and it was fired because of the SysSync control signal, |
938 | 938 |
// and the SysSync control signal has been deactivated |
939 | 939 |
if (m & syncEvtListener->events && |
940 |
f == MODULE_SSSP_EVENTFLAGS_SYNC &&
|
|
940 |
f == MODULE_SSSP_EVENTFLAG_S &&
|
|
941 | 941 |
s == APAL_GPIO_OFF) { |
942 | 942 |
chSysLock(); |
943 | 943 |
// start the uptime counter |
... | ... | |
1030 | 1030 |
chSysLock(); |
1031 | 1031 |
// activate the SYS_PD control signal only, if this module initiated the shutdown |
1032 | 1032 |
if (shutdown != AOS_SHUTDOWN_PASSIVE) { |
1033 |
apalControlGpioSet(&moduleSsspGpioPd, APAL_GPIO_ON);
|
|
1033 |
apalControlGpioSet(&moduleSsspGpioPD, APAL_GPIO_ON);
|
|
1034 | 1034 |
} |
1035 | 1035 |
// activate the SYS_SYNC signal |
1036 |
apalControlGpioSet(&moduleSsspGpioSync, APAL_GPIO_ON);
|
|
1036 |
apalControlGpioSet(&moduleSsspGpioS, APAL_GPIO_ON); |
|
1037 | 1037 |
chSysUnlock(); |
1038 | 1038 |
#endif /* (AMIROOS_CFG_SSSP_ENABLE == true) */ |
1039 | 1039 |
|
... | ... | |
1152 | 1152 |
* |
1153 | 1153 |
* @return Pointer to the callback function. |
1154 | 1154 |
*/ |
1155 |
palcallback_t aosSysGetStdExtiCallback(void)
|
|
1155 |
palcallback_t aosSysGetStdGpioCallback(void)
|
|
1156 | 1156 |
{ |
1157 |
return _extiCallback;
|
|
1157 |
return _gpioCallback;
|
|
1158 | 1158 |
} |
1159 | 1159 |
|
1160 | 1160 |
/** @} */ |
Also available in: Unified diff